@deviceinsight/ng-ui-scale-lib 10.2.2 → 10.3.0

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.
Files changed (46) hide show
  1. package/dist/{AccessEditModal-kndFZDt-.js → AccessEditModal-EVgqtRQn.js} +17 -17
  2. package/dist/{AccessEditModal-kndFZDt-.js.map → AccessEditModal-EVgqtRQn.js.map} +1 -1
  3. package/dist/{BundleManagementContainer-vMlhg6fJ.js → BundleManagementContainer-48Mfx5AV.js} +4 -4
  4. package/dist/{BundleManagementContainer-vMlhg6fJ.js.map → BundleManagementContainer-48Mfx5AV.js.map} +1 -1
  5. package/dist/{BundlesContainer-CaC__bAh.js → BundlesContainer-nZS9tMML.js} +40 -40
  6. package/dist/{BundlesContainer-CaC__bAh.js.map → BundlesContainer-nZS9tMML.js.map} +1 -1
  7. package/dist/{DatapointImport-Cq8cifAI.js → DatapointImport-DGgPh1uk.js} +10 -10
  8. package/dist/DatapointImport-DGgPh1uk.js.map +1 -0
  9. package/dist/{FileUploadInput-DSyHVZUT.js → FileUploadInput-COocUgkB.js} +2 -2
  10. package/dist/{FileUploadInput-DSyHVZUT.js.map → FileUploadInput-COocUgkB.js.map} +1 -1
  11. package/dist/{Files-CJ7EHXzr.js → Files-DfQGLE39.js} +3 -3
  12. package/dist/{Files-CJ7EHXzr.js.map → Files-DfQGLE39.js.map} +1 -1
  13. package/dist/{GlobalPowerBiReports-PsiWcApU.js → GlobalPowerBiReports-B1nYGKvp.js} +2 -2
  14. package/dist/{GlobalPowerBiReports-PsiWcApU.js.map → GlobalPowerBiReports-B1nYGKvp.js.map} +1 -1
  15. package/dist/{JsonSettingWidget-CpZmTuBe.js → JsonSettingWidget-CGANHs8P.js} +9 -9
  16. package/dist/JsonSettingWidget-CGANHs8P.js.map +1 -0
  17. package/dist/{LicensesEditPage-CwGor2gV.js → LicensesEditPage-D1I6dogi.js} +11 -11
  18. package/dist/{LicensesEditPage-CwGor2gV.js.map → LicensesEditPage-D1I6dogi.js.map} +1 -1
  19. package/dist/{LicensesList-DWQlVNdR.js → LicensesList-CYyuylk_.js} +2 -2
  20. package/dist/{LicensesList-DWQlVNdR.js.map → LicensesList-CYyuylk_.js.map} +1 -1
  21. package/dist/{PropertiesEditPage-C4jjCoPp.js → PropertiesEditPage-BOlFs_u9.js} +29 -29
  22. package/dist/{PropertiesEditPage-C4jjCoPp.js.map → PropertiesEditPage-BOlFs_u9.js.map} +1 -1
  23. package/dist/{PropertiesList-CBLvLopM.js → PropertiesList-DCPkWqaf.js} +5 -5
  24. package/dist/{PropertiesList-CBLvLopM.js.map → PropertiesList-DCPkWqaf.js.map} +1 -1
  25. package/dist/{TemplateEditPage-d-3_n4YW.js → TemplateEditPage-BeV5ZSVV.js} +25 -25
  26. package/dist/{TemplateEditPage-d-3_n4YW.js.map → TemplateEditPage-BeV5ZSVV.js.map} +1 -1
  27. package/dist/{TemplateTextInput-CQ6XJiql.js → TemplateTextInput-EDyDopjf.js} +2 -2
  28. package/dist/{TemplateTextInput-CQ6XJiql.js.map → TemplateTextInput-EDyDopjf.js.map} +1 -1
  29. package/dist/{TemplatesListPage-roTvuqft.js → TemplatesListPage-BVAiLKAE.js} +13 -13
  30. package/dist/{TemplatesListPage-roTvuqft.js.map → TemplatesListPage-BVAiLKAE.js.map} +1 -1
  31. package/dist/{UserGroupAssignments-DTXRBp_V.js → UserGroupAssignments-C7c3INUy.js} +10 -10
  32. package/dist/{UserGroupAssignments-DTXRBp_V.js.map → UserGroupAssignments-C7c3INUy.js.map} +1 -1
  33. package/dist/{UserGroupTheme-CAHBWb9Q.js → UserGroupTheme-CFaudF3q.js} +5 -5
  34. package/dist/{UserGroupTheme-CAHBWb9Q.js.map → UserGroupTheme-CFaudF3q.js.map} +1 -1
  35. package/dist/api.js +23 -23
  36. package/dist/index.js +567 -562
  37. package/dist/index.js.map +1 -1
  38. package/dist/{setTitle-CjnK8p-J.js → setTitle-Cyf8DxtL.js} +4569 -4565
  39. package/dist/setTitle-Cyf8DxtL.js.map +1 -0
  40. package/package.json +11 -10
  41. package/dist/DatapointImport-Cq8cifAI.js.map +0 -1
  42. package/dist/JsonSettingWidget-CpZmTuBe.js.map +0 -1
  43. package/dist/api.d.ts +0 -1192
  44. package/dist/index.d.ts +0 -7
  45. package/dist/setTitle-CjnK8p-J.js.map +0 -1
  46. package/dist/setupRuntimeEnv.js +0 -27
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deviceinsight/ng-ui-scale-lib",
3
- "version": "10.2.2",
3
+ "version": "10.3.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -11,9 +11,6 @@
11
11
  "type": "module",
