@jsreport/jsreport-data
Version:
jsreport extension adding support for using sample data for previewing templates
267 lines (247 loc) • 10.5 kB
JavaScript
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ([
/* 0 */
/***/ ((module) => {
module.exports = Studio;
/***/ }),
/* 1 */
/***/ ((module) => {
module.exports = Studio.libraries['react'];
/***/ }),
/* 2 */,
/* 3 */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jsreport_studio__WEBPACK_IMPORTED_MODULE_1__);
class DataEditor extends react__WEBPACK_IMPORTED_MODULE_0__.Component {
render() {
const {
entity,
onUpdate
} = this.props;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(jsreport_studio__WEBPACK_IMPORTED_MODULE_1__.TextEditor, {
name: entity._id,
mode: "json",
value: entity.dataJson || '',
onUpdate: v => onUpdate(Object.assign({}, entity, {
dataJson: v
}))
});
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DataEditor);
/***/ }),
/* 4 */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Properties)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(0);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jsreport_studio__WEBPACK_IMPORTED_MODULE_2__);
const EntityRefSelect = (jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().EntityRefSelect);
const sharedComponents = (jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().sharedComponents);
function selectDataItems(entities) {
return Object.keys(entities).filter(k => entities[k].__entitySet === 'data').map(k => entities[k]);
}
class Properties extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
static title(entity, entities) {
if (!entity.data || !entity.data.shortid) {
return 'data';
}
const foundItems = selectDataItems(entities).filter(e => entity.data.shortid === e.shortid);
if (!foundItems.length) {
return 'data';
}
return 'sample data: ' + foundItems[0].name;
}
componentDidMount() {
this.removeInvalidDataReferences();
}
componentDidUpdate() {
this.removeInvalidDataReferences();
}
removeInvalidDataReferences() {
const {
entity,
entities,
onChange
} = this.props;
if (!entity.data) {
return;
}
const updatedDataItems = Object.keys(entities).filter(k => entities[k].__entitySet === 'data' && entities[k].shortid === entity.data.shortid);
if (updatedDataItems.length === 0) {
onChange({
_id: entity._id,
data: null
});
}
}
render() {
const {
entity,
onChange
} = this.props;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
className: "properties-section"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
className: "form-group"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(EntityRefSelect, {
headingLabel: "Select data",
newLabel: "New data for template",
filter: references => ({
data: references.data
}),
value: entity.data ? entity.data.shortid : null,
onChange: selected => onChange({
_id: entity._id,
data: selected.length > 0 ? {
shortid: selected[0].shortid
} : null
}),
renderNew: modalProps => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(sharedComponents.NewEntityModal, _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, modalProps, {
options: {
...modalProps.options,
entitySet: 'data',
defaults: {
folder: entity.folder
},
activateNewTab: false
}
}))
})));
}
}
/***/ }),
/* 5 */
/***/ ((module) => {
module.exports = Studio.runtime['helpers/extends'];
/***/ })
/******/ ]);
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _DataEditor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
/* harmony import */ var _DataProperties_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(0);
/* harmony import */ var jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jsreport_studio__WEBPACK_IMPORTED_MODULE_2__);
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().addEntitySet({
name: 'data',
faIcon: 'fa-database',
visibleName: 'sample data',
helpUrl: 'http://jsreport.net/learn/inline-data',
entityTreePosition: 900
});
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().addPropertiesComponent(_DataProperties_js__WEBPACK_IMPORTED_MODULE_1__["default"].title, _DataProperties_js__WEBPACK_IMPORTED_MODULE_1__["default"], entity => entity.__entitySet === 'templates' || entity.__entitySet === 'components');
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().addEditorComponent('data', _DataEditor_js__WEBPACK_IMPORTED_MODULE_0__["default"], (reformatter, entity) => ({
dataJson: reformatter(entity.dataJson, 'js')
}));
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().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({});
});
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().entityNewListeners.push(entity => {
if (entity.__entitySet === 'data' && entity.dataJson == null) {
entity.dataJson = '{}';
}
});
jsreport_studio__WEBPACK_IMPORTED_MODULE_2___default().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;
}
}
});
})();
/******/ })()
;