UNPKG

@jsreport/jsreport-data

Version:

jsreport extension adding support for using sample data for previewing templates

48 lines (39 loc) 1.54 kB
import DataEditor from './DataEditor.js' import DataProperties from './DataProperties.js' import Studio from 'jsreport-studio' Studio.addEntitySet({ name: 'data', faIcon: 'fa-database', visibleName: 'sample data', helpUrl: 'http://jsreport.net/learn/inline-data', entityTreePosition: 900 }) Studio.addPropertiesComponent(DataProperties.title, DataProperties, (entity) => entity.__entitySet === 'templates' || entity.__entitySet === 'components') Studio.addEditorComponent('data', DataEditor, (reformatter, entity) => ({ dataJson: reformatter(entity.dataJson, 'js') })) Studio.runListeners.push((request, entities) => { if (!request.template.data || !request.template.data.shortid) { return } // try to fill request.data from the active open tab with sample data const dataDetails = Object.keys(entities).map((e) => entities[e]) .filter((d) => d.shortid === request.template.data.shortid && d.__entitySet === 'data' && (d.__isLoaded || d.__isDirty || d.__isNew)) if (!dataDetails.length) { return } request.data = dataDetails[0].dataJson || JSON.stringify({}) }) Studio.entityNewListeners.push((entity) => { if (entity.__entitySet === 'data' && entity.dataJson == null) { entity.dataJson = '{}' } }) Studio.entitySaveListeners.push((entity) => { if (entity.__entitySet === 'data' && entity.dataJson != null) { try { JSON.parse(entity.dataJson) } catch (e) { e.message = `Error validating new data entity, Invalid JSON input. ${e.message}` throw e } } })