12
12
  "types": "./dist/index.d.ts",
13
13
  "main": "./dist/index.js",
14
- "engines": {
15
- "node": ">=22.0.0"
16
- },
17
14
  "exports": {
18
15
  ".": {
19
16
  "types": "./dist/index.d.ts",
@@ -38,7 +35,7 @@
38
35
  "@deviceinsight/ng-ui-basic-components": "^7.7.0",
39
36
  "@deviceinsight/ng-ui-components": "^7.5.0",
40
37
  "axios": "^1.15.0",
41
- "i18next": "^25.6.0",
38
+ "i18next": "^25.10.10",
42
39
  "react": "^19.2.5",
43
40
  "react-dom": "^19.2.5",
44
41
  "react-i18next": "^16.6.6",
@@ -62,7 +59,7 @@
62
59
  "color": "^5.0.3",
63
60
  "css": "^3.0.0",
64
61
  "dayjs": "^1.11.19",
65
- "dompurify": "^3.4.0",
62
+ "dompurify": "^3.4.1",
66
63
  "emittery": "^1.2.0",
67
64
  "eventemitter3": "^5.0.1",
68
65
  "file-saver": "^2.0.5",
@@ -111,13 +108,13 @@
111
108
  "@types/google.maps": "3.53.6",
112
109
  "@types/js-cookie": "3.0.6",
113
110
  "@types/keyboardjs": "2.5.3",
114
- "@types/lodash": "4.17.23",
111
+ "@types/lodash": "4.17.24",
115
112
  "@types/lucene": "2.1.7",
116
113
  "@types/mark.js": "8.11.12",
117
114
  "@types/papaparse": "5.5.0",
118
115
  "@types/qs": "6.14.0",
119
- "@types/react": "^19.2.2",
120
- "@types/react-dom": "^19.2.2",
116
+ "@types/react": "19.2.7",
117
+ "@types/react-dom": "19.2.3",
121
118
  "@types/react-grid-layout": "1.3.5",
122
119
  "@types/react-helmet": "6.1.6",
123
120
  "@types/react-loadable": "5.5.5",
@@ -134,9 +131,13 @@
134
131
  "tsup": "^7.2.0",
135
132
  "typescript": "^5.8.2",
136
133
  "utility-types": "3.11.0",
137
- "vite": "7.2.4",
134
+ "vite": "7.3.2",
138
135
  "vite-plugin-environment": "1.1.3",
139
136
  "vite-tsconfig-paths": "5.1.4",
140
137
  "zx": "^8.8.5"
138
+ },
139
+ "engines": {
140
+ "node": "^24.13.1",
141
+ "npm": "^11.8.0"
141
142
  }
142
143
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatapointImport-Cq8cifAI.js","sources":["../ng-ui-scale/src/components/datapoints/import/addMissingUnits.ts","../ng-ui-scale/src/components/datapoints/import/CsvUploadInfo.tsx","../ng-ui-scale/src/components/datapoints/import/DatapointImportStatus.tsx","../ng-ui-scale/src/components/datapoints/import/reactableHelpers.tsx","../ng-ui-scale/src/components/datapoints/import/DatapointImportResults.tsx","../ng-ui-scale/src/components/datapoints/import/datapointImportTemplate.ts","../ng-ui-scale/src/components/datapoints/import/parseCsv.ts","../ng-ui-scale/src/components/datapoints/import/DatapointImportContextProvider.tsx","../ng-ui-scale/src/components/datapoints/import/DatapointImport.tsx"],"sourcesContent":["import {fetchUnits, type Unit} from '@deviceinsight/ng-ui-api-client';\n\nimport {nonNull} from 'utils/tsUtils';\nimport type {DataRow} from './types';\n\nconst isUnique = (value: Unit | null | undefined, index: number, self: Array<Unit | null | undefined>) => {\n\treturn self.findIndex(v => v?.name === value?.name) === index;\n};\n\nexport const addMissingUnits = async (\n\texistingUnits: Array<Unit>,\n\tdataRows: Array<DataRow>,\n\taddUnit: (unit: Unit) => Promise<any>,\n): Promise<Unit[]> => {\n\tconst uniqueUnits = dataRows\n\t\t.filter(dr => !dr.error)\n\t\t.map(dr => dr.data.unit)\n\t\t.filter(unit => unit && !existingUnits.some(eu => eu.name === unit.name))\n\t\t.filter(isUnique)\n\t\t.filter(nonNull);\n\n\tconst missingUnits = uniqueUnits.map(addUnit);\n\tawait Promise.all(missingUnits);\n\treturn await fetchUnits();\n};\n","import {Trans} from 'i18n';\n\nconst bulletedListStyle = {\n\tmarginLeft: 15,\n\tlistStyle: 'disc',\n};\n\nconst CsvUploadInfo = () => {\n\treturn (\n\t\t<ul style={{...bulletedListStyle, width: 345}}>\n\t\t\t<li>\n\t\t\t\t<Trans i18nKey=\"datapointImport.infoColumns\">Columns:</Trans>\n\n\t\t\t\t<ul style={{...bulletedListStyle, listStyle: 'circle'}}>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointNameColumn\">Datapoint Name (required)</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twhiteSpace: 'normal',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointDatatypeColumn\">\n\t\t\t\t\t\t\tDatapoint Type (required). Datatypes: &apos;BOOLEAN&apos;, &apos;DOUBLE&apos;,\n\t\t\t\t\t\t\t&apos;LONG&apos;, &apos;TEXT&apos;, &apos;GEO_POSITION&apos;\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointUnitPrintColumn\">\n\t\t\t\t\t\t\tDisplay name of unit (optional)\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointUnitPrintColumn\">Identifier of unit (optional)</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointUpperThresholdColumn\">\n\t\t\t\t\t\t\tDatapoint upper threshold (optional)\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.datapointLowerThresholdColumn\">\n\t\t\t\t\t\t\tDatapoint lower threshold (optional)\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<Trans i18nKey=\"datapointImport.infoDelimiter\">Csv should use &quot;,&quot; as delimiter</Trans>\n\t\t\t</li>\n\t\t</ul>\n\t);\n};\n\nexport default CsvUploadInfo;\n","import {Spinner} from '@deviceinsight/ng-ui-basic-components';\n\nimport type {UploadState} from './types';\nimport './DatapointImport.scss';\n\ntype Props = {\n\tuploadState: UploadState;\n};\n\nexport default function DatapointImportStatus(props: Props) {\n\tconst status = props.uploadState || 'UPLOAD_PENDING';\n\treturn (\n\t\t<span className={`di upload-status ${status.toLowerCase()}`}>\n\t\t\t{status === 'UPLOAD_PENDING' && <Spinner size={16} />}\n\t\t</span>\n\t);\n}\n","import type {DataType, PaginationSettings, Sort} from '@deviceinsight/ng-ui-api-client';\nimport type {ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport type {DataRow} from './types';\n\nexport const INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 10,\n\tsort: {\n\t\tproperty: 'index',\n\t\tdirection: 'ASC',\n\t},\n};\n\nexport const customSortFunction = (\n\titems: Array<DataRow>,\n\tsort: Sort,\n\tdefaultSortItems: (items: Array<DataRow>, sort: Sort) => Array<DataRow>,\n): Array<DataRow> => {\n\tconst reverseFactor = sort.direction === 'ASC' ? 1 : -1;\n\n\tif (sort.property === 'index') {\n\t\treturn items.sort((dr1: DataRow, dr2: DataRow) => reverseFactor * (dr1.idx - dr2.idx));\n\t}\n\n\treturn defaultSortItems(items, sort);\n};\nexport const COLUMN_DEFS: Array<ReactableColumnDef<DataRow>> = [\n\t{\n\t\tname: 'index',\n\t\tlabel: '',\n\t\trender: (item: DataRow): number => item.idx,\n\t},\n\t{\n\t\tname: 'name',\n\t\tlabel: '',\n\t\trender: (item: DataRow) => (\n\t\t\t<div className=\"import-datapoint-name-cell-wrapper\">\n\t\t\t\t<div className=\"name-wrapper\" title={item.data ? item.data.name : ''}>\n\t\t\t\t\t{item.data ? item.data.name : ''}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t),\n\t},\n\t{\n\t\tname: 'datatype',\n\t\tlabel: '',\n\t\trender: (item: DataRow): DataType | string => (item.data ? item.data.datatype : ''),\n\t},\n\t{\n\t\tname: 'unit',\n\t\tlabel: '',\n\t\trender: (item: DataRow): string => (item.data && item.data.unit ? item.data.unit.print : ''),\n\t},\n\t{\n\t\tname: 'threshold1',\n\t\tlabel: '',\n\t\trender: (item: DataRow): string =>\n\t\t\titem.data && item.data.thresholds?.threshold1 ? item.data.thresholds?.threshold1.toString() : '',\n\t},\n\t{\n\t\tname: 'threshold2',\n\t\tlabel: '',\n\t\trender: (item: DataRow): string =>\n\t\t\titem.data && item.data.thresholds?.threshold2 ? item.data.thresholds?.threshold2.toString() : '',\n\t},\n\t{\n\t\tname: 'error',\n\t\tlabel: '',\n\t\trender: (item: DataRow): string => item.error || '',\n\t},\n];\n","import {PureComponent} from 'react';\n\nimport type {Datapoint} from '@deviceinsight/ng-ui-api-client';\nimport {\n\ttype PaginationSettings,\n\ttype ReactableColumnDef,\n\tReactableWithClientSidePagination,\n} from '@deviceinsight/ng-ui-components';\n\nimport DatapointImportStatus from './DatapointImportStatus';\nimport {COLUMN_DEFS, customSortFunction, INITIAL_PAGINATION_SETTINGS} from './reactableHelpers';\nimport type {DataRow, RowUploadStates, UploadState} from './types';\n\ntype OwnProps = {\n\tdata: Array<DataRow>;\n\tpageSize: number;\n\tonPageSizeChange: (size: number) => void;\n\tisLoading: boolean;\n\tonRowComplete: (rowUploadStates: RowUploadStates) => void;\n\tcreateDatapoint: (datapoint: Datapoint) => Promise<Datapoint>;\n};\n\ntype Props = OwnProps;\n\ntype State = {\n\trowUploadStates: RowUploadStates;\n\tpaginationSettings: PaginationSettings;\n};\n\nexport default class DatapointImportResults extends PureComponent<Props, State> {\n\tstate: State;\n\t_isMounted = false;\n\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\trowUploadStates: {},\n\t\t\tpaginationSettings: {...INITIAL_PAGINATION_SETTINGS, size: props.pageSize},\n\t\t};\n\t}\n\tcomponentDidMount() {\n\t\tthis._isMounted = true;\n\t}\n\n\tcomponentDidUpdate(prevProps: Props) {\n\t\tconst {data} = this.props;\n\n\t\tif (!prevProps.data.length && data.length) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\trowUploadStates: {},\n\t\t\t\t},\n\t\t\t\t() => this.createDatapoint(0),\n\t\t\t);\n\t\t}\n\t\tif (prevProps.pageSize !== this.props.pageSize) {\n\t\t\tthis.setState(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tpaginationSettings: {...prev.paginationSettings, size: this.props.pageSize},\n\t\t\t}));\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis._isMounted = false;\n\t}\n\n\tcreateDatapoint(idx: number): void | NodeJS.Timeout {\n\t\tconst {data, onRowComplete} = this.props;\n\t\tconst {rowUploadStates} = this.state;\n\t\tonRowComplete(rowUploadStates);\n\n\t\tif (idx >= data.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!data[idx]) {\n\t\t\treturn this.createDatapoint(idx + 1);\n\t\t}\n\n\t\tconst {\n\t\t\tdata: {name, datatype, unit, thresholds},\n\t\t\terror,\n\t\t} = data[idx];\n\n\t\tif (error) {\n\t\t\treturn setTimeout(() => this.updateUploadStateAndContinue(idx, 'CANNOT_UPLOAD'), 0);\n\t\t}\n\n\t\tconst datapointData: Datapoint = {\n\t\t\tname,\n\t\t\tdatatype,\n\t\t\tthresholds,\n\t\t\tdatapointType: 'RAW',\n\t\t};\n\n\t\tif (unit?.name) {\n\t\t\tdatapointData.unit = unit || undefined;\n\t\t}\n\n\t\tif (thresholds?.threshold1 || thresholds?.threshold2) {\n\t\t\tdatapointData.thresholds = thresholds;\n\t\t}\n\n\t\tthis.props\n\t\t\t.createDatapoint(datapointData)\n\t\t\t.then(() => this.updateUploadStateAndContinue(idx, 'UPLOAD_SUCCESSFUL'))\n\t\t\t.catch(() => this.updateUploadStateAndContinue(idx, 'UPLOAD_FAILED'));\n\t}\n\n\tupdateUploadStateAndContinue(idx: number, status: UploadState) {\n\t\tconst {rowUploadStates} = this.state;\n\n\t\tif (!this._isMounted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\trowUploadStates: {...(rowUploadStates as RowUploadStates), [idx]: status},\n\t\t\t},\n\t\t\t() => this.createDatapoint(idx + 1),\n\t\t);\n\t}\n\n\tgetColumnDefs(): Array<ReactableColumnDef<DataRow>> {\n\t\tconst {rowUploadStates} = this.state;\n\t\treturn [\n\t\t\t...COLUMN_DEFS,\n\t\t\t{\n\t\t\t\tname: 'result',\n\t\t\t\tlabel: '',\n\t\t\t\trender: (item: DataRow) => {\n\t\t\t\t\treturn <DatapointImportStatus uploadState={rowUploadStates[item.idx]} />;\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\n\trender() {\n\t\tconst {data, isLoading} = this.props;\n\t\treturn (\n\t\t\t<ReactableWithClientSidePagination\n\t\t\t\tcolumnDefs={this.getColumnDefs()}\n\t\t\t\tuniqueItemKey={row => `${row.idx}`}\n\t\t\t\tcustomSortFunction={customSortFunction}\n\t\t\t\tpaginationSettings={this.state.paginationSettings}\n\t\t\t\titems={data}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\tonChangeSize={this.props.onPageSizeChange}\n\t\t\t\ttableName={'datapointImportResults'}\n\t\t\t/>\n\t\t);\n\t}\n}\n","export default [\n\t'DATAPOINT_NAME,DATAPOINT_TYPE,UNIT_DISPLAY_NAME,UNIT_IDENTIFIER,DATAPOINT_UPPER_THRESHOLD,DATAPOINT_LOWER_THRESHOLD',\n\t'new_datapoint_1,LONG,°C,degrees-celsius,20,7',\n\t'new_datapoint_2,LONG,,,,',\n];\n","import * as Papa from 'papaparse';\n\nimport type {Thresholds} from '@deviceinsight/ng-ui-api-client';\n\nimport {DATAPOINT_DATATYPES} from '../constants';\nimport type {DataRow} from './types';\n\nconst MAX_ALLOWED_ERRORS = 20;\n\nconst parseCsvRows = (result: Array<Array<any>>): Array<DataRow> => {\n\tconst parsedResult: DataRow[] = [];\n\tlet numErrors = 0;\n\tconst resultCopy = [...result];\n\tif (result[0][0] === 'DATAPOINT_NAME') {\n\t\tresultCopy.shift();\n\t}\n\n\tresultCopy.forEach((r, idx) => {\n\t\tif (numErrors > MAX_ALLOWED_ERRORS) throw new Error('INVALID_DOCUMENT');\n\t\tconst [name, datatype, unitPrint, unitName, threshold1, threshold2] = r;\n\t\tconst thresholds: Thresholds = {};\n\t\tif (threshold1 && !isNaN(parseInt(threshold1))) {\n\t\t\tthresholds.threshold1 = parseInt(threshold1);\n\t\t}\n\t\tif (threshold2 && !isNaN(parseInt(threshold2))) {\n\t\t\tthresholds.threshold2 = parseInt(threshold2);\n\t\t}\n\t\tconst row: DataRow = {\n\t\t\tidx,\n\t\t\tdata: {\n\t\t\t\tname,\n\t\t\t\tdatatype: datatype ? datatype.toUpperCase() : datatype,\n\t\t\t\tunit: unitName\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tname: unitName,\n\t\t\t\t\t\t\tprint: unitPrint,\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t\tthresholds,\n\t\t\t},\n\t\t};\n\t\tparsedResult.push(row);\n\n\t\tif (r.length < 2) {\n\t\t\tnumErrors++;\n\t\t\treturn (row.error = 'INVALID_NUMBER_OF_CELLS');\n\t\t}\n\n\t\tif (!DATAPOINT_DATATYPES.includes(datatype)) {\n\t\t\tnumErrors++;\n\t\t\treturn (row.error = 'INVALID_DATATYPE');\n\t\t}\n\t});\n\treturn parsedResult;\n};\n\nexport const parseCsv = (file: File): Promise<Array<DataRow>> => {\n\treturn new Promise((resolve, reject) => {\n\t\tPapa.parse<Array<any>>(file, {\n\t\t\tskipEmptyLines: true,\n\t\t\tcomplete: ({data}) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsedData = parseCsvRows(data);\n\t\t\t\t\tresolve(parsedData);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: error => {\n\t\t\t\treject(error);\n\t\t\t},\n\t\t});\n\t});\n};\n","import {createContext, type PropsWithChildren, useEffect, useState} from 'react';\n\nimport {readAccountObject, writeAccountObject} from '@deviceinsight/ng-ui-api-client';\n\nimport makeCancelable from 'utils/makeCancelable';\n\nexport const DatapointImportContext = createContext<{pageSize: number; onPageSizeChange: (pageSize: number) => void}>({\n\tpageSize: 10,\n\tonPageSizeChange: () => {},\n});\n\nconst ACCOUNT_OBJECT_PATH = 'uiConfigurations/datapointimportpagination';\n\nexport function DatapointImportContextProvider({children}: PropsWithChildren) {\n\tconst [pageSize, setPageSize] = useState(10);\n\n\tconst handlePageSizeChange = (pageSize: number) => {\n\t\tsetPageSize(pageSize);\n\t\twriteAccountObject(ACCOUNT_OBJECT_PATH, {pageSize});\n\t};\n\n\tuseEffect(() => {\n\t\tconst {promise, cancel} = makeCancelable(readAccountObject(ACCOUNT_OBJECT_PATH));\n\t\tpromise\n\t\t\t.then(value => {\n\t\t\t\tsetPageSize(value?.pageSize ?? 10);\n\t\t\t})\n\t\t\t.catch(_error => {\n\t\t\t\t// no data available or canceled - do nothing\n\t\t\t});\n\n\t\treturn cancel;\n\t}, []);\n\n\treturn (\n\t\t<DatapointImportContext.Provider value={{pageSize, onPageSizeChange: handlePageSizeChange}}>\n\t\t\t{children}\n\t\t</DatapointImportContext.Provider>\n\t);\n}\n","import {saveAs} from 'file-saver';\nimport {useContext, useState} from 'react';\n\nimport type {Datapoint, Unit} from '@deviceinsight/ng-ui-api-client';\nimport {Bubble, Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport {FileUpload} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport {addMissingUnits} from './addMissingUnits';\nimport CsvUploadInfo from './CsvUploadInfo';\nimport DatapointImportResults from './DatapointImportResults';\nimport datapointImportTemplate from './datapointImportTemplate';\nimport {parseCsv} from './parseCsv';\nimport type {DataRow, RowUploadStates} from './types';\nimport './DatapointImport.scss';\n\nimport {DatapointImportContext, DatapointImportContextProvider} from './DatapointImportContextProvider';\n\n/***\n * Use LoadableDataImport to reduce initial bundle size\n */\ntype Props = {\n\texistingUnits: Array<Unit>;\n\tonChangeUploadStatus: (isOngoing: boolean, successfulUploads: number, totalUploads: number) => void;\n\tcreateDatapoint: (datapoint: Datapoint) => Promise<Datapoint>;\n\taddUnit: (unit: Unit) => Promise<any>;\n};\n\nexport default function DatapointImport(props: Props) {\n\treturn (\n\t\t<DatapointImportContextProvider>\n\t\t\t<DatapointImportImpl {...props} />\n\t\t</DatapointImportContextProvider>\n\t);\n}\n\nfunction DatapointImportImpl({existingUnits, onChangeUploadStatus, createDatapoint, addUnit}: Props) {\n\tconst [data, setData] = useState<DataRow[]>([]);\n\tconst [error, setError] = useState<Error | null | undefined>(null);\n\tconst {pageSize, onPageSizeChange} = useContext(DatapointImportContext);\n\tconst [isLoading, setIsLoading] = useState<boolean>(false);\n\n\tfunction handleRemoveFile() {\n\t\tsetData([]);\n\t\tsetError(null);\n\t}\n\n\tfunction handleSelectFile(file: File) {\n\t\tsetIsLoading(true);\n\t\tsetData([]);\n\t\tsetError(null);\n\t\tparseCsv(file)\n\t\t\t.then(async parsedData => {\n\t\t\t\tawait addMissingUnits(existingUnits, parsedData, addUnit);\n\t\t\t\tsetData(parsedData);\n\t\t\t\tonChangeUploadStatus(true, 0, 0);\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tsetError(error);\n\t\t\t})\n\t\t\t.finally(() => setIsLoading(false));\n\t}\n\n\tfunction handleImportComplete(rowUploadStates: RowUploadStates) {\n\t\tconst totalUploads = Object.values(rowUploadStates);\n\t\tconst successfulUploads = totalUploads.filter(status => status === 'UPLOAD_SUCCESSFUL');\n\t\tonChangeUploadStatus(totalUploads.length !== data.length, successfulUploads.length, data.length);\n\t}\n\n\tfunction handleDownloadTemplate() {\n\t\tconst downloadFileName = 'datapoint-import-template.csv';\n\t\tsaveAs(\n\t\t\tnew Blob([datapointImportTemplate.join('\\n')], {\n\t\t\t\ttype: 'text/csv',\n\t\t\t}),\n\t\t\tdownloadFileName,\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<FileUpload\n\t\t\t\tonRemoveFile={handleRemoveFile}\n\t\t\t\tonSelectFile={handleSelectFile}\n\t\t\t\tpreviewComponent={({file, onRemoveFile}) => (\n\t\t\t\t\t<strong className=\"di delete-file-button\">\n\t\t\t\t\t\t{file ? file.name : ''}\n\t\t\t\t\t\t<Button naked onClick={onRemoveFile} data-testid=\"delete-file-button\">\n\t\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</strong>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t{error && (\n\t\t\t\t<div className=\"di upload-error parsing-error\">\n\t\t\t\t\t<Trans i18nKey=\"datapointImport.tooManyParsingErrors\">Too many parsing errors</Trans>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!data.length && (\n\t\t\t\t<div className=\"di download-csv-section\">\n\t\t\t\t\t<Button onClick={handleDownloadTemplate}>\n\t\t\t\t\t\t<Trans i18nKey=\"datapointImport.downloadSample\">Download template csv file</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<label className=\"csv-upload-info\">\n\t\t\t\t\t\t<Bubble content={<CsvUploadInfo />}>\n\t\t\t\t\t\t\t<span className=\"upload-anchor\"> ?</span>\n\t\t\t\t\t\t</Bubble>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"datapoint-import-section\">\n\t\t\t\t<DatapointImportResults\n\t\t\t\t\tonRowComplete={handleImportComplete}\n\t\t\t\t\tdata={data}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tcreateDatapoint={createDatapoint}\n\t\t\t\t\tpageSize={pageSize}\n\t\t\t\t\tonPageSizeChange={onPageSizeChange}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],"names":["isUnique","value","index","self","v","addMissingUnits","existingUnits","dataRows","addUnit","missingUnits","dr","unit","eu","nonNull","fetchUnits","bulletedListStyle","CsvUploadInfo","jsxs","jsx","Trans","DatapointImportStatus","props","status","Spinner","INITIAL_PAGINATION_SETTINGS","customSortFunction","items","sort","defaultSortItems","reverseFactor","dr1","dr2","COLUMN_DEFS","item","DatapointImportResults","PureComponent","prevProps","data","prev","idx","onRowComplete","rowUploadStates","name","datatype","thresholds","error","datapointData","isLoading","ReactableWithClientSidePagination","row","datapointImportTemplate","MAX_ALLOWED_ERRORS","parseCsvRows","result","parsedResult","numErrors","resultCopy","r","unitPrint","unitName","threshold1","threshold2","DATAPOINT_DATATYPES","parseCsv","file","resolve","reject","Papa","parsedData","DatapointImportContext","createContext","ACCOUNT_OBJECT_PATH","DatapointImportContextProvider","children","pageSize","setPageSize","useState","handlePageSizeChange","writeAccountObject","useEffect","promise","cancel","makeCancelable","readAccountObject","_error","DatapointImport","DatapointImportImpl","onChangeUploadStatus","createDatapoint","setData","setError","onPageSizeChange","useContext","setIsLoading","handleRemoveFile","handleSelectFile","handleImportComplete","totalUploads","successfulUploads","handleDownloadTemplate","saveAs","Fragment","FileUpload","onRemoveFile","Button","Icon","Bubble"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonSettingWidget-CpZmTuBe.js","sources":["../ng-ui-scale/src/components/applicationSettings/widgets/JsonSettingWidget.tsx"],"sourcesContent":["import {javascript} from '@codemirror/lang-javascript';\nimport CodeMirror from '@uiw/react-codemirror';\nimport {useCallback, useEffect, useState} from 'react';\nimport {useController, useFormContext} from 'react-hook-form';\n\nimport FieldDecorator from 'components/inputs/FieldDecorator';\nimport {Trans} from 'i18n';\nimport type {SettingProps} from '../ApplicationSettings';\n\nexport default function JsonSettingWidget({setting, ...rest}: SettingProps) {\n\tconst {setValue, setError, clearErrors, control} = useFormContext();\n\tconst {\n\t\tfield,\n\t\tfieldState: {error},\n\t} = useController({name: setting.name, control});\n\tconst [stringValue, setStringValue] = useState<string>('');\n\tconst [initialized, setInitialized] = useState<boolean>(false);\n\n\tuseEffect(() => {\n\t\tif (!initialized && field.value) {\n\t\t\tconst value = JSON.stringify(field.value, null, 2);\n\t\t\tsetStringValue(value);\n\t\t\tsetInitialized(true);\n\t\t}\n\t}, [field.value, initialized]);\n\n\tconst handleChange = useCallback(\n\t\t(value: string) => {\n\t\t\ttry {\n\t\t\t\tsetStringValue(value);\n\t\t\t\tconst parsedValue = value === '' ? undefined : JSON.parse(value);\n\t\t\t\tsetValue(setting.name, parsedValue, {shouldValidate: true, shouldDirty: true});\n\t\t\t\tclearErrors(setting.name);\n\t\t\t} catch (_e) {\n\t\t\t\tsetError(setting.name, {message: 'Invalid JSON syntax'});\n\t\t\t}\n\t\t},\n\t\t[clearErrors, setError, setValue, setting.name],\n\t);\n\n\treturn (\n\t\t<FieldDecorator\n\t\t\tlabel={<Trans i18nKey={`appSettings.property.${setting.name}`}>{setting.name}</Trans>}\n\t\t\terror={error?.message ?? ''}\n\t\t\tsize=\"full-width\"\n\t\t>\n\t\t\t<CodeMirror\n\t\t\t\tdata-testid={rest['data-testid']}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tvalue={stringValue}\n\t\t\t\tbasicSetup={{lineNumbers: true}}\n\t\t\t\textensions={[javascript()]}\n\t\t\t/>\n\t\t</FieldDecorator>\n\t);\n}\n"],"names":["JsonSettingWidget","setting","rest","setValue","setError","clearErrors","control","useFormContext","field","error","useController","stringValue","setStringValue","useState","initialized","setInitialized","useEffect","value","handleChange","useCallback","parsedValue","jsx","FieldDecorator","Trans","CodeMirror","javascript"],"mappings":";;;;;;;AASA,SAAwBA,EAAkB,EAAC,SAAAC,GAAS,GAAGC,KAAqB;AAC3E,QAAM,EAAC,UAAAC,GAAU,UAAAC,GAAU,aAAAC,GAAa,SAAAC,EAAA,IAAWC,EAAA,GAC7C;AAAA,IACL,OAAAC;AAAA,IACA,YAAY,EAAC,OAAAC,EAAA;AAAA,EAAK,IACfC,EAAc,EAAC,MAAMT,EAAQ,MAAM,SAAAK,GAAQ,GACzC,CAACK,GAAaC,CAAc,IAAIC,EAAiB,EAAE,GACnD,CAACC,GAAaC,CAAc,IAAIF,EAAkB,EAAK;AAE7D,EAAAG,EAAU,MAAM;AACf,QAAI,CAACF,KAAeN,EAAM,OAAO;AAChC,YAAMS,IAAQ,KAAK,UAAUT,EAAM,OAAO,MAAM,CAAC;AACjD,MAAAI,EAAeK,CAAK,GACpBF,EAAe,EAAI;AAAA,IACpB;AAAA,EACD,GAAG,CAACP,EAAM,OAAOM,CAAW,CAAC;AAE7B,QAAMI,IAAeC;AAAA,IACpB,CAACF,MAAkB;AAClB,UAAI;AACH,QAAAL,EAAeK,CAAK;AACpB,cAAMG,IAAcH,MAAU,KAAK,SAAY,KAAK,MAAMA,CAAK;AAC/D,QAAAd,EAASF,EAAQ,MAAMmB,GAAa,EAAC,gBAAgB,IAAM,aAAa,IAAK,GAC7Ef,EAAYJ,EAAQ,IAAI;AAAA,MACzB,QAAa;AACZ,QAAAG,EAASH,EAAQ,MAAM,EAAC,SAAS,uBAAsB;AAAA,MACxD;AAAA,IACD;AAAA,IACA,CAACI,GAAaD,GAAUD,GAAUF,EAAQ,IAAI;AAAA,EAAA;AAG/C,SACC,gBAAAoB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,yBAAQC,GAAA,EAAM,SAAS,wBAAwBtB,EAAQ,IAAI,IAAK,UAAAA,EAAQ,KAAA,CAAK;AAAA,MAC7E,OAAOQ,GAAO,WAAW;AAAA,MACzB,MAAK;AAAA,MAEL,UAAA,gBAAAY;AAAA,QAACG;AAAA,QAAA;AAAA,UACA,eAAatB,EAAK,aAAa;AAAA,UAC/B,UAAUgB;AAAA,UACV,OAAOP;AAAA,UACP,YAAY,EAAC,aAAa,GAAA;AAAA,UAC1B,YAAY,CAACc,EAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1B;AAAA,EAAA;AAGH;"}