@formio/reporting 1.0.3-rc.1 → 2.0.0-dev.36.07dba27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Changelog.md +81 -0
- package/README.md +5 -2
- package/build/reporting.css +6 -0
- package/build/reporting.css.map +1 -0
- package/build/reporting.js +1 -0
- package/build/reporting.vm.js +1 -0
- package/build/reporting.vm.js.LICENSE.txt +51 -0
- package/package.json +75 -1
- package/reportConfigTemplate.json +1 -0
- package/lib/Report.d.ts +0 -8
- package/lib/ReportForm.d.ts +0 -7
- package/lib/components/ReportingControls/ReportingControls.d.ts +0 -36
- package/lib/components/ReportingGrid/ReportingGrid.d.ts +0 -53
- package/lib/components/ReportingGrid/customFilters.d.ts +0 -12
- package/lib/components/index.d.ts +0 -7
- package/lib/index.d.ts +0 -23
- package/lib/licenseCheck/common.d.ts +0 -1
- package/lib/licenseCheck/index.d.ts +0 -2
- package/lib/licenseCheck/noLicenseCheck.d.ts +0 -1
- package/lib/providers/ReportingUrlFetchProvider.d.ts +0 -83
- package/lib/providers/index.d.ts +0 -5
- package/lib/services/ReportingStorageService.d.ts +0 -7
- package/lib/templates/bootstrap/index.d.ts +0 -6
- package/lib/templates/bootstrap/reportingGrid/index.d.ts +0 -4
- package/lib/templates/bootstrap3/index.d.ts +0 -6
- package/lib/templates/bootstrap3/reportingGrid/index.d.ts +0 -4
- package/lib/templates/index.d.ts +0 -14
- package/lib/templates/semantic/index.d.ts +0 -2
- package/lib/templates/semantic/reportingGrid/index.d.ts +0 -4
- package/lib/utils/AggregationOperators/AggregationOperator.d.ts +0 -23
- package/lib/utils/AggregationOperators/Avg.d.ts +0 -15
- package/lib/utils/AggregationOperators/Concat.d.ts +0 -15
- package/lib/utils/AggregationOperators/Count.d.ts +0 -17
- package/lib/utils/AggregationOperators/DateDiff.d.ts +0 -19
- package/lib/utils/AggregationOperators/DayOfMonth.d.ts +0 -18
- package/lib/utils/AggregationOperators/DayOfWeek.d.ts +0 -18
- package/lib/utils/AggregationOperators/DayOfYear.d.ts +0 -18
- package/lib/utils/AggregationOperators/Divide.d.ts +0 -15
- package/lib/utils/AggregationOperators/Max.d.ts +0 -15
- package/lib/utils/AggregationOperators/Min.d.ts +0 -15
- package/lib/utils/AggregationOperators/Month.d.ts +0 -18
- package/lib/utils/AggregationOperators/Multiply.d.ts +0 -15
- package/lib/utils/AggregationOperators/Percentage.d.ts +0 -15
- package/lib/utils/AggregationOperators/Size.d.ts +0 -23
- package/lib/utils/AggregationOperators/Subtract.d.ts +0 -16
- package/lib/utils/AggregationOperators/Sum.d.ts +0 -18
- package/lib/utils/AggregationOperators/Week.d.ts +0 -18
- package/lib/utils/AggregationOperators/Year.d.ts +0 -18
- package/lib/utils/AggregationOperators/index.d.ts +0 -21
- package/lib/utils/FilterOperators.d.ts +0 -2
- package/lib/utils/configurationFormUtils.d.ts +0 -51
- package/lib/utils/controlsUtils.d.ts +0 -252
- package/lib/utils/filtersQueries.d.ts +0 -21
- package/lib/utils/gridUtils.d.ts +0 -3
- package/lib/utils/index.d.ts +0 -295
- package/lib/utils/libraryName.d.ts +0 -2
- package/lib/utils/utils.d.ts +0 -16
- package/reporting.css +0 -3
- package/reporting.js +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Signature Pad v4.2.0 | https://github.com/szimek/signature_pad
|
|
3
|
+
* (c) 2024 Szymon Nowak | Released under the MIT license
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/*!
|
|
7
|
+
* dist/inputmask
|
|
8
|
+
* https://github.com/RobinHerbots/Inputmask
|
|
9
|
+
* Copyright (c) 2010 - 2023 Robin Herbots
|
|
10
|
+
* Licensed under the MIT license
|
|
11
|
+
* Version: 5.0.8
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/*!
|
|
15
|
+
* https://github.com/Starcounter-Jack/JSON-Patch
|
|
16
|
+
* (c) 2017-2021 Joachim Wester
|
|
17
|
+
* MIT license
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/*!
|
|
21
|
+
* https://github.com/Starcounter-Jack/JSON-Patch
|
|
22
|
+
* (c) 2017-2022 Joachim Wester
|
|
23
|
+
* MIT licensed
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/*! @formio/choices.js v10.2.1 | © 2024 Josh Johnson | https://github.com/jshjohnson/Choices#readme */
|
|
27
|
+
|
|
28
|
+
/*! @license DOMPurify 3.1.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.0/LICENSE */
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @license
|
|
32
|
+
* Lodash <https://lodash.com/>
|
|
33
|
+
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
34
|
+
* Released under MIT license <https://lodash.com/license>
|
|
35
|
+
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
36
|
+
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
//! Copyright (c) JS Foundation and other contributors
|
|
40
|
+
|
|
41
|
+
//! github.com/moment/moment-timezone
|
|
42
|
+
|
|
43
|
+
//! license : MIT
|
|
44
|
+
|
|
45
|
+
//! moment-timezone.js
|
|
46
|
+
|
|
47
|
+
//! moment.js
|
|
48
|
+
|
|
49
|
+
//! moment.js locale configuration
|
|
50
|
+
|
|
51
|
+
//! version : 0.5.45
|
package/package.json
CHANGED
|
@@ -1 +1,75 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "@formio/reporting",
|
|
3
|
+
"version": "2.0.0-dev.36.07dba27",
|
|
4
|
+
"description": "Reporting components for form.io",
|
|
5
|
+
"main": "build/reporting.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"watch": "tsc -w",
|
|
8
|
+
"build:style": "sass ./src/sass/reporting.scss ./dist/reporting.css",
|
|
9
|
+
"build:dist": "rm -rf lib && rm -rf dist && gulp licenseCheck && tsc && gulp templates && webpack --config=config/webpack.prod.js && gulp modifyPackage && yarn build:style",
|
|
10
|
+
"build:dev": "rm -rf lib && rm -rf dist && gulp licenseCheck && tsc && gulp templates && webpack --config=config/webpack.dev.js && gulp changeEntry && yarn build:style",
|
|
11
|
+
"build:portal": "rm -rf lib && rm -f build/reporting.js && rm -f build/reporting.css && gulp licenseCheck:noCheck && tsc && gulp templates && gulp report-config-template && webpack --config=config/webpack.portal.js && sass ./src/sass/reporting.scss ./build/reporting.css",
|
|
12
|
+
"build:vm": "rm -rf lib && rm -f build/reporting.vm.js && gulp licenseCheck:noCheck && tsc && gulp templates && webpack --config=config/webpack.vm.js",
|
|
13
|
+
"build": "yarn build:portal && yarn build:vm && yarn build:dist",
|
|
14
|
+
"lint": "tslint -p .",
|
|
15
|
+
"release": "yarn build && yarn publish ./dist --access public"
|
|
16
|
+
},
|
|
17
|
+
"pre-commit": [
|
|
18
|
+
"lint"
|
|
19
|
+
],
|
|
20
|
+
"files": [
|
|
21
|
+
"build",
|
|
22
|
+
"reportConfigTemplate.json"
|
|
23
|
+
],
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/formio/reporting"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"Form.io",
|
|
30
|
+
"components"
|
|
31
|
+
],
|
|
32
|
+
"license": "UNLICENSED",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/formio/reporting/issues"
|
|
35
|
+
},
|
|
36
|
+
"reportConfigVersion": 5,
|
|
37
|
+
"homepage": "https://github.com/formio/reporting#readme",
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@formio/js": "^5.0.0-rc.47",
|
|
40
|
+
"@formio/license": "^2.0.0-rc.2",
|
|
41
|
+
"@types/file-saver": "^2.0.5",
|
|
42
|
+
"@types/mocha": "^10.0.1",
|
|
43
|
+
"@types/node": "^20.1.5",
|
|
44
|
+
"chai": "^4.3.7",
|
|
45
|
+
"copy-webpack-plugin": "^9.0.1",
|
|
46
|
+
"ejsify": "^1.0.0",
|
|
47
|
+
"esm": "^3.2.25",
|
|
48
|
+
"gulp": "^4.0.2",
|
|
49
|
+
"gulp-insert": "^0.5.0",
|
|
50
|
+
"gulp-rename": "^2.0.0",
|
|
51
|
+
"gulp-template": "^5.0.0",
|
|
52
|
+
"javascript-obfuscator": "^4.0.2",
|
|
53
|
+
"jsdom": "^17.0.0",
|
|
54
|
+
"jsdom-global": "^3.0.2",
|
|
55
|
+
"mocha": "^10.2.0",
|
|
56
|
+
"nyc": "^15.1.0",
|
|
57
|
+
"pre-commit": "^1.2.2",
|
|
58
|
+
"request": "^2.88.2",
|
|
59
|
+
"sass": "^1.77.8",
|
|
60
|
+
"ts-node": "^10.9.1",
|
|
61
|
+
"ts-sinon": "^2.0.2",
|
|
62
|
+
"tslint": "^6.1.2",
|
|
63
|
+
"typescript": "5.1.6",
|
|
64
|
+
"webpack": "^5.88.1",
|
|
65
|
+
"webpack-cli": "^4.9.2",
|
|
66
|
+
"webpack-node-externals": "^3.0.0",
|
|
67
|
+
"webpack-obfuscator": "^3.5.1"
|
|
68
|
+
},
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"@formio/js": "^5.0.0-rc.47"
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"file-saver": "^2.0.5"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"resources":{"reportingui":{"title":"Reporting UI","type":"resource","name":"reportingui","path":"reportingui","display":"wizard","settings":{"wizardHeaderType":"Vertical"},"components":[{"title":"Basic Settings","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"basic","type":"panel","label":"Page 6","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version1","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Report Setup - Basic Settings</strong></span></p>","label":"Report Setup - Basic Settings","refreshOnChange":false,"key":"basicReportSettings","type":"content","input":false,"tableView":false},{"label":"Columns","columns":[{"components":[{"label":"Report Title","placeholder":"Report Title","applyMaskOn":"change","tableView":true,"validate":{"required":true},"key":"title","type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Report Name","placeholder":"Report Name","tooltip":"This is autogenerated by default to be a camel case version of the Report Title.","applyMaskOn":"change","tableView":true,"calculateValue":"value = _.camelCase(data.title);\n\n","allowCalculateOverride":true,"validate":{"pattern":"(\\w|\\w[\\w-.]*\\w)","patternMessage":"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot."},"unique":true,"key":"name","logic":[{"name":"make required","trigger":{"type":"javascript","javascript":"result = data.title;"},"actions":[{"name":"make required","type":"property","property":{"label":"Required","value":"validate.required","type":"boolean"},"state":true}]}],"type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"key":"columns1","type":"columns","input":false,"tableView":false},{"label":"Report Forms","persistent":false,"trigger":{"init":false,"server":false},"refreshOn":"forms","refreshOnEvent":"formsSet","event":"reportingFormsUpdated","dataSrc":"url","fetch":{"url":"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\",\")}}","method":"get","headers":[{"key":"","value":""}],"mapFunction":"value = _.isArray(responseData) ? responseData : [];","forwardHeaders":false,"authenticate":true},"allowCaching":true,"key":"reportingForms","type":"datasource","input":true,"tableView":false},{"label":"Container","tableView":false,"key":"gridSettings","type":"container","input":true,"components":[{"html":"<p><span class=\"text-big\">Report Grid - Basic Settings</span></p>","label":"Reporting Grid Basic Settings","refreshOnChange":false,"key":"basicReportingSettings3","type":"content","input":false,"tableView":false},{"label":"Items per page","widget":"choicesjs","tooltip":"Select how many records (Rows) to display on each page of the Report Grid by default.","tableView":true,"defaultValue":10,"data":{"values":[{"label":"5","value":5},{"label":"10","value":10},{"label":"25","value":25},{"label":"50","value":50},{"label":"100","value":100},{"label":"All","value":-1}]},"key":"itemsPerPage","type":"select","input":true,"weight":442},{"label":"Enable to Store Request Result in the Cache","tooltip":"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.","tableView":false,"defaultValue":true,"key":"allowCaching","type":"checkbox","input":true},{"label":"Cell max width","tooltip":"It sets the maximum size of the Report Grid cells.","applyMaskOn":"change","tableView":true,"key":"cellMaxWidth","type":"textfield","input":true}]}]},{"title":"Source Forms","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"dataSourcePanel","type":"panel","label":"Page 1","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version2","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Report Setup - Source Forms </strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources. </p>","label":"Basic Report Settings","refreshOnChange":false,"key":"sourceFormsSettings","type":"content","input":false,"tableView":false},{"label":"Choose from the Forms within this Project:","widget":"choicesjs","tooltip":"Select one or more related forms that will be the source of data for the Report Grid.","tableView":false,"multiple":true,"dataSrc":"url","data":{"url":"{{Formio.projectUrl}}/form","headers":[{"key":"","value":""}]},"valueProperty":"_id","template":"<span>{{ item.title }}</span>","validate":{"required":true,"select":false},"key":"forms","type":"select","disableLimit":false,"searchField":"title__regex","noRefreshOnScroll":false,"authenticate":true,"input":true},{"label":"Forms Connections","tooltip":"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.","tableView":false,"templates":{"header":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-6 font-weight-bold\">{{ t(component.label) }}</div>\n {% } %}\n {% }) %}\n </div>","row":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n {% if (component.key === 'baseForm') { %}\n <div class=\"col-sm-6\">\n {% } else { %}\n <div class=\"col-sm-4\">\n {% } %}\n {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\n </div>\n {% } %}\n {% }) %}\n {% if (!instance.options.readOnly && !instance.disabled) { %}\n <div class=\"col-sm-2\">\n <div class=\"btn-group pull-right\">\n <button class=\"btn btn-default btn-light btn-sm editRow\"><i class=\"{{ iconClass('edit') }}\"></i></button>\n {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\n <button class=\"btn btn-danger btn-sm removeRow\"><i class=\"{{ iconClass('trash') }}\"></i></button>\n {% } %}\n </div>\n </div>\n {% } %}\n </div>"},"addAnother":"Add Connection","redrawOn":"reportingForms","validate":{"required":true},"rowDrafts":false,"key":"connections","customConditional":"show = data.forms && data.forms.length > 1;","logic":[{"name":"min max validation","trigger":{"type":"javascript","javascript":"result = !!data.reportingForms;"},"actions":[{"name":"min max validation","type":"mergeComponentSchema","schemaDefinition":"schema = {validate: {\n maxLength: data.reportingForms.length - 1,\n minLength: data.reportingForms.length - 1,\n}}"}]}],"type":"editgrid","displayAsTable":false,"reorder":false,"addAnotherPosition":"bottom","layoutFixed":false,"enableRowGroups":false,"initEmpty":false,"input":true,"components":[{"label":"Data Source Connections","columns":[{"components":[{"label":"Base Form","widget":"choicesjs","placeholder":"Source Form","tooltip":"Select the form that has a common field with the row Joining Form.","tableView":true,"dataSrc":"custom","data":{"custom":"var rowIndex = instance.rowIndex;\nvar connections = instance.root.data.connections;\n\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\n"},"valueProperty":"value","validate":{"required":true},"key":"baseForm","type":"select","input":true},{"label":"Connecting field of base Form","widget":"choicesjs","placeholder":"Connecting Field","tooltip":"Select the base Form field that has a corresponding field in the row joining Form.","disabled":true,"tableView":false,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\n"},"valueProperty":"value","validate":{"required":true},"key":"baseFormField","logic":[{"name":"enable","trigger":{"type":"javascript","javascript":"result = row.baseForm"},"actions":[{"name":"enable","type":"property","property":{"label":"Disabled","value":"disabled","type":"boolean"},"state":false}]},{"name":"clear value","trigger":{"type":"javascript","javascript":"result = !row.baseForm"},"actions":[{"name":"clear value","type":"customAction","customAction":"instance.dataValue = instance.emptyValue"}]}],"type":"select","input":true},{"label":"Base Form path to connecting value","placeholder":"Path","applyMaskOn":"change","tableView":false,"key":"baseFormValuePath","customConditional":"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);","type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Joining Form","widget":"choicesjs","placeholder":"Source Form","tooltip":"Select the form that has a common field with the row Base Form.","tableView":true,"dataSrc":"custom","data":{"custom":"var rowIndex = instance.rowIndex;\nvar connections = instance.root.data.connections;\n\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\n\n"},"valueProperty":"value","refreshOn":"connections.baseForm","validate":{"required":true},"key":"joiningForm","type":"select","input":true},{"label":"Connecting field of joining Form","widget":"choicesjs","placeholder":"Connecting Field","tooltip":"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.","disabled":true,"tableView":false,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\n"},"valueProperty":"value","validate":{"required":true},"key":"joiningFormField","logic":[{"name":"enable","trigger":{"type":"javascript","javascript":"result = row.joiningForm"},"actions":[{"name":"enable","type":"property","property":{"label":"Disabled","value":"disabled","type":"boolean"},"state":false}]},{"name":"clear value","trigger":{"type":"javascript","javascript":"result = !row.joiningForm"},"actions":[{"name":"clear value","type":"customAction","customAction":"instance.dataValue = instance.emptyValue"}]}],"type":"select","input":true},{"label":"Joining Form path to connecting value","placeholder":"Path","applyMaskOn":"change","tableView":false,"key":"joiningFormValuePath","customConditional":"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);","type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"hideLabel":true,"key":"columns","type":"columns","input":false,"tableView":false}]}]},{"title":"Calculated Columns","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"extraColumnsPanel","type":"panel","label":"Page 7","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version3","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms. </p>","label":"Basic Reporting Settings","refreshOnChange":false,"key":"calculatedColumnsSettingsDescription","type":"content","input":false,"tableView":false},{"label":"Calculated Extra Columns","hideLabel":true,"tableView":false,"templates":{"header":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4 font-weight-bold\">{{ t(component.label) }}</div>\n {% } %}\n {% }) %}\n </div>","row":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4\">\n {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\n </div>\n {% } %}\n {% }) %}\n {% if (!instance.options.readOnly && !instance.disabled) { %}\n <div class=\"col-sm-4\">\n <div class=\"btn-group pull-right\">\n <button class=\"btn btn-default btn-light btn-sm editRow\"><i class=\"{{ iconClass('edit') }}\"></i></button>\n {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\n <button class=\"btn btn-danger btn-sm removeRow\"><i class=\"{{ iconClass('trash') }}\"></i></button>\n {% } %}\n </div>\n </div>\n {% } %}\n </div>"},"addAnother":"Add Column","redrawOn":"reportingForms","rowDrafts":false,"key":"calculatedColumns","type":"editgrid","displayAsTable":false,"input":true,"components":[{"label":"Columns","columns":[{"components":[{"label":"Column Title","applyMaskOn":"change","tableView":true,"validate":{"required":true},"key":"name","type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Column Key","applyMaskOn":"change","tableView":false,"calculateValue":"value = _.camelCase(row.name);","allowCalculateOverride":true,"validate":{"pattern":"(\\w|\\w[\\w-.]*\\w)","patternMessage":"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot."},"key":"key","logic":[{"name":"make required","trigger":{"type":"javascript","javascript":"result = row.title;"},"actions":[{"name":"make required","type":"property","property":{"label":"Required","value":"validate.required","type":"boolean"},"state":true}]}],"type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"key":"columns","type":"columns","input":false,"tableView":false},{"label":"Operator","widget":"choicesjs","tooltip":"Select an operator to calculate the column value.","tableView":true,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getAggregationOperatorsOptions(false);\n"},"valueProperty":"value","validate":{"required":true},"key":"operator","type":"select","input":true},{"label":"Arguments","widget":"choicesjs","tableView":false,"multiple":true,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"args","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"select","input":true},{"label":"Argument","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"arg","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"select","input":true},{"label":"Arguments","reorder":false,"addAnotherPosition":"bottom","layoutFixed":false,"enableRowGroups":false,"initEmpty":false,"tableView":false,"validate":{"required":true},"key":"concatArgs","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"datagrid","input":true,"components":[{"label":"Field","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"field","type":"select","input":true},{"label":"Connector","tooltip":"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.","applyMaskOn":"change","tableView":false,"key":"connector","type":"textfield","input":true}]},{"label":"Columns","columns":[{"components":[{"label":"Dividend","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"dividend","type":"select","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Divisor","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"divisor","type":"select","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"key":"divideArgs","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"columns","input":false,"tableView":false},{"label":"Columns","columns":[{"components":[{"label":"Minuend","widget":"choicesjs","tooltip":"Select the value from which another value is to be subtracted","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"minuend","type":"select","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Subtrahend","widget":"choicesjs","tooltip":"Select the value that is to be subtracted from the minuend","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"subtrahend","type":"select","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"key":"subtractArgs","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"columns","input":false,"tableView":false},{"label":"Columns","columns":[{"components":[{"label":"Start Date","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"startDate","type":"select","input":true}],"width":4,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":4},{"components":[{"label":"End Date","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"endDate","type":"select","input":true}],"width":4,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":4},{"components":[{"label":"Unit","widget":"choicesjs","tooltip":"Select the time measurement unit between the Start Date and End Date.","tableView":false,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getDateDiffUnitOptions(row.operator);"},"valueProperty":"value","validate":{"required":true},"key":"unit","type":"select","input":true}],"size":"md","width":4,"offset":0,"push":0,"pull":0,"currentWidth":4}],"key":"dateDiffArgs","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"columns","input":false,"tableView":false},{"label":"Date","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);"},"valueProperty":"value","validate":{"required":true},"key":"date","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"select","input":true},{"label":"Decimal Places","tooltip":"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.","applyMaskOn":"change","mask":false,"tableView":false,"delimiter":false,"requireDecimal":false,"inputFormat":"plain","truncateMultipleSpaces":false,"key":"decimalLimit","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"number","input":true}]},{"label":"Container","tableView":false,"key":"calculatedColumnsSettings","type":"container","input":true,"components":[{"html":"<p><span class=\"text-big\">Calculated Columns - Global Settings</span></p>","label":"Reporting Grid Basic Settings","refreshOnChange":false,"key":"calcSettingsDescription","type":"content","input":false,"tableView":false},{"label":"Use Thousands Separator","tooltip":"Separate thousands by local delimiter in calculated columns with number value","tableView":false,"defaultValue":false,"key":"thousandsSeparator","type":"checkbox","input":true}]}]},{"title":"Aggregation","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"groupingPanel","type":"panel","label":"Page 8","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version4","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields. </p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>","label":"Content","refreshOnChange":false,"key":"content","type":"content","input":false,"tableView":false},{"label":"Fields to group by","tooltip":"Select the fields that will be used as criteria for grouping the Data Source Forms` data.","reorder":false,"addAnother":"Add Field","addAnotherPosition":"bottom","layoutFixed":false,"enableRowGroups":false,"initEmpty":true,"tableView":false,"redrawOn":"reportingForms","key":"groups.groupingFields","type":"datagrid","input":true,"components":[{"label":"Field","widget":"choicesjs","placeholder":"Grouping Field","hideLabel":true,"tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvar calculatedColumns = instance.root.data.calculatedColumns;\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\n .map(col => col.field)\n .filter(col => col && !_.isEqual(instance.dataValue, col))\n .value();\n\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});"},"valueProperty":"value","validate":{"required":true},"key":"field","type":"select","input":true}]},{"label":"Calculated Aggregation Columns","tooltip":"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.","tableView":false,"templates":{"header":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4 font-weight-bold\">{{ t(component.label) }}</div>\n {% } %}\n {% }) %}\n </div>","row":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4\">\n {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\n </div>\n {% } %}\n {% }) %}\n {% if (!instance.options.readOnly && !instance.disabled) { %}\n <div class=\"col-sm-4\">\n <div class=\"btn-group pull-right\">\n <button class=\"btn btn-default btn-light btn-sm editRow\"><i class=\"{{ iconClass('edit') }}\"></i></button>\n {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\n <button class=\"btn btn-danger btn-sm removeRow\"><i class=\"{{ iconClass('trash') }}\"></i></button>\n {% } %}\n </div>\n </div>\n {% } %}\n </div>"},"addAnother":"Add Column","rowDrafts":false,"key":"groups.calculatedColumns","customConditional":"var groupingFields = _.get(data, 'groups.groupingFields', []);\nshow = _.some(groupingFields, field => !!field.field);","type":"editgrid","displayAsTable":false,"input":true,"components":[{"label":"Columns","columns":[{"components":[{"label":"Column Title","applyMaskOn":"change","tableView":true,"validate":{"required":true},"key":"name","type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6},{"components":[{"label":"Column Key","applyMaskOn":"change","tableView":false,"calculateValue":"value = _.camelCase(row.name);","allowCalculateOverride":true,"validate":{"pattern":"(\\w|\\w[\\w-.]*\\w)","patternMessage":"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot."},"key":"key","logic":[{"name":"make required","trigger":{"type":"javascript","javascript":"result = row.title;"},"actions":[{"name":"make required","type":"property","property":{"label":"Required","value":"validate.required","type":"boolean"},"state":true}]}],"type":"textfield","input":true}],"width":6,"offset":0,"push":0,"pull":0,"size":"md","currentWidth":6}],"key":"columns","type":"columns","input":false,"tableView":false},{"label":"Operator","widget":"choicesjs","tooltip":"Select operator to calculate column value","tableView":true,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getAggregationOperatorsOptions(true);"},"valueProperty":"value","validate":{"required":true},"key":"operator","type":"select","input":true},{"label":"Argument","widget":"choicesjs","tableView":false,"dataSrc":"custom","data":{"custom":"var reportingForms = instance.root.data.reportingForms;\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});"},"valueProperty":"value","validate":{"required":true},"key":"argument","customConditional":"show = utils.reporting.showGroupOperatorArg(row.operator);","type":"select","input":true},{"label":"Decimal Places","tooltip":"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.","applyMaskOn":"change","mask":false,"tableView":false,"delimiter":false,"requireDecimal":false,"inputFormat":"plain","truncateMultipleSpaces":false,"key":"decimalLimit","customConditional":"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);","type":"number","input":true}]}]},{"title":"Columns","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"columnsPanel","type":"panel","label":"Page 2","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version5","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Report Setup - Columns </strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime. </p>","label":"Basic Reporting Settings","refreshOnChange":false,"key":"basicReportingSettings2","type":"content","input":false,"tableView":false},{"label":"Columns List","persistent":false,"redrawOn":"reportingForms","calculateValue":"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);","key":"columnsList","type":"hidden","input":true,"tableView":false},{"label":"Report Type","persistent":false,"calculateValue":"value = utils.reporting.getReportTypeInfo(data, instance);","key":"reportType","type":"hidden","input":true,"tableView":false},{"label":"Available Columns","tooltip":"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.","reorder":true,"addAnother":"Add Column","addAnotherPosition":"bottom","layoutFixed":false,"enableRowGroups":false,"initEmpty":true,"tableView":false,"validate":{"required":true},"key":"availableColumns","logic":[{"name":"clear Columns","trigger":{"type":"javascript","javascript":"result = data.reportType?.typeChanged;"},"actions":[{"name":"clear","type":"customAction","customAction":"instance.resetValue();"}]}],"type":"datagrid","input":true,"components":[{"label":"Column","widget":"choicesjs","tableView":true,"dataSrc":"custom","data":{"custom":"var selectedItems = _.chain(instance.root.data.availableColumns || [])\n .map(col => col.column)\n .filter(col => col && !_.isEqual(instance.dataValue, col))\n .value();\n\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\n"},"valueProperty":"value","refreshOn":"columnsList","validate":{"required":true},"key":"column","type":"select","input":true},{"label":"Display Title","tooltip":"This title will be shown in the Report. If not set, original component title will be used.","applyMaskOn":"change","tableView":true,"key":"displayTitle","customConditional":"show = row.column && row.column.formId;","type":"textfield","input":true}]},{"label":"Default Columns","widget":"choicesjs","tooltip":"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.","tableView":false,"multiple":true,"dataSrc":"custom","data":{"custom":"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);"},"valueProperty":"value","refreshOn":"availableColumns","key":"defaultColumns","logic":[{"name":"clear Columns","trigger":{"type":"javascript","javascript":"result = data.reportType?.typeChanged;"},"actions":[{"name":"clear","type":"customAction","customAction":"instance.resetValue();"}]}],"type":"select","input":true}]},{"title":"Control Panel","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"collapsible":false,"key":"controlsPanel","type":"panel","label":"Page 9","input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version6","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid. </p>","label":"Basic Reporting Settings","refreshOnChange":false,"key":"basicReportingSettings7","type":"content","input":false,"tableView":false},{"label":"Enable Control Panel","tooltip":"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.","tableView":false,"defaultValue":false,"key":"enableControls","type":"checkbox","input":true},{"label":"Controls Settings","tableView":false,"key":"controlsSettings","customConditional":"show = data.enableControls;","type":"container","input":true,"components":[{"html":"<p><span class=\"text-big\">Report Controls - Basic Settings</span></p>","label":"Reporting Grid Basic Settings","refreshOnChange":false,"key":"basicReportingSettings8","type":"content","input":false,"tableView":false},{"label":"Control Panel Title","tooltip":"This title will be displayed for the Control Panel.","applyMaskOn":"change","tableView":true,"key":"title","type":"textfield","input":true},{"label":"Control Panel Theme","widget":"choicesjs","tableView":true,"defaultValue":"default","data":{"values":[{"label":"Default","value":"default"},{"label":"Primary","value":"primary"},{"label":"Info","value":"info"},{"label":"Success","value":"success"},{"label":"Danger","value":"danger"},{"label":"Warning","value":"warning"}]},"key":"theme","type":"select","input":true},{"label":"Initially Collapsed","tooltip":"If checked, the Control Panel will initially be collapsed.","tableView":false,"defaultValue":false,"key":"collapsePanel","type":"checkbox","input":true}]}]},{"title":"Filters ","collapsible":false,"key":"filtersPanel","conditional":{"show":true,"conjunction":"all","conditions":[{"component":"enableControls","operator":"isEqual","value":true}]},"type":"panel","label":"Page 3","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version7","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below. </p>","label":"Basic Reporting Settings","refreshOnChange":false,"key":"basicReportingSettings5","type":"content","input":false,"tableView":false},{"label":"Number Of Filters Per Row","widget":"choicesjs","tooltip":"How many filters display horizontally in each row of the Control Panel Filters Section.","tableView":false,"defaultValue":2,"data":{"values":[{"label":"1","value":"1"},{"label":"2","value":"2"},{"label":"3","value":"3"},{"label":"4","value":"4"}]},"dataType":"number","key":"filtersPerRow","type":"select","input":true},{"label":"Filter Label Position","widget":"choicesjs","tooltip":"Position for the labels of the Controls Filter Fields.","tableView":false,"defaultValue":"top","data":{"values":[{"label":"Top","value":"top"},{"label":"Left","value":"left-left"},{"label":"Right","value":"right-right"}]},"key":"filterLabelPosition","type":"select","input":true},{"label":"Control Panel Filters","tooltip":"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.","reorder":true,"addAnotherPosition":"bottom","layoutFixed":false,"enableRowGroups":false,"initEmpty":true,"tableView":false,"key":"filters","type":"datagrid","input":true,"components":[{"label":"Field","widget":"choicesjs","tableView":true,"dataSrc":"custom","data":{"custom":"values = instance.root.data.columnsList;"},"valueProperty":"value","refreshOn":"columnsList","validate":{"required":true},"key":"field","type":"select","input":true},{"label":"Filter Type","widget":"choicesjs","tooltip":"Select filter operator you want to apply for filtering the field.","tableView":true,"dataSrc":"custom","data":{"custom":"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\n\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])"},"valueProperty":"value","validate":{"required":true},"key":"filterType","type":"select","input":true},{"label":"Filter Title","tooltip":"This title will be displayed next to the filter. If not set, the label of the filter field is used.","applyMaskOn":"change","tableView":true,"key":"filterTitle","type":"textfield","input":true}]}]},{"title":"Actions","collapsible":false,"key":"actionsPanel","conditional":{"show":true,"conjunction":"all","conditions":[{"component":"enableControls","operator":"isEqual","value":true}]},"type":"panel","label":"Page 4","breadcrumbClickable":true,"buttonSettings":{"previous":true,"cancel":true,"next":true},"navigateOnEnter":false,"saveOnEnter":false,"scrollToTop":false,"input":false,"tableView":false,"components":[{"html":"<p style=\"text-align:right;\"><span class=\"text-small\"><i>v{{form.properties.version}}</i></span></p>","label":"Content","customClass":"text-muted","refreshOnChange":false,"key":"version8","type":"content","input":false,"tableView":false},{"html":"<p><span class=\"text-big\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below. </p>","label":"Basic Reporting Settings","refreshOnChange":false,"key":"basicReportingSettings6","type":"content","input":false,"tableView":false},{"label":"Actions","tooltip":"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.","tableView":false,"templates":{"header":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4 font-weight-bold\">{{ t(component.label) }}</div>\n {% } %}\n {% }) %}\n </div>","row":"<div class=\"row\">\n {% util.eachComponent(components, function(component) { %}\n {% if (displayValue(component)) { %}\n <div class=\"col-sm-4\">\n {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\n </div>\n {% } %}\n {% }) %}\n {% if (!instance.options.readOnly && !instance.disabled) { %}\n <div class=\"col-sm-4\">\n <div class=\"btn-group pull-right\">\n <button class=\"btn btn-default btn-light btn-sm editRow\"><i class=\"{{ iconClass('edit') }}\"></i></button>\n {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\n <button class=\"btn btn-danger btn-sm removeRow\"><i class=\"{{ iconClass('trash') }}\"></i></button>\n {% } %}\n </div>\n </div>\n {% } %}\n </div>"},"addAnother":"Add Action","rowDrafts":false,"key":"actions","type":"editgrid","displayAsTable":false,"input":true,"components":[{"label":"Title","tooltip":"Action title that will be shown in the Control Panel.","applyMaskOn":"change","tableView":true,"validate":{"required":true},"key":"title","type":"textfield","input":true},{"label":"Type","widget":"choicesjs","tableView":true,"data":{"values":[{"label":"Export CSV","value":"csv"},{"label":"Download PDF","value":"pdf"},{"label":"Custom","value":"custom"}]},"validate":{"required":true},"key":"type","type":"select","input":true},{"label":"Apply action for:","optionsLabelPosition":"right","inline":true,"tableView":false,"defaultValue":"availableColumns","values":[{"label":"All Available Columns","value":"availableColumns","shortcut":""},{"label":"Visible Columns","value":"visibleColumns","shortcut":""}],"validate":{"required":true},"key":"applyFor","customConditional":"show = _.includes(['csv', 'pdf'], row.type);","type":"radio","input":true},{"label":"Custom JS Code","placeholder":"promise = Promise.resolve(true);","tooltip":"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.","applyMaskOn":"change","editor":"ace","autoExpand":false,"tableView":false,"validate":{"required":true},"key":"customCode","conditional":{"conjunction":"all"},"customConditional":"show = row.type === 'custom';","type":"textarea","input":true},{"label":"HTML","attrs":[{"attr":"","value":""}],"content":"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\n","refreshOnChange":false,"key":"html","customConditional":"show = row.type === 'custom';","type":"htmlelement","input":false,"tableView":false}]}]}],"access":[{"type":"read_all","roles":["administrator","authenticated","anonymous"]}],"submissionAccess":[{"type":"read_all","roles":["administrator","authenticated","anonymous"]}],"properties":{"version":5},"controller":"instance.submissionReady.then((subm) => {\n instance.emit('formsSet');\n});\n","submissionRevisions":""}},"actions":{"reportingui:save":{"title":"Save Submission","name":"save","form":"reportingui","priority":10,"method":["create","update"],"handler":["before"]}}}
|
package/lib/Report.d.ts
DELETED
package/lib/ReportForm.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
declare const ReportingControls_base: any;
|
|
2
|
-
export default class ReportingControls extends ReportingControls_base {
|
|
3
|
-
static schema(...extend: any[]): any;
|
|
4
|
-
static get builderInfo(): {};
|
|
5
|
-
constructor(component: any, options: any, data: any);
|
|
6
|
-
get controlsEvents(): {
|
|
7
|
-
applyColumns: string;
|
|
8
|
-
filter: string;
|
|
9
|
-
clearFilters: string;
|
|
10
|
-
performAction: string;
|
|
11
|
-
};
|
|
12
|
-
get singleFilterOperators(): any;
|
|
13
|
-
get reportingConfig(): any;
|
|
14
|
-
get reportingForms(): any;
|
|
15
|
-
get reportingId(): any;
|
|
16
|
-
get formioGrid(): any;
|
|
17
|
-
get controlsSaveKey(): string;
|
|
18
|
-
attach(element: any): any;
|
|
19
|
-
getFilterComponents(): any;
|
|
20
|
-
getFilterValueCompFromGridComp(gridComp: any, filter: any, ind: any): any;
|
|
21
|
-
toggleFilterClass(filterInstance: any): void;
|
|
22
|
-
getTabs(): any[];
|
|
23
|
-
formatFilterValue(filterSettings: any, value: any): any;
|
|
24
|
-
getActionComponents(applyActionFor: any): any;
|
|
25
|
-
setGridFilters(filters?: {}): void;
|
|
26
|
-
getGridFilters(): any;
|
|
27
|
-
downloadPDF(action: any): Promise<void>;
|
|
28
|
-
exportCSV(action: any): void;
|
|
29
|
-
onApplyColumns(): void;
|
|
30
|
-
performCustomAction(action: any): any;
|
|
31
|
-
executeAction(action: any): void;
|
|
32
|
-
onApplyFilters(): void;
|
|
33
|
-
get preview(): any;
|
|
34
|
-
init(): any;
|
|
35
|
-
}
|
|
36
|
-
export {};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import ReportingUrlFetchProvider from '../../providers/ReportingUrlFetchProvider';
|
|
2
|
-
declare const ReportingGrid_base: any;
|
|
3
|
-
export default class ReportingGrid extends ReportingGrid_base {
|
|
4
|
-
static schema(...extend: any[]): any;
|
|
5
|
-
static get builderInfo(): {};
|
|
6
|
-
FormioCore: any;
|
|
7
|
-
formioGrid: any;
|
|
8
|
-
columns: {};
|
|
9
|
-
initComponents: any[];
|
|
10
|
-
dataTableReady: any;
|
|
11
|
-
constructor(...args: any[]);
|
|
12
|
-
get dataReady(): any;
|
|
13
|
-
get reportingConfig(): any;
|
|
14
|
-
get reportingForms(): any;
|
|
15
|
-
get reportingId(): any;
|
|
16
|
-
get visibility(): any;
|
|
17
|
-
get fetchProvider(): ReportingUrlFetchProvider;
|
|
18
|
-
get iteratableRows(): any[];
|
|
19
|
-
addReportingColumnProperties(comp: any, columnSettings: any): void;
|
|
20
|
-
getCalculatedColumnSchema(columnSettings: any): any;
|
|
21
|
-
formatGridComponent(comp: any, columnSettings: any): any;
|
|
22
|
-
isDefaultColumn(columnReportingSettings: any): any;
|
|
23
|
-
addColumnsFromReportingForms(allColumns: any, fieldsGroupedByForm: any): void;
|
|
24
|
-
addCalculatedColumns(allColumns: any, allCalculatedColumns?: any[], requiredCalculatedColumnsPaths?: any): void;
|
|
25
|
-
init(): any;
|
|
26
|
-
render(): any;
|
|
27
|
-
attach(element: any): any;
|
|
28
|
-
loadFormioGrid(): any;
|
|
29
|
-
attachComponent({ key, element, value, onChange, rowIndex, row, index, readOnly }: {
|
|
30
|
-
key: any;
|
|
31
|
-
element: any;
|
|
32
|
-
value: any;
|
|
33
|
-
onChange: any;
|
|
34
|
-
rowIndex: any;
|
|
35
|
-
row: any;
|
|
36
|
-
index: any;
|
|
37
|
-
readOnly: any;
|
|
38
|
-
}): {
|
|
39
|
-
component: any;
|
|
40
|
-
resetValue: () => void;
|
|
41
|
-
};
|
|
42
|
-
customFilters(component: any): any;
|
|
43
|
-
getGridColumns(): any;
|
|
44
|
-
get preview(): any;
|
|
45
|
-
initFormioGrid(FormioGrid: any): Promise<any>;
|
|
46
|
-
transformFetchedData(responseData: any): any;
|
|
47
|
-
createRowComponents(row: any, rowIndex: any): any;
|
|
48
|
-
createComponent(component: any, options: any, data: any, before?: any, fromAttach?: any): any;
|
|
49
|
-
format(key: string, data: any): any;
|
|
50
|
-
setValue(value: any): void;
|
|
51
|
-
destroy(): void;
|
|
52
|
-
}
|
|
53
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import reportinggrid from './ReportingGrid/ReportingGrid';
|
|
2
|
-
import reportingcontrols from './ReportingControls/ReportingControls';
|
|
3
|
-
declare const _default: {
|
|
4
|
-
reportingcontrols: typeof reportingcontrols;
|
|
5
|
-
reportinggrid: typeof reportinggrid;
|
|
6
|
-
};
|
|
7
|
-
export default _default;
|
package/lib/index.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import * as ReportingConfigUtils from './utils/configurationFormUtils';
|
|
2
|
-
declare const _default: {
|
|
3
|
-
components: {
|
|
4
|
-
reportingcontrols: typeof import("./components/ReportingControls/ReportingControls").default;
|
|
5
|
-
reportinggrid: typeof import("./components/ReportingGrid/ReportingGrid").default;
|
|
6
|
-
};
|
|
7
|
-
utils: typeof ReportingConfigUtils;
|
|
8
|
-
templates: {
|
|
9
|
-
bootstrap: {
|
|
10
|
-
reportingGrid: {
|
|
11
|
-
form: string;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
bootstrap3: {
|
|
15
|
-
reportingGrid: {
|
|
16
|
-
form: string;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
semantic: {};
|
|
20
|
-
};
|
|
21
|
-
library: string;
|
|
22
|
-
};
|
|
23
|
-
export default _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function checkLicense(projectEndpoint?: string): Promise<boolean>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function checkLicense(projectEndpoint?: string): Promise<boolean>;
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
export default class ReportingUrlFetchProvider {
|
|
2
|
-
options: {
|
|
3
|
-
[key: string]: any;
|
|
4
|
-
reportingConfig: any;
|
|
5
|
-
formio: any;
|
|
6
|
-
};
|
|
7
|
-
defaultFilters: any;
|
|
8
|
-
constructor(options: any);
|
|
9
|
-
get reportingUrl(): string;
|
|
10
|
-
get requestHeaders(): {
|
|
11
|
-
key: string;
|
|
12
|
-
value: string;
|
|
13
|
-
}[];
|
|
14
|
-
get requestMethod(): string;
|
|
15
|
-
getRequestHeaders(): any;
|
|
16
|
-
getAggregatedRequestFilterQuery(filterName: any, filterSettings: any): {
|
|
17
|
-
[x: number]: {
|
|
18
|
-
$eq: any;
|
|
19
|
-
};
|
|
20
|
-
$or?: undefined;
|
|
21
|
-
$and?: undefined;
|
|
22
|
-
} | {
|
|
23
|
-
[x: number]: {
|
|
24
|
-
$ne: any;
|
|
25
|
-
};
|
|
26
|
-
$or?: undefined;
|
|
27
|
-
$and?: undefined;
|
|
28
|
-
} | {
|
|
29
|
-
[x: number]: {
|
|
30
|
-
$regex: any;
|
|
31
|
-
$options: string;
|
|
32
|
-
};
|
|
33
|
-
$or?: undefined;
|
|
34
|
-
$and?: undefined;
|
|
35
|
-
} | {
|
|
36
|
-
[x: number]: {
|
|
37
|
-
$gt: any;
|
|
38
|
-
};
|
|
39
|
-
$or?: undefined;
|
|
40
|
-
$and?: undefined;
|
|
41
|
-
} | {
|
|
42
|
-
[x: number]: {
|
|
43
|
-
$gte: any;
|
|
44
|
-
};
|
|
45
|
-
$or?: undefined;
|
|
46
|
-
$and?: undefined;
|
|
47
|
-
} | {
|
|
48
|
-
[x: number]: {
|
|
49
|
-
$lt: any;
|
|
50
|
-
};
|
|
51
|
-
$or?: undefined;
|
|
52
|
-
$and?: undefined;
|
|
53
|
-
} | {
|
|
54
|
-
[x: number]: {
|
|
55
|
-
$lte: any;
|
|
56
|
-
};
|
|
57
|
-
$or?: undefined;
|
|
58
|
-
$and?: undefined;
|
|
59
|
-
} | {
|
|
60
|
-
[x: number]: {
|
|
61
|
-
$exists: boolean;
|
|
62
|
-
};
|
|
63
|
-
$or?: undefined;
|
|
64
|
-
$and?: undefined;
|
|
65
|
-
} | {
|
|
66
|
-
$or: {
|
|
67
|
-
[x: number]: {
|
|
68
|
-
$eq: any;
|
|
69
|
-
};
|
|
70
|
-
}[];
|
|
71
|
-
$and?: undefined;
|
|
72
|
-
} | {
|
|
73
|
-
$and: {
|
|
74
|
-
[x: number]: {
|
|
75
|
-
$ne: any;
|
|
76
|
-
};
|
|
77
|
-
}[];
|
|
78
|
-
$or?: undefined;
|
|
79
|
-
};
|
|
80
|
-
getAggregatedRequestBody(params?: any): any[];
|
|
81
|
-
makeRequest(params?: any): Promise<any>;
|
|
82
|
-
getData(params?: any): Promise<any>;
|
|
83
|
-
}
|
package/lib/providers/index.d.ts
DELETED
package/lib/templates/index.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
interface IAggregationOperator {
|
|
2
|
-
getRequest(object: any): object;
|
|
3
|
-
getGroupRequest(object: any, groupIds: any): object;
|
|
4
|
-
transformServerValue(response: any, settings: any): any;
|
|
5
|
-
getGroupProjectRequest(settings: any): object;
|
|
6
|
-
}
|
|
7
|
-
export default class AggregationOperator implements IAggregationOperator {
|
|
8
|
-
static get operatorKey(): string;
|
|
9
|
-
static getDisplayField(settings: any, reportingConfig?: any): {
|
|
10
|
-
type: string;
|
|
11
|
-
};
|
|
12
|
-
static get acceptedValueTypes(): any[];
|
|
13
|
-
static get operatorTitle(): string;
|
|
14
|
-
static get aggregatedGroupOperator(): boolean;
|
|
15
|
-
static get aggregatedCalculationOperator(): boolean;
|
|
16
|
-
static get calculationArgs(): any[];
|
|
17
|
-
static get transformResponse(): boolean;
|
|
18
|
-
getRequest(settings: any): any;
|
|
19
|
-
getGroupRequest(settings: any, groupIds: any): any;
|
|
20
|
-
getGroupProjectRequest(settings: any): any;
|
|
21
|
-
transformServerValue(response: any, settings: any): any;
|
|
22
|
-
}
|
|
23
|
-
export {};
|