@deviceinsight/ng-ui-scale-lib 10.2.2 → 10.3.1
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/dist/{AccessEditModal-kndFZDt-.js → AccessEditModal-C_Ymwezb.js} +17 -17
- package/dist/{AccessEditModal-kndFZDt-.js.map → AccessEditModal-C_Ymwezb.js.map} +1 -1
- package/dist/{BundleManagementContainer-vMlhg6fJ.js → BundleManagementContainer-ChHU9uVM.js} +4 -4
- package/dist/{BundleManagementContainer-vMlhg6fJ.js.map → BundleManagementContainer-ChHU9uVM.js.map} +1 -1
- package/dist/{BundlesContainer-CaC__bAh.js → BundlesContainer-C1myE7uh.js} +40 -40
- package/dist/{BundlesContainer-CaC__bAh.js.map → BundlesContainer-C1myE7uh.js.map} +1 -1
- package/dist/{DatapointImport-Cq8cifAI.js → DatapointImport-Cyt0hdP-.js} +10 -10
- package/dist/DatapointImport-Cyt0hdP-.js.map +1 -0
- package/dist/{FileUploadInput-DSyHVZUT.js → FileUploadInput-BU6ttAuK.js} +2 -2
- package/dist/{FileUploadInput-DSyHVZUT.js.map → FileUploadInput-BU6ttAuK.js.map} +1 -1
- package/dist/{Files-CJ7EHXzr.js → Files-mFzfngqf.js} +3 -3
- package/dist/{Files-CJ7EHXzr.js.map → Files-mFzfngqf.js.map} +1 -1
- package/dist/{GlobalPowerBiReports-PsiWcApU.js → GlobalPowerBiReports-DWXwL_TH.js} +2 -2
- package/dist/{GlobalPowerBiReports-PsiWcApU.js.map → GlobalPowerBiReports-DWXwL_TH.js.map} +1 -1
- package/dist/{JsonSettingWidget-CpZmTuBe.js → JsonSettingWidget-BbYyUBtl.js} +9 -9
- package/dist/JsonSettingWidget-BbYyUBtl.js.map +1 -0
- package/dist/{LicensesEditPage-CwGor2gV.js → LicensesEditPage-wa-EEvag.js} +11 -11
- package/dist/{LicensesEditPage-CwGor2gV.js.map → LicensesEditPage-wa-EEvag.js.map} +1 -1
- package/dist/{LicensesList-DWQlVNdR.js → LicensesList-ihwXeJ0k.js} +2 -2
- package/dist/{LicensesList-DWQlVNdR.js.map → LicensesList-ihwXeJ0k.js.map} +1 -1
- package/dist/{PropertiesEditPage-C4jjCoPp.js → PropertiesEditPage-CsrU5lnR.js} +29 -29
- package/dist/{PropertiesEditPage-C4jjCoPp.js.map → PropertiesEditPage-CsrU5lnR.js.map} +1 -1
- package/dist/{PropertiesList-CBLvLopM.js → PropertiesList-DJ3hDmSL.js} +5 -5
- package/dist/{PropertiesList-CBLvLopM.js.map → PropertiesList-DJ3hDmSL.js.map} +1 -1
- package/dist/{TemplateEditPage-d-3_n4YW.js → TemplateEditPage-DPJ5MJpd.js} +25 -25
- package/dist/{TemplateEditPage-d-3_n4YW.js.map → TemplateEditPage-DPJ5MJpd.js.map} +1 -1
- package/dist/{TemplateTextInput-CQ6XJiql.js → TemplateTextInput-CmCxL3xj.js} +2 -2
- package/dist/{TemplateTextInput-CQ6XJiql.js.map → TemplateTextInput-CmCxL3xj.js.map} +1 -1
- package/dist/{TemplatesListPage-roTvuqft.js → TemplatesListPage-HwJpI4I0.js} +13 -13
- package/dist/{TemplatesListPage-roTvuqft.js.map → TemplatesListPage-HwJpI4I0.js.map} +1 -1
- package/dist/{UserGroupAssignments-DTXRBp_V.js → UserGroupAssignments-2ZrZXU8K.js} +10 -10
- package/dist/{UserGroupAssignments-DTXRBp_V.js.map → UserGroupAssignments-2ZrZXU8K.js.map} +1 -1
- package/dist/{UserGroupTheme-CAHBWb9Q.js → UserGroupTheme-DJut0WZe.js} +5 -5
- package/dist/{UserGroupTheme-CAHBWb9Q.js.map → UserGroupTheme-DJut0WZe.js.map} +1 -1
- package/dist/api.js +23 -23
- package/dist/index.js +567 -562
- package/dist/index.js.map +1 -1
- package/dist/{setTitle-CjnK8p-J.js → setTitle-Dij-z9p9.js} +4547 -4543
- package/dist/setTitle-Dij-z9p9.js.map +1 -0
- package/package.json +12 -11
- package/dist/DatapointImport-Cq8cifAI.js.map +0 -1
- package/dist/JsonSettingWidget-CpZmTuBe.js.map +0 -1
- package/dist/setTitle-CjnK8p-J.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundlesContainer-CaC__bAh.js","sources":["../ng-ui-scale/src/modules/bundleManagement/translations/errors.ts","../ng-ui-scale/src/modules/bundleManagement/utils/useRequest.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/columndefs/versionColumnDefs.tsx","../ng-ui-scale/src/modules/bundleManagement/translations/buttons.ts","../ng-ui-scale/src/modules/bundleManagement/translations/confirm.ts","../ng-ui-scale/src/modules/bundleManagement/translations/successes.ts","../ng-ui-scale/src/modules/bundleManagement/versions/components/DeleteVersionModalContent.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/DeleteVersionModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/columndefs/fileColumnDefs.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/CountLabel.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/FileList.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/VersionSummary.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionDetailsModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionsList.tsx","../ng-ui-scale/src/modules/bundleManagement/utils/helpers.ts","../ng-ui-scale/src/modules/bundleManagement/utils/useSubmitOnEnter.ts","../ng-ui-scale/src/modules/bundleManagement/versions/components/wizard/VersionWizardDetails.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/wizard/VersionWizardFiles.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionWizardModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionsContainer.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundleAccordionItem.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundlesAccordion.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/CreateBundleModal.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/components/DeleteBundleModalContent.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/DeleteBundleModal.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundlesContainer.tsx"],"sourcesContent":["export const fetchAllBundlesError = {\n\tid: 'bundlemanagement.fetchAllBundlesError',\n\tdefaultValue: 'The bundles could not be loaded',\n};\nexport const deleteBundleError = {\n\tid: 'bundlemanagement.deleteBundleError',\n\tdefaultValue: 'The bundle could not be deleted',\n};\nexport const createBundleError = {\n\tid: 'bundlemanagement.createBundleError',\n\tdefaultValue: 'Could not save bundle',\n};\nexport const fetchBundleVersionError = {\n\tid: 'bundlemanagement.fetchBundleVersionError',\n\tdefaultValue: 'The version could not be loaded',\n};\nexport const fetchBundleFilesError = {\n\tid: 'bundlemanagement.fetchBundleFilesError',\n\tdefaultValue: 'The files for this version could not be loaded',\n};\nexport const downloadBundleFileError = {\n\tid: 'bundlemanagement.downloadBundleFileError',\n\tdefaultValue: 'The file could not be downloaded',\n};\nexport const deleteBundleVersionError = {\n\tid: 'bundlemanagement.deleteBundleVersionError',\n\tdefaultValue: 'The version could not be deleted',\n};\nexport const releaseBundleVersionError = {\n\tid: 'bundlemanagement.releaseBundleVersionError',\n\tdefaultValue: 'The version could not be published',\n};\nexport const createBundleVersionError = {\n\tid: 'bundleversion.createBundleVersionError',\n\tdefaultValue: 'The version could not be created',\n};\nexport const fetchBundleVersionsError = {\n\tid: 'bundlemanagement.fetchBundleVersionsError',\n\tdefaultValue: 'The versions for this bundle could not be loaded',\n};\nexport const deleteBundleFileError = {\n\tid: 'bundlemanagement.deleteBundleFileError',\n\tdefaultValue: 'The file could not be deleted',\n};\nexport const saveBundleDuplicateFileError = {\n\tid: 'bundlemanagement.saveBundleDuplicateFileError',\n\tdefaultValue: 'A file with this name already exists',\n};\nexport const saveBundleFileError = {\n\tid: 'bundlemanagement.saveBundleFileError',\n\tdefaultValue: 'The file could not be saved',\n};\n","import {useCallback, useEffect, useRef, useState} from 'react';\n\nimport {messageBoxError, messageBoxSuccess} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\n\ntype MessageProps = {\n\tid: string;\n\tdefaultValue: string;\n\tcondition?: (response: any) => boolean;\n};\n\nexport type UseRequestProps<T> = {\n\trequestFunction: (...args: any[]) => Promise<T>;\n\terrorMessages?: Array<MessageProps>;\n\tsuccessMessages?: Array<MessageProps>;\n\tinitialData?: T;\n} & Record<string, any>;\n\nexport type UseRequestReturnValues<T> = {\n\trun: (...args: any[]) => Promise<any>;\n\tdata: T | undefined;\n\tloading: boolean;\n\terror: any;\n};\n\nexport const showConditionalMessage = (\n\tmessages: Array<MessageProps> | undefined,\n\tmessageBox: Function,\n\tresponse: any,\n) => {\n\tmessages &&\n\t\tmessages.some(message => {\n\t\t\tif (!message.condition || message.condition(response)) {\n\t\t\t\tmessageBox(<Trans i18nKey={message.id}>{message.defaultValue}</Trans>);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n};\n\nfunction useRequest<T>({\n\trequestFunction,\n\terrorMessages,\n\tsuccessMessages,\n\tinitialData,\n}: UseRequestProps<T>): UseRequestReturnValues<T> {\n\tconst [data, setData] = useState(initialData);\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState(undefined);\n\tconst mountedRef = useRef(true);\n\n\tconst run = useCallback(\n\t\tasync (...args: any[]) => {\n\t\t\ttry {\n\t\t\t\tsetError(undefined);\n\t\t\t\tsetLoading(true);\n\n\t\t\t\tconst response = await requestFunction(...args);\n\n\t\t\t\tif (mountedRef.current && response) {\n\t\t\t\t\tsetData(response);\n\t\t\t\t}\n\n\t\t\t\tshowConditionalMessage(successMessages, messageBoxSuccess, response);\n\t\t\t} catch (err: any) {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetError(err);\n\t\t\t\t}\n\n\t\t\t\tshowConditionalMessage(errorMessages, messageBoxError, err);\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[requestFunction, errorMessages, successMessages],\n\t);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: It's legacy code, do not change dependencies\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, [requestFunction, errorMessages, successMessages]);\n\n\treturn {run, data, loading, error};\n}\n\nexport default useRequest;\n","import type {BundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport type {ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {type TFunction, Trans} from 'i18n';\nimport {formatTimestamp} from 'utils/timestampUtils';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst formatDateTime = (value: string | null | undefined) => {\n\tif (value) {\n\t\treturn <span>{formatTimestamp(value, {showTimezone: false})}</span>;\n\t} else {\n\t\treturn '-';\n\t}\n};\n\nconst versionColumnDefs = (\n\t{\n\t\tonViewDetails,\n\t\tonDelete,\n\t\tonEdit,\n\t}: {\n\t\tonViewDetails: (arg0: string) => void;\n\t\tonDelete: (arg0: BundleVersion) => void;\n\t\tonEdit: (arg0: string) => void;\n\t},\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleVersion>> => {\n\treturn [\n\t\t{\n\t\t\tname: 'name',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.name\">Name</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: (version: BundleVersion) => (\n\t\t\t\t<a\n\t\t\t\t\thref=\"edit\"\n\t\t\t\t\tonClick={ev => {\n\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\tonViewDetails(version.id);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{version.name}\n\t\t\t\t</a>\n\t\t\t),\n\t\t\twidth: '15%',\n\t\t},\n\t\t{\n\t\t\tname: 'description',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.description\">Description</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({description}: BundleVersion) => <span>{description}</span>,\n\t\t\twidth: '20%',\n\t\t},\n\t\t{\n\t\t\tname: 'fileCount',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.files\">Files</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({fileCount}: BundleVersion) => <span>{fileCount || '-'}</span>,\n\t\t\twidth: '10%',\n\t\t},\n\t\t{\n\t\t\tname: 'draft',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.status\">Status</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({draft}: BundleVersion) => (\n\t\t\t\t<span>\n\t\t\t\t\t{draft ? (\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.draft\">Draft</Trans>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.published\">Published</Trans>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t),\n\t\t\twidth: '10%',\n\t\t},\n\t\t{\n\t\t\tname: 'createdAt',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.createdAt\">Created at</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({createdAt}: BundleVersion) => <span>{formatDateTime(createdAt)}</span>,\n\t\t},\n\t\t{\n\t\t\tname: 'releasedAt',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.releasedAt\">Published at</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({releasedAt}: BundleVersion) => <span>{releasedAt ? formatDateTime(releasedAt) : '-'}</span>,\n\t\t},\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\twidth: '5%',\n\t\t\talign: 'right',\n\t\t\trender: (version: BundleVersion) => (\n\t\t\t\t<HasAuthorities authorities={['WRITE_BUNDLE'] as string[]}>\n\t\t\t\t\t<>\n\t\t\t\t\t\t{version.draft && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t\tonClick={() => onEdit(version.id)}\n\t\t\t\t\t\t\t\ttitle={t('bundleversion.edit', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Edit Bundle Version',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_ICON}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon edit />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\tonClick={() => onDelete(version)}\n\t\t\t\t\t\t\ttitle={t('bundleversion.delete', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Delete Bundle Version',\n\t\t\t\t\t\t\t\tversion: version.name,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_ICON}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t</HasAuthorities>\n\t\t\t),\n\t\t},\n\t];\n};\n\nexport default versionColumnDefs;\n","export const modalCloseButton = {\n\tid: 'bundlemanagement.modalCloseButton',\n\tdefaultValue: 'Close',\n};\nexport const modalDeleteButton = {\n\tid: 'bundlemanagement.modalDeleteButton',\n\tdefaultValue: 'Delete',\n};\nexport const modalCancelButton = {\n\tid: 'bundlemanagement.modalCancelButton',\n\tdefaultValue: 'Cancel',\n};\nexport const modalSaveAndProceedButton = {\n\tid: 'bundlemanagement.modalSaveAndProceedButton',\n\tdefaultValue: 'Save and Proceed',\n};\n","export const deleteBundleVersionModalTitle = {\n\tid: 'bundlemanagement.deleteBundleVersionModalTitle',\n\tdefaultValue: 'Delete Version',\n};\nexport const deleteBundleModalTitle = {\n\tid: 'bundlemanagement.deleteBundleModalTitle',\n\tdefaultValue: 'Delete Bundle',\n};\n","export const deleteBundleSuccess = {\n\tid: 'bundlemanagement.deleteBundleSuccess',\n\tdefaultValue: 'The bundle was deleted',\n};\nexport const createBundleSuccess = {\n\tid: 'bundlemanagement.createBundleSuccess',\n\tdefaultValue: 'The bundle was created.',\n};\nexport const deleteBundleVersionSuccess = {\n\tid: 'bundlemanagement.deleteBundleVersionSuccess',\n\tdefaultValue: 'The version was deleted.',\n};\nexport const releaseBundleVersionSuccess = {\n\tid: 'bundlemanagement.releaseBundleVersionSuccess',\n\tdefaultValue: 'The version was published',\n};\n","import type * as React from 'react';\n\nimport type {BundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\ntype Props = {\n\tversion: BundleVersion;\n\tcanBeDeleted: boolean;\n\terror: React.ReactNode | null | undefined;\n\tprocessing: boolean;\n};\n\nconst renderErrorContent = (versionName: string, error: React.ReactNode | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t{error ? (\n\t\t\terror\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBodyError\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tThe version <strong>{versionName}</strong> cannot be deleted.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t</div>\n);\n\nconst renderConfirmContent = (versionName: string) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_DIALOG}>\n\t\t<p>\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteVersionModalBody\">\n\t\t\t\t<>\n\t\t\t\t\tDo you really want to delete the version <strong>{versionName}</strong>?\n\t\t\t\t</>\n\t\t\t</Trans>\n\t\t</p>\n\t</div>\n);\n\nconst DeleteVersionModalContent = ({version, canBeDeleted, error, processing}: Props) => {\n\treturn (\n\t\t<SpinnerContainer show={processing}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!processing &&\n\t\t\t\t\t(canBeDeleted ? renderConfirmContent(version.name) : renderErrorContent(version.name, error))}\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default DeleteVersionModalContent;\n","import {type Bundle, type BundleVersion, deleteBundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {modalCancelButton, modalDeleteButton} from '../translations/buttons';\nimport {deleteBundleVersionModalTitle} from '../translations/confirm';\nimport {deleteBundleVersionError} from '../translations/errors';\nimport {deleteBundleVersionSuccess} from '../translations/successes';\nimport {useCanDeleteBundleVersion} from '../utils/useCanDeleteBundleVersion';\nimport useRequest from '../utils/useRequest';\nimport DeleteVersionModalContent from './components/DeleteVersionModalContent';\n\ntype DeleteProps = {\n\tbundle: Bundle;\n\tversion: BundleVersion;\n\tonCancel: () => void;\n\tloadVersions: () => Promise<any>;\n};\ntype Props = DeleteProps;\nconst errorMessages = [deleteBundleVersionError];\nconst successMessages = [deleteBundleVersionSuccess];\n\nconst DeleteVersionModal = ({bundle, version, onCancel, loadVersions}: Props) => {\n\tconst {run} = useRequest({\n\t\trequestFunction: deleteBundleVersion,\n\t\terrorMessages,\n\t\tsuccessMessages,\n\t});\n\tconst canDeleteProps = useCanDeleteBundleVersion(bundle, version);\n\n\tconst onAccept = () => run(bundle.id, version.id).then(loadVersions).then(onCancel);\n\n\treturn (\n\t\t<Modal\n\t\t\theader={\n\t\t\t\t<Trans i18nKey={deleteBundleVersionModalTitle.id}>{deleteBundleVersionModalTitle.defaultValue}</Trans>\n\t\t\t}\n\t\t\tcontent={<DeleteVersionModalContent version={version} {...canDeleteProps} />}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button primary disabled={!canDeleteProps.canBeDeleted} onClick={onAccept}>\n\t\t\t\t\t\t<Trans i18nKey={modalDeleteButton.id}>{modalDeleteButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t\t<Trans i18nKey={modalCancelButton.id}>{modalCancelButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\twidth={500}\n\t\t/>\n\t);\n};\n\nexport default DeleteVersionModal;\n","import type {BundleFileMetadata} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport type {ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport {type TFunction, Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst BASE_FILE_COLUMN_DEFS: Array<ReactableColumnDef<BundleFileMetadata>> = [\n\t{\n\t\tname: 'name',\n\t\tlabel: <Trans i18nKey=\"bundleversion.file.name\">Name</Trans>,\n\t\tsortable: true,\n\t\trender: ({name}: BundleFileMetadata) => name,\n\t\twidth: '60%',\n\t},\n\t{\n\t\tname: 'size',\n\t\tlabel: <Trans i18nKey=\"bundleversion.file.size\">Size</Trans>,\n\t\tsortable: false,\n\t\trender: ({size}: BundleFileMetadata) => (\n\t\t\t<span>\n\t\t\t\t{Math.round(size / 10) / 100}\n\t\t\t\t kB\n\t\t\t</span>\n\t\t),\n\t\twidth: '30%',\n\t},\n];\nexport const fileColumnDefsWithDelete = (\n\tremoveFile: (arg0: BundleFileMetadata) => Promise<any>,\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleFileMetadata>> => {\n\treturn [\n\t\t...BASE_FILE_COLUMN_DEFS,\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\talign: 'right',\n\t\t\trender: (file: BundleFileMetadata) => (\n\t\t\t\t<Button\n\t\t\t\t\tnaked\n\t\t\t\t\tsmall\n\t\t\t\t\tonClick={() => removeFile(file)}\n\t\t\t\t\ttitle={t('bundleversion.file.delete', {\n\t\t\t\t\t\tdefaultValue: 'Delete File {{name: file.name}}',\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t})}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_FILE_ICON}\n\t\t\t\t>\n\t\t\t\t\t<Icon del />\n\t\t\t\t</Button>\n\t\t\t),\n\t\t},\n\t];\n};\nexport const fileColumnDefsWithDownload = (\n\tdownloadFile: (arg0: BundleFileMetadata) => Promise<any>,\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleFileMetadata>> => {\n\treturn [\n\t\t...BASE_FILE_COLUMN_DEFS,\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\talign: 'right',\n\t\t\trender: (file: BundleFileMetadata) => (\n\t\t\t\t<Button\n\t\t\t\t\tnaked\n\t\t\t\t\tsmall\n\t\t\t\t\tonClick={() => downloadFile(file)}\n\t\t\t\t\ttitle={t('bundleversion.file.download', {\n\t\t\t\t\t\tdefaultValue: 'Download File {{name: file.name}}',\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t})}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DOWNLOAD_FILE_ICON}\n\t\t\t\t>\n\t\t\t\t\t<Icon download />\n\t\t\t\t</Button>\n\t\t\t),\n\t\t},\n\t];\n};\n","import {Label} from '@deviceinsight/ng-ui-basic-components';\n\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst CountLabel = ({count}: {count: number | null | undefined}) => (\n\t<Label\n\t\tclassName=\"neutral\"\n\t\tstyle={{marginLeft: 10}}\n\t\ttext={count ? `${count}` : '0'}\n\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.LABEL_VERSION_COUNT}\n\t/>\n);\n\nexport default CountLabel;\n","import type {BundleFileMetadata, PaginationSettings} from '@deviceinsight/ng-ui-api-client';\nimport {type ReactableColumnDef, ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\nimport CountLabel from './CountLabel';\n\nconst PAGINATION_SETTINGS = {\n\tpage: 0,\n\tsize: 5,\n\tsort: {\n\t\tproperty: 'name',\n\t\tdirection: 'ASC',\n\t},\n} as PaginationSettings;\n\nconst FileList = ({\n\tfiles,\n\tcolumnDefs,\n\tisLoading,\n}: {\n\tfiles: Array<BundleFileMetadata>;\n\tcolumnDefs: Array<ReactableColumnDef<BundleFileMetadata>>;\n\tisLoading: boolean;\n}) => (\n\t<div className=\"fields\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_FILES_DIALOG}>\n\t\t<div className=\"field\">\n\t\t\t<h2>\n\t\t\t\t<Trans i18nKey=\"bundleversion.files\">Files</Trans>\n\t\t\t\t<CountLabel count={files.length} />\n\t\t\t</h2>\n\t\t\t<ReactableWithClientSidePagination\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\tuniqueItemKey={item => `${item.name}_${item.size}`}\n\t\t\t\tpaginationSettings={PAGINATION_SETTINGS}\n\t\t\t\titems={files}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\ttableName={'files'}\n\t\t\t/>\n\t\t</div>\n\t</div>\n);\n\nexport default FileList;\n","import type {Bundle, BundleVersion} from '@deviceinsight/ng-ui-api-client';\n\nimport {Trans} from 'i18n';\n\nconst VersionSummary = ({bundle, version}: {bundle: Bundle; version: BundleVersion | null | undefined}) => (\n\t<div className=\"bundle-version-info\">\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<Trans i18nKey=\"version.files.bundleName\">Bundle Name</Trans>\n\t\t\t</label>\n\t\t\t<span>{bundle.name}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<Trans i18nKey=\"version.files.versionName\">Version Name</Trans>\n\t\t\t</label>\n\t\t\t<span>{version ? version.name : ''}</span>\n\t\t</div>\n\t\t{version && version.description && (\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<Trans i18nKey=\"version.files.versionDescription\">Version Description</Trans>\n\t\t\t\t</label>\n\t\t\t\t<span>{version.description}</span>\n\t\t\t</div>\n\t\t)}\n\t</div>\n);\n\nexport default VersionSummary;\n","import {useEffect} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleFileMetadata,\n\tdownloadBundleFile,\n\tfetchBundleFiles,\n\tfetchBundleVersion,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {type TFunction, Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {modalCloseButton} from '../translations/buttons';\nimport {downloadBundleFileError, fetchBundleFilesError, fetchBundleVersionError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport {fileColumnDefsWithDownload} from './columndefs/fileColumnDefs';\nimport FileList from './components/FileList';\nimport VersionSummary from './components/VersionSummary';\n\ntype Props = {\n\tbundle: Bundle;\n\tversionId: string;\n\tonClose: () => void;\n\tt: TFunction;\n};\nconst loadVersionErrorMessages = [fetchBundleVersionError];\nconst loadFilesErrorMessages = [fetchBundleFilesError];\n\nconst VersionDetailsModal = ({bundle, versionId, onClose, t}: Props) => {\n\tconst {\n\t\trun: loadVersion,\n\t\tdata: detailVersion,\n\t\tloading: loadingFetch,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleVersion,\n\t\tversionId,\n\t\terrorMessages: loadVersionErrorMessages,\n\t});\n\tconst {\n\t\trun: loadFiles,\n\t\tdata: versionFiles,\n\t\tloading: loadingFiles,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleFiles,\n\t\terrorMessages: loadFilesErrorMessages,\n\t});\n\tconst {run: downloadFile, loading: downloadingFile} = useRequest({\n\t\trequestFunction: (file: BundleFileMetadata) => {\n\t\t\treturn downloadBundleFile(bundle.id, versionId, file.id).then(sas => {\n\t\t\t\twindow.location.replace(sas.downloadLink);\n\t\t\t});\n\t\t},\n\t\terrorMessages: [downloadBundleFileError],\n\t});\n\tconst columnDefs = fileColumnDefsWithDownload(downloadFile, t);\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadVersion(bundle.id, versionId);\n\t\t\tloadFiles(bundle.id, versionId);\n\t\t}\n\t}, [loadFiles, loadVersion, versionId, bundle]);\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={<Trans i18nKey=\"bundleversion.viewVersion\">Version Details</Trans>}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={loadingFetch}>\n\t\t\t\t\t<div className=\"bundle-version\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_DETAILS_DIALOG}>\n\t\t\t\t\t\t<VersionSummary bundle={bundle} version={detailVersion} />\n\t\t\t\t\t\t<FileList\n\t\t\t\t\t\t\tisLoading={downloadingFile || loadingFiles}\n\t\t\t\t\t\t\tfiles={versionFiles ? versionFiles : []}\n\t\t\t\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.MODAL_CLOSE_BUTTON}>\n\t\t\t\t\t<Trans i18nKey={modalCloseButton.id}>{modalCloseButton.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default VersionDetailsModal;\n","import type {BundleVersion, Pageable, PaginationSettings, SortDirection} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {Reactable, type ReactableColumnDef, type ReactableRowDef} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport CountLabel from './components/CountLabel';\n\ntype Props = {\n\tloading: boolean;\n\tversions: Pageable<BundleVersion> | null | undefined;\n\tpaginationSettings: PaginationSettings;\n\tsetPaginationSettings: (arg0: PaginationSettings) => void;\n\tcolumnDefs: Array<ReactableColumnDef<BundleVersion>>;\n};\nconst rowDef: ReactableRowDef<BundleVersion> = {\n\tgetRowClass: version => (version.draft ? 'draft' : 'released'),\n};\n\nconst VersionsList = ({columnDefs, paginationSettings, setPaginationSettings, versions, loading}: Props) => {\n\treturn (\n\t\t<SpinnerContainer show={loading}>\n\t\t\t<div\n\t\t\t\tclassName=\"bundle-version-table\"\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<h2>\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.title\">Versions</Trans>\n\t\t\t\t\t<CountLabel count={versions && versions.totalElements} />\n\t\t\t\t</h2>\n\t\t\t\t<Reactable\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\tuniqueItemKey={version => version.id}\n\t\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\t\tpaginationSettings={paginationSettings}\n\t\t\t\t\tonChangePage={page => setPaginationSettings({...paginationSettings, page})}\n\t\t\t\t\tonSort={(property: string, direction: SortDirection) =>\n\t\t\t\t\t\tsetPaginationSettings({\n\t\t\t\t\t\t\t...paginationSettings,\n\t\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t\tdirection,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tpageable={versions}\n\t\t\t\t\trowDef={rowDef}\n\t\t\t\t\tdata-testid=\"bundle-versions-table\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default VersionsList;\n","export type CanDeleteResult = {\n\tcanBeDeleted: boolean;\n\terror?: string;\n};\nexport const focus = (ref: HTMLInputElement | undefined) => {\n\tif (ref) {\n\t\tsetTimeout(() => ref.focus(), 0);\n\t}\n};\n","import {useEffect} from 'react';\n\nconst useSubmitOnEnter = (submitFunction: () => Promise<any>, disabled: boolean) => {\n\tuseEffect(() => {\n\t\tconst listener = (event: KeyboardEvent) => {\n\t\t\tif (disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.code === 'Enter' || event.code === 'NumpadEnter') {\n\t\t\t\tsubmitFunction();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener('keydown', listener);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', listener);\n\t\t};\n\t}, [submitFunction, disabled]);\n};\n\nexport default useSubmitOnEnter;\n","import {Controller, type UseFormReturn} from 'react-hook-form';\n\nimport type {BundleVersionRequest} from '@deviceinsight/ng-ui-api-client';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../../consts';\nimport {focus} from '../../../utils/helpers';\nimport useSubmitOnEnter from '../../../utils/useSubmitOnEnter';\n\ntype Props = {\n\theader: string;\n\tformContext: UseFormReturn<BundleVersionRequest>;\n\tonSubmit: () => Promise<void>;\n};\n\nconst VERSION_PATTERN = /^[a-zA-Z0-9_.-]*$/;\n\nexport default function VersionWizardDetails({header, formContext, onSubmit}: Props) {\n\tconst {t} = useTranslation();\n\tconst {control} = formContext;\n\tuseSubmitOnEnter(onSubmit, false);\n\treturn (\n\t\t<>\n\t\t\t<h3\n\t\t\t\tstyle={{\n\t\t\t\t\tmarginBottom: 20,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{header}\n\t\t\t</h3>\n\t\t\t<form className=\"di form\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_VERSION_DIALOG}>\n\t\t\t\t<Controller\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\trules={{\n\t\t\t\t\t\trequired: t('version.name.required', {\n\t\t\t\t\t\t\tdefaultValue: 'Name is required.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tpattern: {\n\t\t\t\t\t\t\tvalue: VERSION_PATTERN,\n\t\t\t\t\t\t\tmessage: t('version.name.pattern', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Name can only contain latin characters, number, dots and underscores.',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\tvalue: 50,\n\t\t\t\t\t\t\tmessage: t('version.name.maxLength', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Name cannot be longer than 50 characters',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_NAME_INPUT}\n\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundleversion.name\">Name</Trans>}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\tref={focus}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<Controller\n\t\t\t\t\tname=\"description\"\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\trules={{\n\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\tvalue: 250,\n\t\t\t\t\t\t\tmessage: t('version.description.maxLength', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Description cannot be longer than 250 characters',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_DESCRIPTION_INPUT}\n\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundleversion.description\">Description</Trans>}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</form>\n\t\t</>\n\t);\n}\n","import {get} from 'lodash';\nimport {useEffect} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleFileMetadata,\n\ttype BundleVersion,\n\tcreateBundleFile,\n\tdeleteBundleFile,\n} from '@deviceinsight/ng-ui-api-client';\n\nimport {FileUploadInput} from 'components/inputs/FileUploadInput';\nimport {useTranslation} from 'i18n';\nimport {createFileUploadAxios} from '../../../../../utils/fileUploadAxios';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../../consts';\nimport {deleteBundleFileError, saveBundleDuplicateFileError, saveBundleFileError} from '../../../translations/errors';\nimport useRequest, {type UseRequestReturnValues} from '../../../utils/useRequest';\nimport {fileColumnDefsWithDelete} from '../../columndefs/fileColumnDefs';\nimport FileList from '../../components/FileList';\nimport VersionSummary from '../../components/VersionSummary';\n\ntype Props = {\n\tbundle: Bundle;\n\tversion: BundleVersion | null | undefined;\n\tfileLoader: UseRequestReturnValues<Array<BundleFileMetadata>>;\n};\nconst DUPLICATE_FILE_NAME_ERROR = 'DUPLICATE_FILE_NAME';\n\nconst VersionWizardFiles = ({\n\tbundle,\n\tversion,\n\tfileLoader: {run: loadFiles, data: files, loading: loadingFiles},\n}: Props) => {\n\tconst {t} = useTranslation();\n\tconst versionId = version ? version.id : '';\n\tconst {run: deleteFile, loading: loadingDelete} = useRequest({\n\t\trequestFunction: deleteBundleFile,\n\t\terrorMessages: [deleteBundleFileError],\n\t});\n\tconst {run: saveFile, loading: loadingSave} = useRequest({\n\t\trequestFunction: createBundleFile,\n\t\terrorMessages: [\n\t\t\t{\n\t\t\t\t...saveBundleDuplicateFileError,\n\t\t\t\tcondition: enhancedError => get(enhancedError, 'response.data.error') === DUPLICATE_FILE_NAME_ERROR,\n\t\t\t},\n\t\t\tsaveBundleFileError,\n\t\t],\n\t});\n\n\tconst reload = () => loadFiles(bundle.id, versionId);\n\n\tconst deleteFileAndReload = (file: BundleFileMetadata) => deleteFile(bundle.id, versionId, file.id).then(reload);\n\n\tconst createFileAndReload = (formData: FormData) =>\n\t\tsaveFile(bundle.id, versionId, formData, createFileUploadAxios()).then(reload);\n\n\tconst columnDefs = fileColumnDefsWithDelete(deleteFileAndReload, t);\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadFiles(bundle.id, versionId);\n\t\t}\n\t}, [loadFiles, versionId, bundle]);\n\treturn (\n\t\t<div className=\"bundle-version\">\n\t\t\t<VersionSummary bundle={bundle} version={version} />\n\t\t\t<FileList\n\t\t\t\tisLoading={loadingDelete || loadingSave || loadingFiles}\n\t\t\t\tfiles={files || []}\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t/>\n\t\t\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_FILE_UPLOAD_AREA}>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t}}\n\t\t\t\t\tkey={files ? files.length : 1}\n\t\t\t\t\tonChange={file => {\n\t\t\t\t\t\tif (file) {\n\t\t\t\t\t\t\tconst data = new FormData();\n\t\t\t\t\t\t\tdata.append('file', file);\n\t\t\t\t\t\t\tcreateFileAndReload(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default VersionWizardFiles;\n","import {useEffect} from 'react';\nimport {useForm} from 'react-hook-form';\n\nimport {\n\ttype Bundle,\n\ttype BundleVersionRequest,\n\tcreateBundleVersion,\n\tfetchBundleFiles,\n\tfetchBundleVersion,\n\treleaseBundleVersion,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {modalCloseButton, modalSaveAndProceedButton} from '../translations/buttons';\nimport {\n\tcreateBundleVersionError,\n\tfetchBundleFilesError,\n\tfetchBundleVersionError,\n\treleaseBundleVersionError,\n} from '../translations/errors';\nimport {releaseBundleVersionSuccess} from '../translations/successes';\nimport useRequest from '../utils/useRequest';\nimport VersionWizardModalDetails from './components/wizard/VersionWizardDetails';\nimport VersionWizardModalFiles from './components/wizard/VersionWizardFiles';\n\ntype Props = {\n\tbundle: Bundle;\n\tversionId?: string | null | undefined;\n\tsetVersionId: (versionId: string | null | undefined) => void;\n\tonClose: () => void;\n};\nconst fetchBundleVersionErrorMessages = [fetchBundleVersionError];\nconst fetchBundleFilesErrorMessages = [fetchBundleFilesError];\nconst createBundleVersionErrorMessages = [createBundleVersionError];\nconst releaseBundleVersionErrorMessages = [releaseBundleVersionError];\nconst releaseBundleVersionSuccessMessages = [releaseBundleVersionSuccess];\n\nconst VersionWizardModal = ({bundle, versionId, setVersionId, onClose}: Props) => {\n\tconst formContext = useForm<BundleVersionRequest>({\n\t\tdefaultValues: {\n\t\t\tname: '',\n\t\t\tdescription: '',\n\t\t},\n\t});\n\tconst {handleSubmit} = formContext;\n\n\tconst onSubmit = (bundleVersion: BundleVersionRequest) => {\n\t\treturn createBundleVersion(bundle.id, bundleVersion).then(versionResponse => setVersionId(versionResponse.id));\n\t};\n\n\tconst submit = () => {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t};\n\n\tconst versionCreator = useRequest({\n\t\trequestFunction: submit,\n\t\terrorMessages: createBundleVersionErrorMessages,\n\t});\n\tconst versionPublisher = useRequest({\n\t\trequestFunction: releaseBundleVersion,\n\t\terrorMessages: releaseBundleVersionErrorMessages,\n\t\tsuccessMessages: releaseBundleVersionSuccessMessages,\n\t});\n\tconst versionLoader = useRequest({\n\t\trequestFunction: fetchBundleVersion,\n\t\terrorMessages: fetchBundleVersionErrorMessages,\n\t});\n\tconst fileLoader = useRequest({\n\t\trequestFunction: fetchBundleFiles,\n\t\terrorMessages: fetchBundleFilesErrorMessages,\n\t});\n\tconst {run: loadBundleVersion} = versionLoader;\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadBundleVersion(bundle.id, versionId);\n\t\t}\n\t}, [versionId, loadBundleVersion, bundle]);\n\tconst canPublish = !!(fileLoader.data && fileLoader.data.length);\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={\n\t\t\t\tversionId ? (\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.editversion\">Add Files</Trans>\n\t\t\t\t) : (\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.addversion\">Create new Version</Trans>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer\n\t\t\t\t\tshow={\n\t\t\t\t\t\tversionPublisher.loading ||\n\t\t\t\t\t\t(versionLoader.loading && !versionLoader.data) ||\n\t\t\t\t\t\tversionCreator.loading\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{!versionId ? (\n\t\t\t\t\t\t<VersionWizardModalDetails header={bundle.name} formContext={formContext} onSubmit={submit} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<VersionWizardModalFiles bundle={bundle} version={versionLoader.data} fileLoader={fileLoader} />\n\t\t\t\t\t)}\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\tversionId ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tprimary\n\t\t\t\t\t\t\tonClick={() => versionPublisher.run(bundle.id, versionId || '').then(onClose)}\n\t\t\t\t\t\t\tdisabled={!canPublish || versionPublisher.loading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trans i18nKey=\"bundlemanagement.publish\">Publish</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_VERSION_BUTTON}>\n\t\t\t\t\t\t\t<Trans i18nKey={modalCloseButton.id}>{modalCloseButton.defaultValue}</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tprimary\n\t\t\t\t\t\t\tonClick={versionCreator.run}\n\t\t\t\t\t\t\tdisabled={formContext.formState.isSubmitting || versionCreator.loading}\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.SAVE_VERSION_BUTTON}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trans i18nKey={modalSaveAndProceedButton.id}>\n\t\t\t\t\t\t\t\t{modalSaveAndProceedButton.defaultValue}\n\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_VERSION_BUTTON}>\n\t\t\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default VersionWizardModal;\n","import {useEffect, useState} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleVersion,\n\tfetchBundleVersions,\n\ttype Pageable,\n\ttype PaginationSettings,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport useQueryParams from 'hooks/useQueryParams';\nimport {Trans, useTranslation} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS, QUERY_PARAM_BUNDLE_ID, QUERY_PARAM_BUNDLE_VERSION_ID} from '../consts';\nimport {fetchBundleVersionsError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport versionColumnDefs from './columndefs/versionColumnDefs';\nimport DeleteVersionModal from './DeleteVersionModal';\nimport VersionDetailsModal from './VersionDetailsModal';\nimport VersionsList from './VersionsList';\nimport VersionWizardModal from './VersionWizardModal';\n\ntype Props = {\n\tbundle: Bundle;\n\tisOpen: boolean;\n};\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 5,\n\tsort: {\n\t\tproperty: 'createdAt',\n\t\tdirection: 'DESC',\n\t},\n};\nconst loadVersionsErrorMessages = [fetchBundleVersionsError];\n\nconst VersionsContainer = ({bundle, isOpen}: Props) => {\n\tconst {t} = useTranslation();\n\tconst [createVersion, setCreateVersion] = useState(false);\n\tconst [versionToView, setVersionToView] = useState<string | null | undefined>(undefined);\n\tconst [versionToEdit, setVersionToEdit] = useState<string | null | undefined>(undefined);\n\tconst [versionToDelete, setVersionToDelete] = useState<BundleVersion | null | undefined>(undefined);\n\tconst queryParams = useQueryParams();\n\tuseEffect(() => {\n\t\tconst bundleId = queryParams.get(QUERY_PARAM_BUNDLE_ID);\n\t\tconst bundleVersionId = queryParams.get(QUERY_PARAM_BUNDLE_VERSION_ID);\n\n\t\tif (bundleVersionId && bundleId === bundle.id) {\n\t\t\tsetVersionToView(bundleVersionId);\n\t\t}\n\t}, [queryParams, bundle]);\n\tconst columnDefs = versionColumnDefs(\n\t\t{\n\t\t\tonViewDetails: setVersionToView,\n\t\t\tonDelete: setVersionToDelete,\n\t\t\tonEdit: setVersionToEdit,\n\t\t},\n\t\tt,\n\t);\n\tconst [paginationSettings, setPaginationSettings] = useState<PaginationSettings>(INITIAL_PAGINATION_SETTINGS);\n\tconst {\n\t\trun: loadVersions,\n\t\tdata: versions,\n\t\tloading,\n\t} = useRequest<Pageable<BundleVersion> | null | undefined>({\n\t\trequestFunction: fetchBundleVersions,\n\t\terrorMessages: loadVersionsErrorMessages,\n\t});\n\n\tconst reload = () => loadVersions(bundle.id, paginationSettings);\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tloadVersions(bundle.id, paginationSettings);\n\t\t}\n\t}, [isOpen, paginationSettings, loadVersions, bundle]);\n\treturn (\n\t\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.BUNDLE_VERSION_VIEW}>\n\t\t\t<VersionsList\n\t\t\t\tversions={versions}\n\t\t\t\tpaginationSettings={paginationSettings}\n\t\t\t\tsetPaginationSettings={setPaginationSettings}\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\tloading={loading}\n\t\t\t/>\n\t\t\t<HasAuthorities authorities={['WRITE_BUNDLE'] as string[]}>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => setCreateVersion(true)}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_VERSION_BUTTON}\n\t\t\t\t>\n\t\t\t\t\t<Icon add />\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.addversion\">Create new version</Trans>\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t</HasAuthorities>\n\t\t\t{versionToDelete && (\n\t\t\t\t<DeleteVersionModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversion={versionToDelete}\n\t\t\t\t\tonCancel={() => setVersionToDelete(undefined)}\n\t\t\t\t\tloadVersions={reload}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{(createVersion || versionToEdit) && (\n\t\t\t\t<VersionWizardModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversionId={versionToEdit}\n\t\t\t\t\tsetVersionId={setVersionToEdit}\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetCreateVersion(false);\n\t\t\t\t\t\tsetVersionToEdit(undefined);\n\t\t\t\t\t\treload();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{versionToView && (\n\t\t\t\t<VersionDetailsModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversionId={versionToView}\n\t\t\t\t\tonClose={() => setVersionToView(undefined)}\n\t\t\t\t\tt={t}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default VersionsContainer;\n","import type {Bundle} from '@deviceinsight/ng-ui-api-client';\nimport {AccordionItem, Button, Icon} from '@deviceinsight/ng-ui-basic-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport VersionsContainer from '../versions/VersionsContainer';\n\ntype ItemProps = {\n\tbundle: Bundle;\n\tisOpen?: boolean;\n\tonDelete: (arg0: Bundle | null | undefined) => void;\n};\n\nconst BundleAccordionItem = (props: ItemProps) => {\n\tconst {bundle, onDelete, isOpen} = props;\n\tconst {id, name} = bundle;\n\treturn (\n\t\t<AccordionItem\n\t\t\t{...props}\n\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.ACCORDION_ITEM + id}\n\t\t\ttitle={name}\n\t\t\tkey={id}\n\t\t\ttools={[\n\t\t\t\t<HasAuthorities\n\t\t\t\t\tkey={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\tauthorities={['DELETE_BUNDLE'] as string[]}\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tnaked\n\t\t\t\t\t\tonClick={() => onDelete(bundle)}\n\t\t\t\t\t\ttitle={{\n\t\t\t\t\t\t\tid: 'bundle.delete.title',\n\t\t\t\t\t\t\tdefaultValue: 'Delete this Bundle',\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon del large />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>,\n\t\t\t]}\n\t\t>\n\t\t\t<div>\n\t\t\t\t<VersionsContainer bundle={bundle} isOpen={!!isOpen} />\n\t\t\t</div>\n\t\t</AccordionItem>\n\t);\n};\n\nexport default BundleAccordionItem;\n","import type {Bundle} from '@deviceinsight/ng-ui-api-client';\nimport {Accordion, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport useQueryParams from 'hooks/useQueryParams';\nimport {Trans} from 'i18n';\nimport {QUERY_PARAM_BUNDLE_ID} from '../consts';\nimport BundleAccordionItem from './BundleAccordionItem';\n\ntype OwnProps = {\n\tisLoading: boolean;\n\tbundles: Array<Bundle> | null | undefined;\n\tonDelete: (arg0: Bundle | null | undefined) => void;\n};\ntype Props = OwnProps;\n\nconst getOpenBundle = (queryParams: URLSearchParams, bundles: Array<Bundle> | null | undefined) => {\n\tconst bundleId = queryParams.get(QUERY_PARAM_BUNDLE_ID);\n\n\tif (!bundles || !bundles.length || !bundleId) {\n\t\treturn 0;\n\t}\n\n\treturn bundles.reduce((openBundleId, bundle, index) => (bundle.id === bundleId ? index : openBundleId), 0);\n};\n\nconst BundlesAccordion = ({bundles, onDelete, isLoading}: Props) => {\n\tconst queryParams = useQueryParams();\n\tconst openIndex = getOpenBundle(queryParams, bundles);\n\treturn (\n\t\t<SpinnerContainer show={isLoading}>\n\t\t\t<Accordion key={openIndex} accordionClass=\"bundles\" defaultOpenPageIndex={openIndex}>\n\t\t\t\t{(bundles || []).map(bundle => (\n\t\t\t\t\t<BundleAccordionItem key={bundle.name} bundle={bundle} onDelete={onDelete} />\n\t\t\t\t))}\n\t\t\t</Accordion>\n\t\t\t{!isLoading && (!bundles || !bundles.length) && (\n\t\t\t\t<Trans i18nKey=\"bundleManagement.noBundles\">There are currently no bundles</Trans>\n\t\t\t)}\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default BundlesAccordion;\n","import type {Ref} from 'react';\nimport {Controller, useForm} from 'react-hook-form';\n\nimport {type BundleRequest, createBundle} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {messageBoxError, messageBoxSuccess} from '@deviceinsight/ng-ui-components';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\nimport messages from 'i18n/messages';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {focus} from '../utils/helpers';\nimport useSubmitOnEnter from '../utils/useSubmitOnEnter';\n\ntype Props = {\n\tloadBundles: () => Promise<any>;\n\tsetOpen: (open: boolean) => void;\n};\n\nconst CreateBundleModal = ({setOpen, loadBundles}: Props) => {\n\tconst {t} = useTranslation();\n\tconst {\n\t\thandleSubmit,\n\t\tcontrol,\n\t\tformState: {isSubmitting},\n\t} = useForm<BundleRequest>({defaultValues: {name: ''}});\n\n\tconst onSubmit = (bundleRequest: BundleRequest): Promise<void> =>\n\t\tcreateBundle(bundleRequest)\n\t\t\t.then(() => {\n\t\t\t\tloadBundles();\n\t\t\t\tsetOpen(false);\n\t\t\t\tmessageBoxSuccess(\n\t\t\t\t\t<Trans i18nKey=\"bundlemanagement.createBundleSuccess\">The bundle was created.</Trans>,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error('bundle creation error', error);\n\t\t\t\tmessageBoxError(<Trans i18nKey=\"bundlemanagement.createBundleError\">Could not save bundle</Trans>);\n\t\t\t});\n\n\tconst submit = () => {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t};\n\n\tuseSubmitOnEnter(submit, false);\n\treturn (\n\t\t<Modal\n\t\t\twidth={400}\n\t\t\theader={<Trans i18nKey=\"bundle.create.title\">Create new Bundle</Trans>}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={isSubmitting} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_BUNDLE_DIALOG}>\n\t\t\t\t\t<div className=\"di form\">\n\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\trequired: t('bundleManagement.bundles.name.required', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Name is required',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\t\t\tvalue: 32,\n\t\t\t\t\t\t\t\t\tmessage: t('bundleManagement.bundles.name.maxLength', {\n\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Name cannot be longer than 32 characters',\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundle.name\">Name</Trans>}\n\t\t\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.BUNDLE_NAME_INPUT}\n\t\t\t\t\t\t\t\t\tref={focus as Ref<HTMLInputElement>}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.SAVE_BUNDLE_BUTTON}\n\t\t\t\t\t\tonClick={submit}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey={messages.save.id}>{messages.save.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => setOpen(false)}\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_BUNDLE_BUTTON}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default CreateBundleModal;\n","import {useEffect} from 'react';\n\nimport {type Bundle, fetchBundleVersions} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\nimport useRequest from '../../utils/useRequest';\n\ntype Props = {\n\tbundle: Bundle;\n\tcanBeDeleted: boolean;\n\terror: string | null | undefined;\n\tprocessing: boolean;\n};\n\nconst renderErrorContent = (bundleName: string, error: string | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t{error ? (\n\t\t\terror\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBodyError\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tThe bundle <strong>{bundleName}</strong> cannot be deleted.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t</div>\n);\n\nconst renderConfirmContent = (bundleName: string, versionCount: string | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t<p data-testid=\"deleteBundleModalBody1\">\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody1\">\n\t\t\t\t<>\n\t\t\t\t\tDo you really want to delete the bundle <strong>{bundleName}</strong>?\n\t\t\t\t</>\n\t\t\t</Trans>\n\t\t</p>\n\t\t{!!versionCount && versionCount !== '0' && (\n\t\t\t<p data-testid=\"deleteBundleModalBody2\">\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody2\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tDeleting this bundle will also delete <strong>{versionCount}</strong> version(s) and the\n\t\t\t\t\t\tassociated files.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t\t<p data-testid=\"deleteBundleModalBody3\">\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody3\">This action cannot be undone.</Trans>\n\t\t</p>\n\t</div>\n);\n\nconst DeleteBundleModalContent = ({bundle, canBeDeleted, error, processing}: Props) => {\n\tconst {\n\t\trun,\n\t\tdata: versions,\n\t\tloading,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleVersions,\n\t});\n\tuseEffect(() => {\n\t\tif (canBeDeleted) {\n\t\t\trun(bundle.id);\n\t\t}\n\t}, [run, bundle, canBeDeleted]);\n\treturn (\n\t\t<SpinnerContainer show={processing || loading}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!processing &&\n\t\t\t\t\t!loading &&\n\t\t\t\t\t(canBeDeleted\n\t\t\t\t\t\t? renderConfirmContent(bundle.name, versions ? versions.totalElements.toString() : undefined)\n\t\t\t\t\t\t: renderErrorContent(bundle.name, error))}\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default DeleteBundleModalContent;\n","import {type Bundle, deleteBundle} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {modalCancelButton, modalDeleteButton} from '../translations/buttons';\nimport {deleteBundleModalTitle} from '../translations/confirm';\nimport {deleteBundleError} from '../translations/errors';\nimport {deleteBundleSuccess} from '../translations/successes';\nimport {useCanDeleteBundle} from '../utils/useCanDeleteBundle';\nimport useRequest from '../utils/useRequest';\nimport DeleteBundleModalContent from './components/DeleteBundleModalContent';\n\ntype DeleteProps = {\n\tbundle: Bundle;\n\tonCancel: () => void;\n\tloadBundles: () => Promise<any>;\n};\ntype Props = DeleteProps;\nconst deleteBundleErrorMessages = [deleteBundleError];\nconst deleteBundleSuccessMessages = [deleteBundleSuccess];\n\nconst DeleteBundleModal = ({bundle, onCancel, loadBundles}: Props) => {\n\tconst {run} = useRequest({\n\t\trequestFunction: deleteBundle,\n\t\terrorMessages: deleteBundleErrorMessages,\n\t\tsuccessMessages: deleteBundleSuccessMessages,\n\t});\n\tconst canDeleteProps = useCanDeleteBundle(bundle);\n\n\tconst onAccept = () => run(bundle.id).then(loadBundles).then(onCancel);\n\n\treturn (\n\t\t<Modal\n\t\t\theader={<Trans i18nKey={deleteBundleModalTitle.id}>{deleteBundleModalTitle.defaultValue}</Trans>}\n\t\t\tcontent={<DeleteBundleModalContent bundle={bundle} {...canDeleteProps} />}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button primary disabled={!canDeleteProps.canBeDeleted} onClick={onAccept}>\n\t\t\t\t\t\t<Trans i18nKey={modalDeleteButton.id}>{modalDeleteButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t\t<Trans i18nKey={modalCancelButton.id}>{modalCancelButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\twidth={500}\n\t\t/>\n\t);\n};\n\nexport default DeleteBundleModal;\n","import {useEffect, useState} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {type Bundle, fetchAllBundles} from '@deviceinsight/ng-ui-api-client';\nimport {ContentHeader} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport {SidebarElementsCreateButton} from '../../../utils/portalAdminUtils';\nimport {fetchAllBundlesError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport BundlesAccordion from './BundlesAccordion';\nimport CreateBundleModal from './CreateBundleModal';\nimport DeleteBundleModal from './DeleteBundleModal';\n\nconst fetchAllBundlesErrorMessages = [fetchAllBundlesError];\n\nconst BundlesContainer = () => {\n\tconst location = useLocation();\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\tconst {\n\t\tdata: bundles,\n\t\tloading,\n\t\trun,\n\t} = useRequest<Array<Bundle>>({\n\t\trequestFunction: fetchAllBundles,\n\t\terrorMessages: fetchAllBundlesErrorMessages,\n\t\tinitialData: [],\n\t});\n\tconst [selectedBundle, setSelectedBundle] = useState<Bundle | null | undefined>();\n\tconst tooltip = <Trans i18nKey=\"portalAdmin.sidebarElements.bundles.create\">Create new bundle</Trans>;\n\n\tconst handleOpenModal = () => {\n\t\tsetIsOpen(true);\n\t};\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: should be triggered on location change\n\tuseEffect(() => {\n\t\tsetIsOpen(false);\n\t\trun();\n\t}, [location, run]);\n\treturn (\n\t\t<div className=\"bundles-container\">\n\t\t\t<ContentHeader\n\t\t\t\ttitle={{\n\t\t\t\t\tid: 'route.label.bundleManagement.name',\n\t\t\t\t\tdefaultValue: 'Bundle Management',\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SidebarElementsCreateButton\n\t\t\t\ttooltip={tooltip}\n\t\t\t\tauthorities={'WRITE_BUNDLE'}\n\t\t\t\tdataTestId=\"create-bundle-button\"\n\t\t\t\tonClick={handleOpenModal}\n\t\t\t/>\n\t\t\t<BundlesAccordion bundles={bundles} onDelete={setSelectedBundle} isLoading={loading} />\n\t\t\t{selectedBundle && (\n\t\t\t\t<DeleteBundleModal\n\t\t\t\t\tbundle={selectedBundle}\n\t\t\t\t\tonCancel={() => setSelectedBundle(undefined)}\n\t\t\t\t\tloadBundles={run}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isOpen && <CreateBundleModal loadBundles={run} setOpen={setIsOpen} />}\n\t\t</div>\n\t);\n};\n\nexport default BundlesContainer;\n"],"names":["fetchAllBundlesError","deleteBundleError","fetchBundleVersionError","fetchBundleFilesError","downloadBundleFileError","deleteBundleVersionError","releaseBundleVersionError","createBundleVersionError","fetchBundleVersionsError","deleteBundleFileError","saveBundleDuplicateFileError","saveBundleFileError","showConditionalMessage","messages","messageBox","response","message","Trans","useRequest","requestFunction","errorMessages","successMessages","initialData","data","setData","useState","loading","setLoading","error","setError","mountedRef","useRef","run","useCallback","args","messageBoxSuccess","err","messageBoxError","useEffect","formatDateTime","value","jsx","formatTimestamp","versionColumnDefs","onViewDetails","onDelete","onEdit","t","version","ev","description","fileCount","draft","createdAt","releasedAt","HasAuthorities","jsxs","Fragment","Button","BUNDLE_MANAGEMENT_TEST_IDS","Icon","modalCloseButton","modalDeleteButton","modalCancelButton","modalSaveAndProceedButton","deleteBundleVersionModalTitle","deleteBundleModalTitle","deleteBundleSuccess","deleteBundleVersionSuccess","releaseBundleVersionSuccess","renderErrorContent","versionName","renderConfirmContent","DeleteVersionModalContent","canBeDeleted","processing","SpinnerContainer","DeleteVersionModal","bundle","onCancel","loadVersions","deleteBundleVersion","canDeleteProps","useCanDeleteBundleVersion","onAccept","Modal","BASE_FILE_COLUMN_DEFS","name","size","fileColumnDefsWithDelete","removeFile","file","fileColumnDefsWithDownload","downloadFile","CountLabel","count","Label","PAGINATION_SETTINGS","FileList","files","columnDefs","isLoading","ReactableWithClientSidePagination","item","VersionSummary","loadVersionErrorMessages","loadFilesErrorMessages","VersionDetailsModal","versionId","onClose","loadVersion","detailVersion","loadingFetch","fetchBundleVersion","loadFiles","versionFiles","loadingFiles","fetchBundleFiles","downloadingFile","downloadBundleFile","sas","rowDef","VersionsList","paginationSettings","setPaginationSettings","versions","Reactable","page","property","direction","focus","ref","useSubmitOnEnter","submitFunction","disabled","listener","event","VERSION_PATTERN","VersionWizardDetails","header","formContext","onSubmit","useTranslation","control","Controller","onChange","onBlur","TextInput","DUPLICATE_FILE_NAME_ERROR","VersionWizardFiles","deleteFile","loadingDelete","deleteBundleFile","saveFile","loadingSave","createBundleFile","enhancedError","get","reload","deleteFileAndReload","createFileAndReload","formData","createFileUploadAxios","FileUploadInput","fetchBundleVersionErrorMessages","fetchBundleFilesErrorMessages","createBundleVersionErrorMessages","releaseBundleVersionErrorMessages","releaseBundleVersionSuccessMessages","VersionWizardModal","setVersionId","useForm","handleSubmit","bundleVersion","createBundleVersion","versionResponse","submit","errors","versionCreator","versionPublisher","releaseBundleVersion","versionLoader","fileLoader","loadBundleVersion","canPublish","VersionWizardModalFiles","VersionWizardModalDetails","INITIAL_PAGINATION_SETTINGS","loadVersionsErrorMessages","VersionsContainer","isOpen","createVersion","setCreateVersion","versionToView","setVersionToView","versionToEdit","setVersionToEdit","versionToDelete","setVersionToDelete","queryParams","useQueryParams","bundleId","QUERY_PARAM_BUNDLE_ID","bundleVersionId","QUERY_PARAM_BUNDLE_VERSION_ID","fetchBundleVersions","BundleAccordionItem","props","id","createElement","AccordionItem","getOpenBundle","bundles","openBundleId","index","BundlesAccordion","openIndex","Accordion","CreateBundleModal","setOpen","loadBundles","isSubmitting","bundleRequest","createBundle","bundleName","versionCount","DeleteBundleModalContent","deleteBundleErrorMessages","deleteBundleSuccessMessages","DeleteBundleModal","deleteBundle","useCanDeleteBundle","fetchAllBundlesErrorMessages","BundlesContainer","location","useLocation","setIsOpen","fetchAllBundles","selectedBundle","setSelectedBundle","tooltip","handleOpenModal","ContentHeader","SidebarElementsCreateButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BundlesContainer-C1myE7uh.js","sources":["../ng-ui-scale/src/modules/bundleManagement/translations/errors.ts","../ng-ui-scale/src/modules/bundleManagement/utils/useRequest.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/columndefs/versionColumnDefs.tsx","../ng-ui-scale/src/modules/bundleManagement/translations/buttons.ts","../ng-ui-scale/src/modules/bundleManagement/translations/confirm.ts","../ng-ui-scale/src/modules/bundleManagement/translations/successes.ts","../ng-ui-scale/src/modules/bundleManagement/versions/components/DeleteVersionModalContent.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/DeleteVersionModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/columndefs/fileColumnDefs.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/CountLabel.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/FileList.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/VersionSummary.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionDetailsModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionsList.tsx","../ng-ui-scale/src/modules/bundleManagement/utils/helpers.ts","../ng-ui-scale/src/modules/bundleManagement/utils/useSubmitOnEnter.ts","../ng-ui-scale/src/modules/bundleManagement/versions/components/wizard/VersionWizardDetails.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/components/wizard/VersionWizardFiles.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionWizardModal.tsx","../ng-ui-scale/src/modules/bundleManagement/versions/VersionsContainer.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundleAccordionItem.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundlesAccordion.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/CreateBundleModal.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/components/DeleteBundleModalContent.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/DeleteBundleModal.tsx","../ng-ui-scale/src/modules/bundleManagement/bundles/BundlesContainer.tsx"],"sourcesContent":["export const fetchAllBundlesError = {\n\tid: 'bundlemanagement.fetchAllBundlesError',\n\tdefaultValue: 'The bundles could not be loaded',\n};\nexport const deleteBundleError = {\n\tid: 'bundlemanagement.deleteBundleError',\n\tdefaultValue: 'The bundle could not be deleted',\n};\nexport const createBundleError = {\n\tid: 'bundlemanagement.createBundleError',\n\tdefaultValue: 'Could not save bundle',\n};\nexport const fetchBundleVersionError = {\n\tid: 'bundlemanagement.fetchBundleVersionError',\n\tdefaultValue: 'The version could not be loaded',\n};\nexport const fetchBundleFilesError = {\n\tid: 'bundlemanagement.fetchBundleFilesError',\n\tdefaultValue: 'The files for this version could not be loaded',\n};\nexport const downloadBundleFileError = {\n\tid: 'bundlemanagement.downloadBundleFileError',\n\tdefaultValue: 'The file could not be downloaded',\n};\nexport const deleteBundleVersionError = {\n\tid: 'bundlemanagement.deleteBundleVersionError',\n\tdefaultValue: 'The version could not be deleted',\n};\nexport const releaseBundleVersionError = {\n\tid: 'bundlemanagement.releaseBundleVersionError',\n\tdefaultValue: 'The version could not be published',\n};\nexport const createBundleVersionError = {\n\tid: 'bundleversion.createBundleVersionError',\n\tdefaultValue: 'The version could not be created',\n};\nexport const fetchBundleVersionsError = {\n\tid: 'bundlemanagement.fetchBundleVersionsError',\n\tdefaultValue: 'The versions for this bundle could not be loaded',\n};\nexport const deleteBundleFileError = {\n\tid: 'bundlemanagement.deleteBundleFileError',\n\tdefaultValue: 'The file could not be deleted',\n};\nexport const saveBundleDuplicateFileError = {\n\tid: 'bundlemanagement.saveBundleDuplicateFileError',\n\tdefaultValue: 'A file with this name already exists',\n};\nexport const saveBundleFileError = {\n\tid: 'bundlemanagement.saveBundleFileError',\n\tdefaultValue: 'The file could not be saved',\n};\n","import {useCallback, useEffect, useRef, useState} from 'react';\n\nimport {messageBoxError, messageBoxSuccess} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\n\ntype MessageProps = {\n\tid: string;\n\tdefaultValue: string;\n\tcondition?: (response: any) => boolean;\n};\n\nexport type UseRequestProps<T> = {\n\trequestFunction: (...args: any[]) => Promise<T>;\n\terrorMessages?: Array<MessageProps>;\n\tsuccessMessages?: Array<MessageProps>;\n\tinitialData?: T;\n} & Record<string, any>;\n\nexport type UseRequestReturnValues<T> = {\n\trun: (...args: any[]) => Promise<any>;\n\tdata: T | undefined;\n\tloading: boolean;\n\terror: any;\n};\n\nexport const showConditionalMessage = (\n\tmessages: Array<MessageProps> | undefined,\n\tmessageBox: Function,\n\tresponse: any,\n) => {\n\tmessages &&\n\t\tmessages.some(message => {\n\t\t\tif (!message.condition || message.condition(response)) {\n\t\t\t\tmessageBox(<Trans i18nKey={message.id}>{message.defaultValue}</Trans>);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n};\n\nfunction useRequest<T>({\n\trequestFunction,\n\terrorMessages,\n\tsuccessMessages,\n\tinitialData,\n}: UseRequestProps<T>): UseRequestReturnValues<T> {\n\tconst [data, setData] = useState(initialData);\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState(undefined);\n\tconst mountedRef = useRef(true);\n\n\tconst run = useCallback(\n\t\tasync (...args: any[]) => {\n\t\t\ttry {\n\t\t\t\tsetError(undefined);\n\t\t\t\tsetLoading(true);\n\n\t\t\t\tconst response = await requestFunction(...args);\n\n\t\t\t\tif (mountedRef.current && response) {\n\t\t\t\t\tsetData(response);\n\t\t\t\t}\n\n\t\t\t\tshowConditionalMessage(successMessages, messageBoxSuccess, response);\n\t\t\t} catch (err: any) {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetError(err);\n\t\t\t\t}\n\n\t\t\t\tshowConditionalMessage(errorMessages, messageBoxError, err);\n\t\t\t} finally {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[requestFunction, errorMessages, successMessages],\n\t);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: It's legacy code, do not change dependencies\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\n\t\treturn () => {\n\t\t\tmountedRef.current = false;\n\t\t};\n\t}, [requestFunction, errorMessages, successMessages]);\n\n\treturn {run, data, loading, error};\n}\n\nexport default useRequest;\n","import type {BundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport type {ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {type TFunction, Trans} from 'i18n';\nimport {formatTimestamp} from 'utils/timestampUtils';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst formatDateTime = (value: string | null | undefined) => {\n\tif (value) {\n\t\treturn <span>{formatTimestamp(value, {showTimezone: false})}</span>;\n\t} else {\n\t\treturn '-';\n\t}\n};\n\nconst versionColumnDefs = (\n\t{\n\t\tonViewDetails,\n\t\tonDelete,\n\t\tonEdit,\n\t}: {\n\t\tonViewDetails: (arg0: string) => void;\n\t\tonDelete: (arg0: BundleVersion) => void;\n\t\tonEdit: (arg0: string) => void;\n\t},\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleVersion>> => {\n\treturn [\n\t\t{\n\t\t\tname: 'name',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.name\">Name</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: (version: BundleVersion) => (\n\t\t\t\t<a\n\t\t\t\t\thref=\"edit\"\n\t\t\t\t\tonClick={ev => {\n\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\tonViewDetails(version.id);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{version.name}\n\t\t\t\t</a>\n\t\t\t),\n\t\t\twidth: '15%',\n\t\t},\n\t\t{\n\t\t\tname: 'description',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.description\">Description</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({description}: BundleVersion) => <span>{description}</span>,\n\t\t\twidth: '20%',\n\t\t},\n\t\t{\n\t\t\tname: 'fileCount',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.files\">Files</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({fileCount}: BundleVersion) => <span>{fileCount || '-'}</span>,\n\t\t\twidth: '10%',\n\t\t},\n\t\t{\n\t\t\tname: 'draft',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.status\">Status</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({draft}: BundleVersion) => (\n\t\t\t\t<span>\n\t\t\t\t\t{draft ? (\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.draft\">Draft</Trans>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.published\">Published</Trans>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t),\n\t\t\twidth: '10%',\n\t\t},\n\t\t{\n\t\t\tname: 'createdAt',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.createdAt\">Created at</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({createdAt}: BundleVersion) => <span>{formatDateTime(createdAt)}</span>,\n\t\t},\n\t\t{\n\t\t\tname: 'releasedAt',\n\t\t\tlabel: <Trans i18nKey=\"bundleversion.releasedAt\">Published at</Trans>,\n\t\t\tsortable: true,\n\t\t\trender: ({releasedAt}: BundleVersion) => <span>{releasedAt ? formatDateTime(releasedAt) : '-'}</span>,\n\t\t},\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\twidth: '5%',\n\t\t\talign: 'right',\n\t\t\trender: (version: BundleVersion) => (\n\t\t\t\t<HasAuthorities authorities={['WRITE_BUNDLE'] as string[]}>\n\t\t\t\t\t<>\n\t\t\t\t\t\t{version.draft && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\t\tonClick={() => onEdit(version.id)}\n\t\t\t\t\t\t\t\ttitle={t('bundleversion.edit', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Edit Bundle Version',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_ICON}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon edit />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\tsmall\n\t\t\t\t\t\t\tonClick={() => onDelete(version)}\n\t\t\t\t\t\t\ttitle={t('bundleversion.delete', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Delete Bundle Version',\n\t\t\t\t\t\t\t\tversion: version.name,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_ICON}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t</HasAuthorities>\n\t\t\t),\n\t\t},\n\t];\n};\n\nexport default versionColumnDefs;\n","export const modalCloseButton = {\n\tid: 'bundlemanagement.modalCloseButton',\n\tdefaultValue: 'Close',\n};\nexport const modalDeleteButton = {\n\tid: 'bundlemanagement.modalDeleteButton',\n\tdefaultValue: 'Delete',\n};\nexport const modalCancelButton = {\n\tid: 'bundlemanagement.modalCancelButton',\n\tdefaultValue: 'Cancel',\n};\nexport const modalSaveAndProceedButton = {\n\tid: 'bundlemanagement.modalSaveAndProceedButton',\n\tdefaultValue: 'Save and Proceed',\n};\n","export const deleteBundleVersionModalTitle = {\n\tid: 'bundlemanagement.deleteBundleVersionModalTitle',\n\tdefaultValue: 'Delete Version',\n};\nexport const deleteBundleModalTitle = {\n\tid: 'bundlemanagement.deleteBundleModalTitle',\n\tdefaultValue: 'Delete Bundle',\n};\n","export const deleteBundleSuccess = {\n\tid: 'bundlemanagement.deleteBundleSuccess',\n\tdefaultValue: 'The bundle was deleted',\n};\nexport const createBundleSuccess = {\n\tid: 'bundlemanagement.createBundleSuccess',\n\tdefaultValue: 'The bundle was created.',\n};\nexport const deleteBundleVersionSuccess = {\n\tid: 'bundlemanagement.deleteBundleVersionSuccess',\n\tdefaultValue: 'The version was deleted.',\n};\nexport const releaseBundleVersionSuccess = {\n\tid: 'bundlemanagement.releaseBundleVersionSuccess',\n\tdefaultValue: 'The version was published',\n};\n","import type * as React from 'react';\n\nimport type {BundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\ntype Props = {\n\tversion: BundleVersion;\n\tcanBeDeleted: boolean;\n\terror: React.ReactNode | null | undefined;\n\tprocessing: boolean;\n};\n\nconst renderErrorContent = (versionName: string, error: React.ReactNode | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t{error ? (\n\t\t\terror\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBodyError\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tThe version <strong>{versionName}</strong> cannot be deleted.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t</div>\n);\n\nconst renderConfirmContent = (versionName: string) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_VERSION_DIALOG}>\n\t\t<p>\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteVersionModalBody\">\n\t\t\t\t<>\n\t\t\t\t\tDo you really want to delete the version <strong>{versionName}</strong>?\n\t\t\t\t</>\n\t\t\t</Trans>\n\t\t</p>\n\t</div>\n);\n\nconst DeleteVersionModalContent = ({version, canBeDeleted, error, processing}: Props) => {\n\treturn (\n\t\t<SpinnerContainer show={processing}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!processing &&\n\t\t\t\t\t(canBeDeleted ? renderConfirmContent(version.name) : renderErrorContent(version.name, error))}\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default DeleteVersionModalContent;\n","import {type Bundle, type BundleVersion, deleteBundleVersion} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {modalCancelButton, modalDeleteButton} from '../translations/buttons';\nimport {deleteBundleVersionModalTitle} from '../translations/confirm';\nimport {deleteBundleVersionError} from '../translations/errors';\nimport {deleteBundleVersionSuccess} from '../translations/successes';\nimport {useCanDeleteBundleVersion} from '../utils/useCanDeleteBundleVersion';\nimport useRequest from '../utils/useRequest';\nimport DeleteVersionModalContent from './components/DeleteVersionModalContent';\n\ntype DeleteProps = {\n\tbundle: Bundle;\n\tversion: BundleVersion;\n\tonCancel: () => void;\n\tloadVersions: () => Promise<any>;\n};\ntype Props = DeleteProps;\nconst errorMessages = [deleteBundleVersionError];\nconst successMessages = [deleteBundleVersionSuccess];\n\nconst DeleteVersionModal = ({bundle, version, onCancel, loadVersions}: Props) => {\n\tconst {run} = useRequest({\n\t\trequestFunction: deleteBundleVersion,\n\t\terrorMessages,\n\t\tsuccessMessages,\n\t});\n\tconst canDeleteProps = useCanDeleteBundleVersion(bundle, version);\n\n\tconst onAccept = () => run(bundle.id, version.id).then(loadVersions).then(onCancel);\n\n\treturn (\n\t\t<Modal\n\t\t\theader={\n\t\t\t\t<Trans i18nKey={deleteBundleVersionModalTitle.id}>{deleteBundleVersionModalTitle.defaultValue}</Trans>\n\t\t\t}\n\t\t\tcontent={<DeleteVersionModalContent version={version} {...canDeleteProps} />}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button primary disabled={!canDeleteProps.canBeDeleted} onClick={onAccept}>\n\t\t\t\t\t\t<Trans i18nKey={modalDeleteButton.id}>{modalDeleteButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t\t<Trans i18nKey={modalCancelButton.id}>{modalCancelButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\twidth={500}\n\t\t/>\n\t);\n};\n\nexport default DeleteVersionModal;\n","import type {BundleFileMetadata} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport type {ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport {type TFunction, Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst BASE_FILE_COLUMN_DEFS: Array<ReactableColumnDef<BundleFileMetadata>> = [\n\t{\n\t\tname: 'name',\n\t\tlabel: <Trans i18nKey=\"bundleversion.file.name\">Name</Trans>,\n\t\tsortable: true,\n\t\trender: ({name}: BundleFileMetadata) => name,\n\t\twidth: '60%',\n\t},\n\t{\n\t\tname: 'size',\n\t\tlabel: <Trans i18nKey=\"bundleversion.file.size\">Size</Trans>,\n\t\tsortable: false,\n\t\trender: ({size}: BundleFileMetadata) => (\n\t\t\t<span>\n\t\t\t\t{Math.round(size / 10) / 100}\n\t\t\t\t kB\n\t\t\t</span>\n\t\t),\n\t\twidth: '30%',\n\t},\n];\nexport const fileColumnDefsWithDelete = (\n\tremoveFile: (arg0: BundleFileMetadata) => Promise<any>,\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleFileMetadata>> => {\n\treturn [\n\t\t...BASE_FILE_COLUMN_DEFS,\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\talign: 'right',\n\t\t\trender: (file: BundleFileMetadata) => (\n\t\t\t\t<Button\n\t\t\t\t\tnaked\n\t\t\t\t\tsmall\n\t\t\t\t\tonClick={() => removeFile(file)}\n\t\t\t\t\ttitle={t('bundleversion.file.delete', {\n\t\t\t\t\t\tdefaultValue: 'Delete File {{name: file.name}}',\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t})}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_FILE_ICON}\n\t\t\t\t>\n\t\t\t\t\t<Icon del />\n\t\t\t\t</Button>\n\t\t\t),\n\t\t},\n\t];\n};\nexport const fileColumnDefsWithDownload = (\n\tdownloadFile: (arg0: BundleFileMetadata) => Promise<any>,\n\tt: TFunction,\n): Array<ReactableColumnDef<BundleFileMetadata>> => {\n\treturn [\n\t\t...BASE_FILE_COLUMN_DEFS,\n\t\t{\n\t\t\tname: 'delete',\n\t\t\tlabel: '',\n\t\t\talign: 'right',\n\t\t\trender: (file: BundleFileMetadata) => (\n\t\t\t\t<Button\n\t\t\t\t\tnaked\n\t\t\t\t\tsmall\n\t\t\t\t\tonClick={() => downloadFile(file)}\n\t\t\t\t\ttitle={t('bundleversion.file.download', {\n\t\t\t\t\t\tdefaultValue: 'Download File {{name: file.name}}',\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t})}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DOWNLOAD_FILE_ICON}\n\t\t\t\t>\n\t\t\t\t\t<Icon download />\n\t\t\t\t</Button>\n\t\t\t),\n\t\t},\n\t];\n};\n","import {Label} from '@deviceinsight/ng-ui-basic-components';\n\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\n\nconst CountLabel = ({count}: {count: number | null | undefined}) => (\n\t<Label\n\t\tclassName=\"neutral\"\n\t\tstyle={{marginLeft: 10}}\n\t\ttext={count ? `${count}` : '0'}\n\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.LABEL_VERSION_COUNT}\n\t/>\n);\n\nexport default CountLabel;\n","import type {BundleFileMetadata, PaginationSettings} from '@deviceinsight/ng-ui-api-client';\nimport {type ReactableColumnDef, ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\nimport CountLabel from './CountLabel';\n\nconst PAGINATION_SETTINGS = {\n\tpage: 0,\n\tsize: 5,\n\tsort: {\n\t\tproperty: 'name',\n\t\tdirection: 'ASC',\n\t},\n} as PaginationSettings;\n\nconst FileList = ({\n\tfiles,\n\tcolumnDefs,\n\tisLoading,\n}: {\n\tfiles: Array<BundleFileMetadata>;\n\tcolumnDefs: Array<ReactableColumnDef<BundleFileMetadata>>;\n\tisLoading: boolean;\n}) => (\n\t<div className=\"fields\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_FILES_DIALOG}>\n\t\t<div className=\"field\">\n\t\t\t<h2>\n\t\t\t\t<Trans i18nKey=\"bundleversion.files\">Files</Trans>\n\t\t\t\t<CountLabel count={files.length} />\n\t\t\t</h2>\n\t\t\t<ReactableWithClientSidePagination\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\tuniqueItemKey={item => `${item.name}_${item.size}`}\n\t\t\t\tpaginationSettings={PAGINATION_SETTINGS}\n\t\t\t\titems={files}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\ttableName={'files'}\n\t\t\t/>\n\t\t</div>\n\t</div>\n);\n\nexport default FileList;\n","import type {Bundle, BundleVersion} from '@deviceinsight/ng-ui-api-client';\n\nimport {Trans} from 'i18n';\n\nconst VersionSummary = ({bundle, version}: {bundle: Bundle; version: BundleVersion | null | undefined}) => (\n\t<div className=\"bundle-version-info\">\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<Trans i18nKey=\"version.files.bundleName\">Bundle Name</Trans>\n\t\t\t</label>\n\t\t\t<span>{bundle.name}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<label>\n\t\t\t\t<Trans i18nKey=\"version.files.versionName\">Version Name</Trans>\n\t\t\t</label>\n\t\t\t<span>{version ? version.name : ''}</span>\n\t\t</div>\n\t\t{version && version.description && (\n\t\t\t<div>\n\t\t\t\t<label>\n\t\t\t\t\t<Trans i18nKey=\"version.files.versionDescription\">Version Description</Trans>\n\t\t\t\t</label>\n\t\t\t\t<span>{version.description}</span>\n\t\t\t</div>\n\t\t)}\n\t</div>\n);\n\nexport default VersionSummary;\n","import {useEffect} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleFileMetadata,\n\tdownloadBundleFile,\n\tfetchBundleFiles,\n\tfetchBundleVersion,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {type TFunction, Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {modalCloseButton} from '../translations/buttons';\nimport {downloadBundleFileError, fetchBundleFilesError, fetchBundleVersionError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport {fileColumnDefsWithDownload} from './columndefs/fileColumnDefs';\nimport FileList from './components/FileList';\nimport VersionSummary from './components/VersionSummary';\n\ntype Props = {\n\tbundle: Bundle;\n\tversionId: string;\n\tonClose: () => void;\n\tt: TFunction;\n};\nconst loadVersionErrorMessages = [fetchBundleVersionError];\nconst loadFilesErrorMessages = [fetchBundleFilesError];\n\nconst VersionDetailsModal = ({bundle, versionId, onClose, t}: Props) => {\n\tconst {\n\t\trun: loadVersion,\n\t\tdata: detailVersion,\n\t\tloading: loadingFetch,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleVersion,\n\t\tversionId,\n\t\terrorMessages: loadVersionErrorMessages,\n\t});\n\tconst {\n\t\trun: loadFiles,\n\t\tdata: versionFiles,\n\t\tloading: loadingFiles,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleFiles,\n\t\terrorMessages: loadFilesErrorMessages,\n\t});\n\tconst {run: downloadFile, loading: downloadingFile} = useRequest({\n\t\trequestFunction: (file: BundleFileMetadata) => {\n\t\t\treturn downloadBundleFile(bundle.id, versionId, file.id).then(sas => {\n\t\t\t\twindow.location.replace(sas.downloadLink);\n\t\t\t});\n\t\t},\n\t\terrorMessages: [downloadBundleFileError],\n\t});\n\tconst columnDefs = fileColumnDefsWithDownload(downloadFile, t);\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadVersion(bundle.id, versionId);\n\t\t\tloadFiles(bundle.id, versionId);\n\t\t}\n\t}, [loadFiles, loadVersion, versionId, bundle]);\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={<Trans i18nKey=\"bundleversion.viewVersion\">Version Details</Trans>}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={loadingFetch}>\n\t\t\t\t\t<div className=\"bundle-version\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_DETAILS_DIALOG}>\n\t\t\t\t\t\t<VersionSummary bundle={bundle} version={detailVersion} />\n\t\t\t\t\t\t<FileList\n\t\t\t\t\t\t\tisLoading={downloadingFile || loadingFiles}\n\t\t\t\t\t\t\tfiles={versionFiles ? versionFiles : []}\n\t\t\t\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.MODAL_CLOSE_BUTTON}>\n\t\t\t\t\t<Trans i18nKey={modalCloseButton.id}>{modalCloseButton.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default VersionDetailsModal;\n","import type {BundleVersion, Pageable, PaginationSettings, SortDirection} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {Reactable, type ReactableColumnDef, type ReactableRowDef} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport CountLabel from './components/CountLabel';\n\ntype Props = {\n\tloading: boolean;\n\tversions: Pageable<BundleVersion> | null | undefined;\n\tpaginationSettings: PaginationSettings;\n\tsetPaginationSettings: (arg0: PaginationSettings) => void;\n\tcolumnDefs: Array<ReactableColumnDef<BundleVersion>>;\n};\nconst rowDef: ReactableRowDef<BundleVersion> = {\n\tgetRowClass: version => (version.draft ? 'draft' : 'released'),\n};\n\nconst VersionsList = ({columnDefs, paginationSettings, setPaginationSettings, versions, loading}: Props) => {\n\treturn (\n\t\t<SpinnerContainer show={loading}>\n\t\t\t<div\n\t\t\t\tclassName=\"bundle-version-table\"\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<h2>\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.title\">Versions</Trans>\n\t\t\t\t\t<CountLabel count={versions && versions.totalElements} />\n\t\t\t\t</h2>\n\t\t\t\t<Reactable\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\tuniqueItemKey={version => version.id}\n\t\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\t\tpaginationSettings={paginationSettings}\n\t\t\t\t\tonChangePage={page => setPaginationSettings({...paginationSettings, page})}\n\t\t\t\t\tonSort={(property: string, direction: SortDirection) =>\n\t\t\t\t\t\tsetPaginationSettings({\n\t\t\t\t\t\t\t...paginationSettings,\n\t\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\t\tdirection,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tpageable={versions}\n\t\t\t\t\trowDef={rowDef}\n\t\t\t\t\tdata-testid=\"bundle-versions-table\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default VersionsList;\n","export type CanDeleteResult = {\n\tcanBeDeleted: boolean;\n\terror?: string;\n};\nexport const focus = (ref: HTMLInputElement | undefined) => {\n\tif (ref) {\n\t\tsetTimeout(() => ref.focus(), 0);\n\t}\n};\n","import {useEffect} from 'react';\n\nconst useSubmitOnEnter = (submitFunction: () => Promise<any>, disabled: boolean) => {\n\tuseEffect(() => {\n\t\tconst listener = (event: KeyboardEvent) => {\n\t\t\tif (disabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.code === 'Enter' || event.code === 'NumpadEnter') {\n\t\t\t\tsubmitFunction();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener('keydown', listener);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', listener);\n\t\t};\n\t}, [submitFunction, disabled]);\n};\n\nexport default useSubmitOnEnter;\n","import {Controller, type UseFormReturn} from 'react-hook-form';\n\nimport type {BundleVersionRequest} from '@deviceinsight/ng-ui-api-client';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../../consts';\nimport {focus} from '../../../utils/helpers';\nimport useSubmitOnEnter from '../../../utils/useSubmitOnEnter';\n\ntype Props = {\n\theader: string;\n\tformContext: UseFormReturn<BundleVersionRequest>;\n\tonSubmit: () => Promise<void>;\n};\n\nconst VERSION_PATTERN = /^[a-zA-Z0-9_.-]*$/;\n\nexport default function VersionWizardDetails({header, formContext, onSubmit}: Props) {\n\tconst {t} = useTranslation();\n\tconst {control} = formContext;\n\tuseSubmitOnEnter(onSubmit, false);\n\treturn (\n\t\t<>\n\t\t\t<h3\n\t\t\t\tstyle={{\n\t\t\t\t\tmarginBottom: 20,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{header}\n\t\t\t</h3>\n\t\t\t<form className=\"di form\" data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_VERSION_DIALOG}>\n\t\t\t\t<Controller\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\trules={{\n\t\t\t\t\t\trequired: t('version.name.required', {\n\t\t\t\t\t\t\tdefaultValue: 'Name is required.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tpattern: {\n\t\t\t\t\t\t\tvalue: VERSION_PATTERN,\n\t\t\t\t\t\t\tmessage: t('version.name.pattern', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Name can only contain latin characters, number, dots and underscores.',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\tvalue: 50,\n\t\t\t\t\t\t\tmessage: t('version.name.maxLength', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Name cannot be longer than 50 characters',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_NAME_INPUT}\n\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundleversion.name\">Name</Trans>}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\tref={focus}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<Controller\n\t\t\t\t\tname=\"description\"\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\trules={{\n\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\tvalue: 250,\n\t\t\t\t\t\t\tmessage: t('version.description.maxLength', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Description cannot be longer than 250 characters',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_DESCRIPTION_INPUT}\n\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundleversion.description\">Description</Trans>}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</form>\n\t\t</>\n\t);\n}\n","import {get} from 'lodash';\nimport {useEffect} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleFileMetadata,\n\ttype BundleVersion,\n\tcreateBundleFile,\n\tdeleteBundleFile,\n} from '@deviceinsight/ng-ui-api-client';\n\nimport {FileUploadInput} from 'components/inputs/FileUploadInput';\nimport {useTranslation} from 'i18n';\nimport {createFileUploadAxios} from '../../../../../utils/fileUploadAxios';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../../consts';\nimport {deleteBundleFileError, saveBundleDuplicateFileError, saveBundleFileError} from '../../../translations/errors';\nimport useRequest, {type UseRequestReturnValues} from '../../../utils/useRequest';\nimport {fileColumnDefsWithDelete} from '../../columndefs/fileColumnDefs';\nimport FileList from '../../components/FileList';\nimport VersionSummary from '../../components/VersionSummary';\n\ntype Props = {\n\tbundle: Bundle;\n\tversion: BundleVersion | null | undefined;\n\tfileLoader: UseRequestReturnValues<Array<BundleFileMetadata>>;\n};\nconst DUPLICATE_FILE_NAME_ERROR = 'DUPLICATE_FILE_NAME';\n\nconst VersionWizardFiles = ({\n\tbundle,\n\tversion,\n\tfileLoader: {run: loadFiles, data: files, loading: loadingFiles},\n}: Props) => {\n\tconst {t} = useTranslation();\n\tconst versionId = version ? version.id : '';\n\tconst {run: deleteFile, loading: loadingDelete} = useRequest({\n\t\trequestFunction: deleteBundleFile,\n\t\terrorMessages: [deleteBundleFileError],\n\t});\n\tconst {run: saveFile, loading: loadingSave} = useRequest({\n\t\trequestFunction: createBundleFile,\n\t\terrorMessages: [\n\t\t\t{\n\t\t\t\t...saveBundleDuplicateFileError,\n\t\t\t\tcondition: enhancedError => get(enhancedError, 'response.data.error') === DUPLICATE_FILE_NAME_ERROR,\n\t\t\t},\n\t\t\tsaveBundleFileError,\n\t\t],\n\t});\n\n\tconst reload = () => loadFiles(bundle.id, versionId);\n\n\tconst deleteFileAndReload = (file: BundleFileMetadata) => deleteFile(bundle.id, versionId, file.id).then(reload);\n\n\tconst createFileAndReload = (formData: FormData) =>\n\t\tsaveFile(bundle.id, versionId, formData, createFileUploadAxios()).then(reload);\n\n\tconst columnDefs = fileColumnDefsWithDelete(deleteFileAndReload, t);\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadFiles(bundle.id, versionId);\n\t\t}\n\t}, [loadFiles, versionId, bundle]);\n\treturn (\n\t\t<div className=\"bundle-version\">\n\t\t\t<VersionSummary bundle={bundle} version={version} />\n\t\t\t<FileList\n\t\t\t\tisLoading={loadingDelete || loadingSave || loadingFiles}\n\t\t\t\tfiles={files || []}\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t/>\n\t\t\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.VERSION_FILE_UPLOAD_AREA}>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t}}\n\t\t\t\t\tkey={files ? files.length : 1}\n\t\t\t\t\tonChange={file => {\n\t\t\t\t\t\tif (file) {\n\t\t\t\t\t\t\tconst data = new FormData();\n\t\t\t\t\t\t\tdata.append('file', file);\n\t\t\t\t\t\t\tcreateFileAndReload(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default VersionWizardFiles;\n","import {useEffect} from 'react';\nimport {useForm} from 'react-hook-form';\n\nimport {\n\ttype Bundle,\n\ttype BundleVersionRequest,\n\tcreateBundleVersion,\n\tfetchBundleFiles,\n\tfetchBundleVersion,\n\treleaseBundleVersion,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {modalCloseButton, modalSaveAndProceedButton} from '../translations/buttons';\nimport {\n\tcreateBundleVersionError,\n\tfetchBundleFilesError,\n\tfetchBundleVersionError,\n\treleaseBundleVersionError,\n} from '../translations/errors';\nimport {releaseBundleVersionSuccess} from '../translations/successes';\nimport useRequest from '../utils/useRequest';\nimport VersionWizardModalDetails from './components/wizard/VersionWizardDetails';\nimport VersionWizardModalFiles from './components/wizard/VersionWizardFiles';\n\ntype Props = {\n\tbundle: Bundle;\n\tversionId?: string | null | undefined;\n\tsetVersionId: (versionId: string | null | undefined) => void;\n\tonClose: () => void;\n};\nconst fetchBundleVersionErrorMessages = [fetchBundleVersionError];\nconst fetchBundleFilesErrorMessages = [fetchBundleFilesError];\nconst createBundleVersionErrorMessages = [createBundleVersionError];\nconst releaseBundleVersionErrorMessages = [releaseBundleVersionError];\nconst releaseBundleVersionSuccessMessages = [releaseBundleVersionSuccess];\n\nconst VersionWizardModal = ({bundle, versionId, setVersionId, onClose}: Props) => {\n\tconst formContext = useForm<BundleVersionRequest>({\n\t\tdefaultValues: {\n\t\t\tname: '',\n\t\t\tdescription: '',\n\t\t},\n\t});\n\tconst {handleSubmit} = formContext;\n\n\tconst onSubmit = (bundleVersion: BundleVersionRequest) => {\n\t\treturn createBundleVersion(bundle.id, bundleVersion).then(versionResponse => setVersionId(versionResponse.id));\n\t};\n\n\tconst submit = () => {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t};\n\n\tconst versionCreator = useRequest({\n\t\trequestFunction: submit,\n\t\terrorMessages: createBundleVersionErrorMessages,\n\t});\n\tconst versionPublisher = useRequest({\n\t\trequestFunction: releaseBundleVersion,\n\t\terrorMessages: releaseBundleVersionErrorMessages,\n\t\tsuccessMessages: releaseBundleVersionSuccessMessages,\n\t});\n\tconst versionLoader = useRequest({\n\t\trequestFunction: fetchBundleVersion,\n\t\terrorMessages: fetchBundleVersionErrorMessages,\n\t});\n\tconst fileLoader = useRequest({\n\t\trequestFunction: fetchBundleFiles,\n\t\terrorMessages: fetchBundleFilesErrorMessages,\n\t});\n\tconst {run: loadBundleVersion} = versionLoader;\n\tuseEffect(() => {\n\t\tif (versionId) {\n\t\t\tloadBundleVersion(bundle.id, versionId);\n\t\t}\n\t}, [versionId, loadBundleVersion, bundle]);\n\tconst canPublish = !!(fileLoader.data && fileLoader.data.length);\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={\n\t\t\t\tversionId ? (\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.editversion\">Add Files</Trans>\n\t\t\t\t) : (\n\t\t\t\t\t<Trans i18nKey=\"bundleversion.addversion\">Create new Version</Trans>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer\n\t\t\t\t\tshow={\n\t\t\t\t\t\tversionPublisher.loading ||\n\t\t\t\t\t\t(versionLoader.loading && !versionLoader.data) ||\n\t\t\t\t\t\tversionCreator.loading\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{!versionId ? (\n\t\t\t\t\t\t<VersionWizardModalDetails header={bundle.name} formContext={formContext} onSubmit={submit} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<VersionWizardModalFiles bundle={bundle} version={versionLoader.data} fileLoader={fileLoader} />\n\t\t\t\t\t)}\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\tversionId ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tprimary\n\t\t\t\t\t\t\tonClick={() => versionPublisher.run(bundle.id, versionId || '').then(onClose)}\n\t\t\t\t\t\t\tdisabled={!canPublish || versionPublisher.loading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trans i18nKey=\"bundlemanagement.publish\">Publish</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_VERSION_BUTTON}>\n\t\t\t\t\t\t\t<Trans i18nKey={modalCloseButton.id}>{modalCloseButton.defaultValue}</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tprimary\n\t\t\t\t\t\t\tonClick={versionCreator.run}\n\t\t\t\t\t\t\tdisabled={formContext.formState.isSubmitting || versionCreator.loading}\n\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.SAVE_VERSION_BUTTON}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trans i18nKey={modalSaveAndProceedButton.id}>\n\t\t\t\t\t\t\t\t{modalSaveAndProceedButton.defaultValue}\n\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={onClose} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_VERSION_BUTTON}>\n\t\t\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</>\n\t\t\t\t)\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default VersionWizardModal;\n","import {useEffect, useState} from 'react';\n\nimport {\n\ttype Bundle,\n\ttype BundleVersion,\n\tfetchBundleVersions,\n\ttype Pageable,\n\ttype PaginationSettings,\n} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport useQueryParams from 'hooks/useQueryParams';\nimport {Trans, useTranslation} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS, QUERY_PARAM_BUNDLE_ID, QUERY_PARAM_BUNDLE_VERSION_ID} from '../consts';\nimport {fetchBundleVersionsError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport versionColumnDefs from './columndefs/versionColumnDefs';\nimport DeleteVersionModal from './DeleteVersionModal';\nimport VersionDetailsModal from './VersionDetailsModal';\nimport VersionsList from './VersionsList';\nimport VersionWizardModal from './VersionWizardModal';\n\ntype Props = {\n\tbundle: Bundle;\n\tisOpen: boolean;\n};\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 5,\n\tsort: {\n\t\tproperty: 'createdAt',\n\t\tdirection: 'DESC',\n\t},\n};\nconst loadVersionsErrorMessages = [fetchBundleVersionsError];\n\nconst VersionsContainer = ({bundle, isOpen}: Props) => {\n\tconst {t} = useTranslation();\n\tconst [createVersion, setCreateVersion] = useState(false);\n\tconst [versionToView, setVersionToView] = useState<string | null | undefined>(undefined);\n\tconst [versionToEdit, setVersionToEdit] = useState<string | null | undefined>(undefined);\n\tconst [versionToDelete, setVersionToDelete] = useState<BundleVersion | null | undefined>(undefined);\n\tconst queryParams = useQueryParams();\n\tuseEffect(() => {\n\t\tconst bundleId = queryParams.get(QUERY_PARAM_BUNDLE_ID);\n\t\tconst bundleVersionId = queryParams.get(QUERY_PARAM_BUNDLE_VERSION_ID);\n\n\t\tif (bundleVersionId && bundleId === bundle.id) {\n\t\t\tsetVersionToView(bundleVersionId);\n\t\t}\n\t}, [queryParams, bundle]);\n\tconst columnDefs = versionColumnDefs(\n\t\t{\n\t\t\tonViewDetails: setVersionToView,\n\t\t\tonDelete: setVersionToDelete,\n\t\t\tonEdit: setVersionToEdit,\n\t\t},\n\t\tt,\n\t);\n\tconst [paginationSettings, setPaginationSettings] = useState<PaginationSettings>(INITIAL_PAGINATION_SETTINGS);\n\tconst {\n\t\trun: loadVersions,\n\t\tdata: versions,\n\t\tloading,\n\t} = useRequest<Pageable<BundleVersion> | null | undefined>({\n\t\trequestFunction: fetchBundleVersions,\n\t\terrorMessages: loadVersionsErrorMessages,\n\t});\n\n\tconst reload = () => loadVersions(bundle.id, paginationSettings);\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tloadVersions(bundle.id, paginationSettings);\n\t\t}\n\t}, [isOpen, paginationSettings, loadVersions, bundle]);\n\treturn (\n\t\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.BUNDLE_VERSION_VIEW}>\n\t\t\t<VersionsList\n\t\t\t\tversions={versions}\n\t\t\t\tpaginationSettings={paginationSettings}\n\t\t\t\tsetPaginationSettings={setPaginationSettings}\n\t\t\t\tcolumnDefs={columnDefs}\n\t\t\t\tloading={loading}\n\t\t\t/>\n\t\t\t<HasAuthorities authorities={['WRITE_BUNDLE'] as string[]}>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => setCreateVersion(true)}\n\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_VERSION_BUTTON}\n\t\t\t\t>\n\t\t\t\t\t<Icon add />\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<Trans i18nKey=\"bundleversion.addversion\">Create new version</Trans>\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t</HasAuthorities>\n\t\t\t{versionToDelete && (\n\t\t\t\t<DeleteVersionModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversion={versionToDelete}\n\t\t\t\t\tonCancel={() => setVersionToDelete(undefined)}\n\t\t\t\t\tloadVersions={reload}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{(createVersion || versionToEdit) && (\n\t\t\t\t<VersionWizardModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversionId={versionToEdit}\n\t\t\t\t\tsetVersionId={setVersionToEdit}\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetCreateVersion(false);\n\t\t\t\t\t\tsetVersionToEdit(undefined);\n\t\t\t\t\t\treload();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{versionToView && (\n\t\t\t\t<VersionDetailsModal\n\t\t\t\t\tbundle={bundle}\n\t\t\t\t\tversionId={versionToView}\n\t\t\t\t\tonClose={() => setVersionToView(undefined)}\n\t\t\t\t\tt={t}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default VersionsContainer;\n","import type {Bundle} from '@deviceinsight/ng-ui-api-client';\nimport {AccordionItem, Button, Icon} from '@deviceinsight/ng-ui-basic-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport VersionsContainer from '../versions/VersionsContainer';\n\ntype ItemProps = {\n\tbundle: Bundle;\n\tisOpen?: boolean;\n\tonDelete: (arg0: Bundle | null | undefined) => void;\n};\n\nconst BundleAccordionItem = (props: ItemProps) => {\n\tconst {bundle, onDelete, isOpen} = props;\n\tconst {id, name} = bundle;\n\treturn (\n\t\t<AccordionItem\n\t\t\t{...props}\n\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.ACCORDION_ITEM + id}\n\t\t\ttitle={name}\n\t\t\tkey={id}\n\t\t\ttools={[\n\t\t\t\t<HasAuthorities\n\t\t\t\t\tkey={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\tauthorities={['DELETE_BUNDLE'] as string[]}\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tnaked\n\t\t\t\t\t\tonClick={() => onDelete(bundle)}\n\t\t\t\t\t\ttitle={{\n\t\t\t\t\t\t\tid: 'bundle.delete.title',\n\t\t\t\t\t\t\tdefaultValue: 'Delete this Bundle',\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_BUTTON}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon del large />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>,\n\t\t\t]}\n\t\t>\n\t\t\t<div>\n\t\t\t\t<VersionsContainer bundle={bundle} isOpen={!!isOpen} />\n\t\t\t</div>\n\t\t</AccordionItem>\n\t);\n};\n\nexport default BundleAccordionItem;\n","import type {Bundle} from '@deviceinsight/ng-ui-api-client';\nimport {Accordion, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport useQueryParams from 'hooks/useQueryParams';\nimport {Trans} from 'i18n';\nimport {QUERY_PARAM_BUNDLE_ID} from '../consts';\nimport BundleAccordionItem from './BundleAccordionItem';\n\ntype OwnProps = {\n\tisLoading: boolean;\n\tbundles: Array<Bundle> | null | undefined;\n\tonDelete: (arg0: Bundle | null | undefined) => void;\n};\ntype Props = OwnProps;\n\nconst getOpenBundle = (queryParams: URLSearchParams, bundles: Array<Bundle> | null | undefined) => {\n\tconst bundleId = queryParams.get(QUERY_PARAM_BUNDLE_ID);\n\n\tif (!bundles || !bundles.length || !bundleId) {\n\t\treturn 0;\n\t}\n\n\treturn bundles.reduce((openBundleId, bundle, index) => (bundle.id === bundleId ? index : openBundleId), 0);\n};\n\nconst BundlesAccordion = ({bundles, onDelete, isLoading}: Props) => {\n\tconst queryParams = useQueryParams();\n\tconst openIndex = getOpenBundle(queryParams, bundles);\n\treturn (\n\t\t<SpinnerContainer show={isLoading}>\n\t\t\t<Accordion key={openIndex} accordionClass=\"bundles\" defaultOpenPageIndex={openIndex}>\n\t\t\t\t{(bundles || []).map(bundle => (\n\t\t\t\t\t<BundleAccordionItem key={bundle.name} bundle={bundle} onDelete={onDelete} />\n\t\t\t\t))}\n\t\t\t</Accordion>\n\t\t\t{!isLoading && (!bundles || !bundles.length) && (\n\t\t\t\t<Trans i18nKey=\"bundleManagement.noBundles\">There are currently no bundles</Trans>\n\t\t\t)}\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default BundlesAccordion;\n","import type {Ref} from 'react';\nimport {Controller, useForm} from 'react-hook-form';\n\nimport {type BundleRequest, createBundle} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {messageBoxError, messageBoxSuccess} from '@deviceinsight/ng-ui-components';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\nimport messages from 'i18n/messages';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../consts';\nimport {focus} from '../utils/helpers';\nimport useSubmitOnEnter from '../utils/useSubmitOnEnter';\n\ntype Props = {\n\tloadBundles: () => Promise<any>;\n\tsetOpen: (open: boolean) => void;\n};\n\nconst CreateBundleModal = ({setOpen, loadBundles}: Props) => {\n\tconst {t} = useTranslation();\n\tconst {\n\t\thandleSubmit,\n\t\tcontrol,\n\t\tformState: {isSubmitting},\n\t} = useForm<BundleRequest>({defaultValues: {name: ''}});\n\n\tconst onSubmit = (bundleRequest: BundleRequest): Promise<void> =>\n\t\tcreateBundle(bundleRequest)\n\t\t\t.then(() => {\n\t\t\t\tloadBundles();\n\t\t\t\tsetOpen(false);\n\t\t\t\tmessageBoxSuccess(\n\t\t\t\t\t<Trans i18nKey=\"bundlemanagement.createBundleSuccess\">The bundle was created.</Trans>,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error('bundle creation error', error);\n\t\t\t\tmessageBoxError(<Trans i18nKey=\"bundlemanagement.createBundleError\">Could not save bundle</Trans>);\n\t\t\t});\n\n\tconst submit = () => {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t};\n\n\tuseSubmitOnEnter(submit, false);\n\treturn (\n\t\t<Modal\n\t\t\twidth={400}\n\t\t\theader={<Trans i18nKey=\"bundle.create.title\">Create new Bundle</Trans>}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={isSubmitting} data-testid={BUNDLE_MANAGEMENT_TEST_IDS.CREATE_BUNDLE_DIALOG}>\n\t\t\t\t\t<div className=\"di form\">\n\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\trequired: t('bundleManagement.bundles.name.required', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Name is required',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tmaxLength: {\n\t\t\t\t\t\t\t\t\tvalue: 32,\n\t\t\t\t\t\t\t\t\tmessage: t('bundleManagement.bundles.name.maxLength', {\n\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Name cannot be longer than 32 characters',\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trender={({field: {value, onChange, onBlur}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"bundle.name\">Name</Trans>}\n\t\t\t\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.BUNDLE_NAME_INPUT}\n\t\t\t\t\t\t\t\t\tref={focus as Ref<HTMLInputElement>}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.SAVE_BUNDLE_BUTTON}\n\t\t\t\t\t\tonClick={submit}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey={messages.save.id}>{messages.save.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => setOpen(false)}\n\t\t\t\t\t\tdata-testid={BUNDLE_MANAGEMENT_TEST_IDS.CANCEL_SAVE_BUNDLE_BUTTON}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t/>\n\t);\n};\n\nexport default CreateBundleModal;\n","import {useEffect} from 'react';\n\nimport {type Bundle, fetchBundleVersions} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {BUNDLE_MANAGEMENT_TEST_IDS} from '../../consts';\nimport useRequest from '../../utils/useRequest';\n\ntype Props = {\n\tbundle: Bundle;\n\tcanBeDeleted: boolean;\n\terror: string | null | undefined;\n\tprocessing: boolean;\n};\n\nconst renderErrorContent = (bundleName: string, error: string | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t{error ? (\n\t\t\terror\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBodyError\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tThe bundle <strong>{bundleName}</strong> cannot be deleted.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t</div>\n);\n\nconst renderConfirmContent = (bundleName: string, versionCount: string | null | undefined) => (\n\t<div data-testid={BUNDLE_MANAGEMENT_TEST_IDS.DELETE_BUNDLE_DIALOG}>\n\t\t<p data-testid=\"deleteBundleModalBody1\">\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody1\">\n\t\t\t\t<>\n\t\t\t\t\tDo you really want to delete the bundle <strong>{bundleName}</strong>?\n\t\t\t\t</>\n\t\t\t</Trans>\n\t\t</p>\n\t\t{!!versionCount && versionCount !== '0' && (\n\t\t\t<p data-testid=\"deleteBundleModalBody2\">\n\t\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody2\">\n\t\t\t\t\t<>\n\t\t\t\t\t\tDeleting this bundle will also delete <strong>{versionCount}</strong> version(s) and the\n\t\t\t\t\t\tassociated files.\n\t\t\t\t\t</>\n\t\t\t\t</Trans>\n\t\t\t</p>\n\t\t)}\n\t\t<p data-testid=\"deleteBundleModalBody3\">\n\t\t\t<Trans i18nKey=\"bundlemanagement.deleteBundleModalBody3\">This action cannot be undone.</Trans>\n\t\t</p>\n\t</div>\n);\n\nconst DeleteBundleModalContent = ({bundle, canBeDeleted, error, processing}: Props) => {\n\tconst {\n\t\trun,\n\t\tdata: versions,\n\t\tloading,\n\t} = useRequest({\n\t\trequestFunction: fetchBundleVersions,\n\t});\n\tuseEffect(() => {\n\t\tif (canBeDeleted) {\n\t\t\trun(bundle.id);\n\t\t}\n\t}, [run, bundle, canBeDeleted]);\n\treturn (\n\t\t<SpinnerContainer show={processing || loading}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tminHeight: 50,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!processing &&\n\t\t\t\t\t!loading &&\n\t\t\t\t\t(canBeDeleted\n\t\t\t\t\t\t? renderConfirmContent(bundle.name, versions ? versions.totalElements.toString() : undefined)\n\t\t\t\t\t\t: renderErrorContent(bundle.name, error))}\n\t\t\t</div>\n\t\t</SpinnerContainer>\n\t);\n};\n\nexport default DeleteBundleModalContent;\n","import {type Bundle, deleteBundle} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport {modalCancelButton, modalDeleteButton} from '../translations/buttons';\nimport {deleteBundleModalTitle} from '../translations/confirm';\nimport {deleteBundleError} from '../translations/errors';\nimport {deleteBundleSuccess} from '../translations/successes';\nimport {useCanDeleteBundle} from '../utils/useCanDeleteBundle';\nimport useRequest from '../utils/useRequest';\nimport DeleteBundleModalContent from './components/DeleteBundleModalContent';\n\ntype DeleteProps = {\n\tbundle: Bundle;\n\tonCancel: () => void;\n\tloadBundles: () => Promise<any>;\n};\ntype Props = DeleteProps;\nconst deleteBundleErrorMessages = [deleteBundleError];\nconst deleteBundleSuccessMessages = [deleteBundleSuccess];\n\nconst DeleteBundleModal = ({bundle, onCancel, loadBundles}: Props) => {\n\tconst {run} = useRequest({\n\t\trequestFunction: deleteBundle,\n\t\terrorMessages: deleteBundleErrorMessages,\n\t\tsuccessMessages: deleteBundleSuccessMessages,\n\t});\n\tconst canDeleteProps = useCanDeleteBundle(bundle);\n\n\tconst onAccept = () => run(bundle.id).then(loadBundles).then(onCancel);\n\n\treturn (\n\t\t<Modal\n\t\t\theader={<Trans i18nKey={deleteBundleModalTitle.id}>{deleteBundleModalTitle.defaultValue}</Trans>}\n\t\t\tcontent={<DeleteBundleModalContent bundle={bundle} {...canDeleteProps} />}\n\t\t\tfooter={\n\t\t\t\t<div>\n\t\t\t\t\t<Button primary disabled={!canDeleteProps.canBeDeleted} onClick={onAccept}>\n\t\t\t\t\t\t<Trans i18nKey={modalDeleteButton.id}>{modalDeleteButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t\t<Trans i18nKey={modalCancelButton.id}>{modalCancelButton.defaultValue}</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\twidth={500}\n\t\t/>\n\t);\n};\n\nexport default DeleteBundleModal;\n","import {useEffect, useState} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {type Bundle, fetchAllBundles} from '@deviceinsight/ng-ui-api-client';\nimport {ContentHeader} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport {SidebarElementsCreateButton} from '../../../utils/portalAdminUtils';\nimport {fetchAllBundlesError} from '../translations/errors';\nimport useRequest from '../utils/useRequest';\nimport BundlesAccordion from './BundlesAccordion';\nimport CreateBundleModal from './CreateBundleModal';\nimport DeleteBundleModal from './DeleteBundleModal';\n\nconst fetchAllBundlesErrorMessages = [fetchAllBundlesError];\n\nconst BundlesContainer = () => {\n\tconst location = useLocation();\n\tconst [isOpen, setIsOpen] = useState<boolean>(false);\n\tconst {\n\t\tdata: bundles,\n\t\tloading,\n\t\trun,\n\t} = useRequest<Array<Bundle>>({\n\t\trequestFunction: fetchAllBundles,\n\t\terrorMessages: fetchAllBundlesErrorMessages,\n\t\tinitialData: [],\n\t});\n\tconst [selectedBundle, setSelectedBundle] = useState<Bundle | null | undefined>();\n\tconst tooltip = <Trans i18nKey=\"portalAdmin.sidebarElements.bundles.create\">Create new bundle</Trans>;\n\n\tconst handleOpenModal = () => {\n\t\tsetIsOpen(true);\n\t};\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: should be triggered on location change\n\tuseEffect(() => {\n\t\tsetIsOpen(false);\n\t\trun();\n\t}, [location, run]);\n\treturn (\n\t\t<div className=\"bundles-container\">\n\t\t\t<ContentHeader\n\t\t\t\ttitle={{\n\t\t\t\t\tid: 'route.label.bundleManagement.name',\n\t\t\t\t\tdefaultValue: 'Bundle Management',\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SidebarElementsCreateButton\n\t\t\t\ttooltip={tooltip}\n\t\t\t\tauthorities={'WRITE_BUNDLE'}\n\t\t\t\tdataTestId=\"create-bundle-button\"\n\t\t\t\tonClick={handleOpenModal}\n\t\t\t/>\n\t\t\t<BundlesAccordion bundles={bundles} onDelete={setSelectedBundle} isLoading={loading} />\n\t\t\t{selectedBundle && (\n\t\t\t\t<DeleteBundleModal\n\t\t\t\t\tbundle={selectedBundle}\n\t\t\t\t\tonCancel={() => setSelectedBundle(undefined)}\n\t\t\t\t\tloadBundles={run}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isOpen && <CreateBundleModal loadBundles={run} setOpen={setIsOpen} />}\n\t\t</div>\n\t);\n};\n\nexport default BundlesContainer;\n"],"names":["fetchAllBundlesError","deleteBundleError","fetchBundleVersionError","fetchBundleFilesError","downloadBundleFileError","deleteBundleVersionError","releaseBundleVersionError","createBundleVersionError","fetchBundleVersionsError","deleteBundleFileError","saveBundleDuplicateFileError","saveBundleFileError","showConditionalMessage","messages","messageBox","response","message","Trans","useRequest","requestFunction","errorMessages","successMessages","initialData","data","setData","useState","loading","setLoading","error","setError","mountedRef","useRef","run","useCallback","args","messageBoxSuccess","err","messageBoxError","useEffect","formatDateTime","value","jsx","formatTimestamp","versionColumnDefs","onViewDetails","onDelete","onEdit","t","version","ev","description","fileCount","draft","createdAt","releasedAt","HasAuthorities","jsxs","Fragment","Button","BUNDLE_MANAGEMENT_TEST_IDS","Icon","modalCloseButton","modalDeleteButton","modalCancelButton","modalSaveAndProceedButton","deleteBundleVersionModalTitle","deleteBundleModalTitle","deleteBundleSuccess","deleteBundleVersionSuccess","releaseBundleVersionSuccess","renderErrorContent","versionName","renderConfirmContent","DeleteVersionModalContent","canBeDeleted","processing","SpinnerContainer","DeleteVersionModal","bundle","onCancel","loadVersions","deleteBundleVersion","canDeleteProps","useCanDeleteBundleVersion","onAccept","Modal","BASE_FILE_COLUMN_DEFS","name","size","fileColumnDefsWithDelete","removeFile","file","fileColumnDefsWithDownload","downloadFile","CountLabel","count","Label","PAGINATION_SETTINGS","FileList","files","columnDefs","isLoading","ReactableWithClientSidePagination","item","VersionSummary","loadVersionErrorMessages","loadFilesErrorMessages","VersionDetailsModal","versionId","onClose","loadVersion","detailVersion","loadingFetch","fetchBundleVersion","loadFiles","versionFiles","loadingFiles","fetchBundleFiles","downloadingFile","downloadBundleFile","sas","rowDef","VersionsList","paginationSettings","setPaginationSettings","versions","Reactable","page","property","direction","focus","ref","useSubmitOnEnter","submitFunction","disabled","listener","event","VERSION_PATTERN","VersionWizardDetails","header","formContext","onSubmit","useTranslation","control","Controller","onChange","onBlur","TextInput","DUPLICATE_FILE_NAME_ERROR","VersionWizardFiles","deleteFile","loadingDelete","deleteBundleFile","saveFile","loadingSave","createBundleFile","enhancedError","get","reload","deleteFileAndReload","createFileAndReload","formData","createFileUploadAxios","FileUploadInput","fetchBundleVersionErrorMessages","fetchBundleFilesErrorMessages","createBundleVersionErrorMessages","releaseBundleVersionErrorMessages","releaseBundleVersionSuccessMessages","VersionWizardModal","setVersionId","useForm","handleSubmit","bundleVersion","createBundleVersion","versionResponse","submit","errors","versionCreator","versionPublisher","releaseBundleVersion","versionLoader","fileLoader","loadBundleVersion","canPublish","VersionWizardModalFiles","VersionWizardModalDetails","INITIAL_PAGINATION_SETTINGS","loadVersionsErrorMessages","VersionsContainer","isOpen","createVersion","setCreateVersion","versionToView","setVersionToView","versionToEdit","setVersionToEdit","versionToDelete","setVersionToDelete","queryParams","useQueryParams","bundleId","QUERY_PARAM_BUNDLE_ID","bundleVersionId","QUERY_PARAM_BUNDLE_VERSION_ID","fetchBundleVersions","BundleAccordionItem","props","id","createElement","AccordionItem","getOpenBundle","bundles","openBundleId","index","BundlesAccordion","openIndex","Accordion","CreateBundleModal","setOpen","loadBundles","isSubmitting","bundleRequest","createBundle","bundleName","versionCount","DeleteBundleModalContent","deleteBundleErrorMessages","deleteBundleSuccessMessages","DeleteBundleModal","deleteBundle","useCanDeleteBundle","fetchAllBundlesErrorMessages","BundlesContainer","location","useLocation","setIsOpen","fetchAllBundles","selectedBundle","setSelectedBundle","tooltip","handleOpenModal","ContentHeader","SidebarElementsCreateButton"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsxs as f, jsx as n, Fragment as E } from "react/jsx-runtime";
|
|
2
2
|
import { saveAs as O } from "file-saver";
|
|
3
|
-
import { PureComponent as L, useState as D, useEffect as w, createContext as
|
|
3
|
+
import { PureComponent as L, useState as D, useEffect as w, createContext as v, useContext as b } from "react";
|
|
4
4
|
import { Spinner as z, Button as C, Icon as R, Bubble as F } from "@deviceinsight/ng-ui-basic-components";
|
|
5
5
|
import { ReactableWithClientSidePagination as M, FileUpload as x } from "@deviceinsight/ng-ui-components";
|
|
6
6
|
import "react-i18next";
|
|
7
|
-
import {
|
|
7
|
+
import { Z as K, a as d, cc as G, a8 as B } from "./setTitle-Dij-z9p9.js";
|
|
8
8
|
import { fetchUnits as q, readAccountObject as j, writeAccountObject as k } from "@deviceinsight/ng-ui-api-client";
|
|
9
9
|
import * as H from "papaparse";
|
|
10
10
|
const W = (t, e, a) => a.findIndex((o) => o?.name === t?.name) === e, Y = async (t, e, a) => {
|
|
@@ -49,7 +49,7 @@ const $ = {
|
|
|
49
49
|
}, J = (t, e, a) => {
|
|
50
50
|
const o = e.direction === "ASC" ? 1 : -1;
|
|
51
51
|
return e.property === "index" ? t.sort((i, r) => o * (i.idx - r.idx)) : a(t, e);
|
|
52
|
-
},
|
|
52
|
+
}, Z = [
|
|
53
53
|
{
|
|
54
54
|
name: "index",
|
|
55
55
|
label: "",
|
|
@@ -86,7 +86,7 @@ const $ = {
|
|
|
86
86
|
render: (t) => t.error || ""
|
|
87
87
|
}
|
|
88
88
|
];
|
|
89
|
-
class
|
|
89
|
+
class Q extends L {
|
|
90
90
|
constructor(e) {
|
|
91
91
|
super(e), this._isMounted = !1, this.state = {
|
|
92
92
|
rowUploadStates: {},
|
|
@@ -137,13 +137,13 @@ class Z extends L {
|
|
|
137
137
|
{
|
|
138
138
|
rowUploadStates: { ...o, [e]: a }
|
|
139
139
|
},
|
|
140
|
-
() => this.createDatapoint(e + 1)
|
|
140
|
+
() => setTimeout(() => this.createDatapoint(e + 1), 0)
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
143
|
getColumnDefs() {
|
|
144
144
|
const { rowUploadStates: e } = this.state;
|
|
145
145
|
return [
|
|
146
|
-
...
|
|
146
|
+
...Z,
|
|
147
147
|
{
|
|
148
148
|
name: "result",
|
|
149
149
|
label: "",
|
|
@@ -212,7 +212,7 @@ const tt = [
|
|
|
212
212
|
a(o);
|
|
213
213
|
}
|
|
214
214
|
});
|
|
215
|
-
}), T =
|
|
215
|
+
}), T = v({
|
|
216
216
|
pageSize: 10,
|
|
217
217
|
onPageSizeChange: () => {
|
|
218
218
|
}
|
|
@@ -233,7 +233,7 @@ function mt(t) {
|
|
|
233
233
|
return /* @__PURE__ */ n(ot, { children: /* @__PURE__ */ n(it, { ...t }) });
|
|
234
234
|
}
|
|
235
235
|
function it({ existingUnits: t, onChangeUploadStatus: e, createDatapoint: a, addUnit: o }) {
|
|
236
|
-
const [i, r] = D([]), [l, s] = D(null), { pageSize: h, onPageSizeChange: m } =
|
|
236
|
+
const [i, r] = D([]), [l, s] = D(null), { pageSize: h, onPageSizeChange: m } = b(T), [p, S] = D(!1);
|
|
237
237
|
function I() {
|
|
238
238
|
r([]), s(null);
|
|
239
239
|
}
|
|
@@ -275,7 +275,7 @@ function it({ existingUnits: t, onChangeUploadStatus: e, createDatapoint: a, add
|
|
|
275
275
|
/* @__PURE__ */ n("label", { className: "csv-upload-info", children: /* @__PURE__ */ n(F, { content: /* @__PURE__ */ n(V, {}), children: /* @__PURE__ */ n("span", { className: "upload-anchor", children: " ?" }) }) })
|
|
276
276
|
] }),
|
|
277
277
|
/* @__PURE__ */ n("div", { className: "datapoint-import-section", children: /* @__PURE__ */ n(
|
|
278
|
-
|
|
278
|
+
Q,
|
|
279
279
|
{
|
|
280
280
|
onRowComplete: U,
|
|
281
281
|
data: i,
|
|
@@ -290,4 +290,4 @@ function it({ existingUnits: t, onChangeUploadStatus: e, createDatapoint: a, add
|
|
|
290
290
|
export {
|
|
291
291
|
mt as default
|
|
292
292
|
};
|
|
293
|
-
//# sourceMappingURL=DatapointImport-
|
|
293
|
+
//# sourceMappingURL=DatapointImport-Cyt0hdP-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatapointImport-Cyt0hdP-.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: 'BOOLEAN', 'DOUBLE',\n\t\t\t\t\t\t\t'LONG', 'TEXT', 'GEO_POSITION'\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 "," 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() => setTimeout(() => this.createDatapoint(idx + 1), 0),\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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"}
|