@deviceinsight/ng-ui-scale-lib 10.0.1 → 10.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/{AccessEditModal-CcR8UUJ1.js → AccessEditModal-CjEK65sa.js} +2 -2
  2. package/dist/{AccessEditModal-CcR8UUJ1.js.map → AccessEditModal-CjEK65sa.js.map} +1 -1
  3. package/dist/{BundleManagementContainer--zLnsGKr.js → BundleManagementContainer-BZCvpaia.js} +2 -2
  4. package/dist/{BundleManagementContainer--zLnsGKr.js.map → BundleManagementContainer-BZCvpaia.js.map} +1 -1
  5. package/dist/{BundlesContainer-Cjb66440.js → BundlesContainer-Cw5tsxud.js} +3 -3
  6. package/dist/{BundlesContainer-Cjb66440.js.map → BundlesContainer-Cw5tsxud.js.map} +1 -1
  7. package/dist/{DatapointImport-D00OnAV4.js → DatapointImport-BKY0WjJg.js} +2 -2
  8. package/dist/{DatapointImport-D00OnAV4.js.map → DatapointImport-BKY0WjJg.js.map} +1 -1
  9. package/dist/{FileUploadInput-DfeELXM6.js → FileUploadInput-CRoj6JoP.js} +2 -2
  10. package/dist/{FileUploadInput-DfeELXM6.js.map → FileUploadInput-CRoj6JoP.js.map} +1 -1
  11. package/dist/{Files-jXxYNeMa.js → Files-CTEePnE-.js} +3 -3
  12. package/dist/{Files-jXxYNeMa.js.map → Files-CTEePnE-.js.map} +1 -1
  13. package/dist/{GlobalPowerBiReports-DANUj2j5.js → GlobalPowerBiReports-BVppDmrb.js} +2 -2
  14. package/dist/{GlobalPowerBiReports-DANUj2j5.js.map → GlobalPowerBiReports-BVppDmrb.js.map} +1 -1
  15. package/dist/{JsonSettingWidget-DE1lID1f.js → JsonSettingWidget-C_vFKnwZ.js} +2 -2
  16. package/dist/{JsonSettingWidget-DE1lID1f.js.map → JsonSettingWidget-C_vFKnwZ.js.map} +1 -1
  17. package/dist/{LicensesEditPage-PbKGjtzy.js → LicensesEditPage-CRkRSJVF.js} +2 -2
  18. package/dist/{LicensesEditPage-PbKGjtzy.js.map → LicensesEditPage-CRkRSJVF.js.map} +1 -1
  19. package/dist/{LicensesList-CxQ5TtrL.js → LicensesList-pAC4BDt7.js} +2 -2
  20. package/dist/{LicensesList-CxQ5TtrL.js.map → LicensesList-pAC4BDt7.js.map} +1 -1
  21. package/dist/{PropertiesEditPage-DpRwYhiU.js → PropertiesEditPage-w4A8Rdg9.js} +2 -2
  22. package/dist/{PropertiesEditPage-DpRwYhiU.js.map → PropertiesEditPage-w4A8Rdg9.js.map} +1 -1
  23. package/dist/{PropertiesList-DI0mfPLo.js → PropertiesList-C3bVuRua.js} +2 -2
  24. package/dist/{PropertiesList-DI0mfPLo.js.map → PropertiesList-C3bVuRua.js.map} +1 -1
  25. package/dist/{TemplateEditPage-BzoiAhuZ.js → TemplateEditPage-D42Eb3Z2.js} +4 -4
  26. package/dist/{TemplateEditPage-BzoiAhuZ.js.map → TemplateEditPage-D42Eb3Z2.js.map} +1 -1
  27. package/dist/{TemplateTextInput-CWPLnhST.js → TemplateTextInput-aB48gOIi.js} +2 -2
  28. package/dist/{TemplateTextInput-CWPLnhST.js.map → TemplateTextInput-aB48gOIi.js.map} +1 -1
  29. package/dist/{TemplatesListPage-BbDysOaR.js → TemplatesListPage-usJXXAnS.js} +3 -3
  30. package/dist/{TemplatesListPage-BbDysOaR.js.map → TemplatesListPage-usJXXAnS.js.map} +1 -1
  31. package/dist/{UserGroupAssignments-D4LC_sIB.js → UserGroupAssignments-BY2ThquP.js} +2 -2
  32. package/dist/{UserGroupAssignments-D4LC_sIB.js.map → UserGroupAssignments-BY2ThquP.js.map} +1 -1
  33. package/dist/{UserGroupTheme-Mfh7WwKs.js → UserGroupTheme-DeSyuYfg.js} +2 -2
  34. package/dist/{UserGroupTheme-Mfh7WwKs.js.map → UserGroupTheme-DeSyuYfg.js.map} +1 -1
  35. package/dist/api.js +2 -2
  36. package/dist/index.js +2 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/{setTitle-BkLWezzi.js → setTitle-C2aZzr0p.js} +25 -22
  39. package/dist/setTitle-C2aZzr0p.js.map +1 -0
  40. package/package.json +2 -2
  41. package/dist/setTitle-BkLWezzi.js.map +0 -1
@@ -3,7 +3,7 @@ import { useState as f, useContext as U } from "react";
3
3
  import { searchUserGroups as I } from "@deviceinsight/ng-ui-api-client";
4
4
  import { Modal as x, Button as G, SpinnerContainer as b } from "@deviceinsight/ng-ui-basic-components";
5
5
  import { InfoBox as O } from "@deviceinsight/ng-ui-components";
6
- import { y as _, u as k, r as E, a as r, b6 as F, c1 as K, bU as M, c2 as W, k as L, c3 as S } from "./setTitle-BkLWezzi.js";
6
+ import { y as _, u as k, r as E, a as r, b6 as F, c1 as K, bU as M, c2 as W, k as L, c3 as S } from "./setTitle-C2aZzr0p.js";
7
7
  const N = "usergroupsWithoutAccessToTemplate";
8
8
  function v(t) {
9
9
  return {
@@ -87,4 +87,4 @@ function D({ onSave: t, onCancel: o, loading: s, template: n }) {
87
87
  export {
88
88
  D as A
89
89
  };
90
- //# sourceMappingURL=AccessEditModal-CcR8UUJ1.js.map
90
+ //# sourceMappingURL=AccessEditModal-CjEK65sa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccessEditModal-CcR8UUJ1.js","sources":["../ng-ui-scale/src/modules/templates/templateForm/AccessEditModal.tsx"],"sourcesContent":["import {useContext, useState} from 'react';\n\nimport {type NotificationTemplate, searchUserGroups, type UserGroup} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {InfoBox} from '@deviceinsight/ng-ui-components';\n\nimport warning_icon from 'assets/svg/icon_warning_triangle.svg';\nimport BulkSelectFilterTable from 'components/filtertable/BulkSelectFilterTable';\nimport Checkbox from 'components/inputs/checkbox/Checkbox';\nimport {getColumnDefs} from 'components/reactable/commonColumnDefs/usergroups';\nimport {UserContext} from 'contexts/user/UserContext';\nimport {Trans, useTranslation} from 'i18n';\nimport {userGroupFields} from 'modules/contextSearch/fields';\nimport {buildIdSearchClosure} from 'modules/contextSearch/searchExpressionHelper';\n// import {userGroupFields} from 'modules/search/fields';\n// import {SearchConfig} from 'modules/search/types';\nimport type {SearchConfig} from 'modules/contextSearch/types';\n// import {buildIdSearchClosure} from 'modules/search/searchExpressionHelper';\nimport {hasAuthorities} from 'utils/hasAuthorities';\n\nconst SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS = 'usergroupsWithoutAccessToTemplate';\n\ntype Props = {\n\tonSave: (accountGroupIds: number[], template?: NotificationTemplate) => Promise<void> | void;\n\tonCancel: () => void;\n\tloading: boolean;\n\ttemplate?: NotificationTemplate;\n};\n\nfunction getSearchConfig(queryModifier: (arg0: string) => string): SearchConfig<UserGroup> {\n\treturn {\n\t\tfields: userGroupFields,\n\t\tsearch: (query, paginationSettings) => searchUserGroups(queryModifier(query), paginationSettings),\n\t};\n}\n\nfunction buildSearchQuery(excludedIds: number[], availableIds: number[] | null) {\n\tif (!availableIds) {\n\t\treturn buildIdSearchClosure(excludedIds, true);\n\t}\n\n\treturn buildIdSearchClosure(\n\t\tavailableIds.filter(id => !excludedIds.includes(id)),\n\t\tfalse,\n\t);\n}\n\nfunction AccessEditModal({onSave, onCancel, loading, template}: Props) {\n\tconst [selectedUserGroupIds, setSelectedUserGroupIds] = useState<number[]>([]);\n\tconst [showMyGroups, setShowMyGroups] = useState(true);\n\tconst {user} = useContext(UserContext);\n\tconst accountGroupsWithAccess = (template && template.accountGroupsWithAccess) || [];\n\tconst userGroupIdsFilter = showMyGroups ? (user.accountGroupIds ?? []) : null;\n\n\tconst {t} = useTranslation();\n\tconst hasAccessToAllTemplates = hasAuthorities(['ACCESS_TO_ALL_NOTIFICATION_TEMPLATES'] as string[]);\n\tconst currentTemplateUserGroupIds = template?.accountGroupsWithAccess ?? [];\n\tconst isOwnUserGroupSelected = [...selectedUserGroupIds, ...currentTemplateUserGroupIds].some(id =>\n\t\tuser.accountGroupIds.includes(id),\n\t);\n\n\tconst disabled = (!hasAccessToAllTemplates && !isOwnUserGroupSelected) || loading;\n\treturn (\n\t\t<Modal\n\t\t\tonOutsideClick={onCancel}\n\t\t\theader={\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.modal.title\">\n\t\t\t\t\tAuthorize User Groups to access this template\n\t\t\t\t</Trans>\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={loading}>\n\t\t\t\t\t<h2>{<Trans i18nKey=\"notificationTemplate.access.modal.headline\">Add User Groups</Trans>}</h2>\n\t\t\t\t\t{!hasAccessToAllTemplates && !isOwnUserGroupSelected && (\n\t\t\t\t\t\t<InfoBox\n\t\t\t\t\t\t\ttype=\"warning\"\n\t\t\t\t\t\t\ticon={warning_icon}\n\t\t\t\t\t\t\tmessage={t('notificationTemplate.access.modal.ownUserGroupRequired', {\n\t\t\t\t\t\t\t\tdefaultValue:\n\t\t\t\t\t\t\t\t\t'You have to at least select one of your own groups, to not lose access to the notification template.',\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\t<BulkSelectFilterTable\n\t\t\t\t\t\tkey={showMyGroups ? 'withUserGroupFilter' : 'withoutUserGroupFilter'}\n\t\t\t\t\t\tsearchContext={SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS}\n\t\t\t\t\t\tsearchConfig={getSearchConfig(buildSearchQuery(accountGroupsWithAccess, userGroupIdsFilter))}\n\t\t\t\t\t\tcolumnDefinitions={getColumnDefs(true)}\n\t\t\t\t\t\tuniqueItemKey={accountGroup => accountGroup.id}\n\t\t\t\t\t\tpageSize={5}\n\t\t\t\t\t\tonSelectSome={setSelectedUserGroupIds}\n\t\t\t\t\t\textraHeaderComponent={() => (\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\tmarginLeft: '50px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={showMyGroups}\n\t\t\t\t\t\t\t\tonChange={setShowMyGroups}\n\t\t\t\t\t\t\t\tlabel={t('notificationTemplate.access.modal.showOnlyMyGroups', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Show only my groups',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\thorizontal\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tsearchInputScope=\"notification-template-access-modal\"\n\t\t\t\t\t\ttableName=\"notification-template-access-modal-table\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.modal.note\">\n\t\t\t\t\t\tPlease select User Groups to authorise them to access and work with this template.\n\t\t\t\t\t</Trans>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={() => onSave([...accountGroupsWithAccess, ...selectedUserGroupIds], template)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.save\">Save</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=\"general.actions.cancel\">Cancel</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport default AccessEditModal;\n"],"names":["SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS","getSearchConfig","queryModifier","userGroupFields","query","paginationSettings","searchUserGroups","buildSearchQuery","excludedIds","availableIds","buildIdSearchClosure","id","AccessEditModal","onSave","onCancel","loading","template","selectedUserGroupIds","setSelectedUserGroupIds","useState","showMyGroups","setShowMyGroups","user","useContext","UserContext","accountGroupsWithAccess","userGroupIdsFilter","t","useTranslation","hasAccessToAllTemplates","hasAuthorities","currentTemplateUserGroupIds","isOwnUserGroupSelected","disabled","jsx","Modal","Trans","jsxs","SpinnerContainer","InfoBox","warning_icon","BulkSelectFilterTable","getColumnDefs","accountGroup","Checkbox","Fragment","Button"],"mappings":"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"}
1
+ {"version":3,"file":"AccessEditModal-CjEK65sa.js","sources":["../ng-ui-scale/src/modules/templates/templateForm/AccessEditModal.tsx"],"sourcesContent":["import {useContext, useState} from 'react';\n\nimport {type NotificationTemplate, searchUserGroups, type UserGroup} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {InfoBox} from '@deviceinsight/ng-ui-components';\n\nimport warning_icon from 'assets/svg/icon_warning_triangle.svg';\nimport BulkSelectFilterTable from 'components/filtertable/BulkSelectFilterTable';\nimport Checkbox from 'components/inputs/checkbox/Checkbox';\nimport {getColumnDefs} from 'components/reactable/commonColumnDefs/usergroups';\nimport {UserContext} from 'contexts/user/UserContext';\nimport {Trans, useTranslation} from 'i18n';\nimport {userGroupFields} from 'modules/contextSearch/fields';\nimport {buildIdSearchClosure} from 'modules/contextSearch/searchExpressionHelper';\n// import {userGroupFields} from 'modules/search/fields';\n// import {SearchConfig} from 'modules/search/types';\nimport type {SearchConfig} from 'modules/contextSearch/types';\n// import {buildIdSearchClosure} from 'modules/search/searchExpressionHelper';\nimport {hasAuthorities} from 'utils/hasAuthorities';\n\nconst SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS = 'usergroupsWithoutAccessToTemplate';\n\ntype Props = {\n\tonSave: (accountGroupIds: number[], template?: NotificationTemplate) => Promise<void> | void;\n\tonCancel: () => void;\n\tloading: boolean;\n\ttemplate?: NotificationTemplate;\n};\n\nfunction getSearchConfig(queryModifier: (arg0: string) => string): SearchConfig<UserGroup> {\n\treturn {\n\t\tfields: userGroupFields,\n\t\tsearch: (query, paginationSettings) => searchUserGroups(queryModifier(query), paginationSettings),\n\t};\n}\n\nfunction buildSearchQuery(excludedIds: number[], availableIds: number[] | null) {\n\tif (!availableIds) {\n\t\treturn buildIdSearchClosure(excludedIds, true);\n\t}\n\n\treturn buildIdSearchClosure(\n\t\tavailableIds.filter(id => !excludedIds.includes(id)),\n\t\tfalse,\n\t);\n}\n\nfunction AccessEditModal({onSave, onCancel, loading, template}: Props) {\n\tconst [selectedUserGroupIds, setSelectedUserGroupIds] = useState<number[]>([]);\n\tconst [showMyGroups, setShowMyGroups] = useState(true);\n\tconst {user} = useContext(UserContext);\n\tconst accountGroupsWithAccess = (template && template.accountGroupsWithAccess) || [];\n\tconst userGroupIdsFilter = showMyGroups ? (user.accountGroupIds ?? []) : null;\n\n\tconst {t} = useTranslation();\n\tconst hasAccessToAllTemplates = hasAuthorities(['ACCESS_TO_ALL_NOTIFICATION_TEMPLATES'] as string[]);\n\tconst currentTemplateUserGroupIds = template?.accountGroupsWithAccess ?? [];\n\tconst isOwnUserGroupSelected = [...selectedUserGroupIds, ...currentTemplateUserGroupIds].some(id =>\n\t\tuser.accountGroupIds.includes(id),\n\t);\n\n\tconst disabled = (!hasAccessToAllTemplates && !isOwnUserGroupSelected) || loading;\n\treturn (\n\t\t<Modal\n\t\t\tonOutsideClick={onCancel}\n\t\t\theader={\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.modal.title\">\n\t\t\t\t\tAuthorize User Groups to access this template\n\t\t\t\t</Trans>\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<SpinnerContainer show={loading}>\n\t\t\t\t\t<h2>{<Trans i18nKey=\"notificationTemplate.access.modal.headline\">Add User Groups</Trans>}</h2>\n\t\t\t\t\t{!hasAccessToAllTemplates && !isOwnUserGroupSelected && (\n\t\t\t\t\t\t<InfoBox\n\t\t\t\t\t\t\ttype=\"warning\"\n\t\t\t\t\t\t\ticon={warning_icon}\n\t\t\t\t\t\t\tmessage={t('notificationTemplate.access.modal.ownUserGroupRequired', {\n\t\t\t\t\t\t\t\tdefaultValue:\n\t\t\t\t\t\t\t\t\t'You have to at least select one of your own groups, to not lose access to the notification template.',\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\t<BulkSelectFilterTable\n\t\t\t\t\t\tkey={showMyGroups ? 'withUserGroupFilter' : 'withoutUserGroupFilter'}\n\t\t\t\t\t\tsearchContext={SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS}\n\t\t\t\t\t\tsearchConfig={getSearchConfig(buildSearchQuery(accountGroupsWithAccess, userGroupIdsFilter))}\n\t\t\t\t\t\tcolumnDefinitions={getColumnDefs(true)}\n\t\t\t\t\t\tuniqueItemKey={accountGroup => accountGroup.id}\n\t\t\t\t\t\tpageSize={5}\n\t\t\t\t\t\tonSelectSome={setSelectedUserGroupIds}\n\t\t\t\t\t\textraHeaderComponent={() => (\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\tmarginLeft: '50px',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={showMyGroups}\n\t\t\t\t\t\t\t\tonChange={setShowMyGroups}\n\t\t\t\t\t\t\t\tlabel={t('notificationTemplate.access.modal.showOnlyMyGroups', {\n\t\t\t\t\t\t\t\t\tdefaultValue: 'Show only my groups',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\thorizontal\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tsearchInputScope=\"notification-template-access-modal\"\n\t\t\t\t\t\ttableName=\"notification-template-access-modal-table\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.modal.note\">\n\t\t\t\t\t\tPlease select User Groups to authorise them to access and work with this template.\n\t\t\t\t\t</Trans>\n\t\t\t\t</SpinnerContainer>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={() => onSave([...accountGroupsWithAccess, ...selectedUserGroupIds], template)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.save\">Save</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=\"general.actions.cancel\">Cancel</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport default AccessEditModal;\n"],"names":["SEARCH_CONTEXT_GROUPS_WITHOUT_ACCESS","getSearchConfig","queryModifier","userGroupFields","query","paginationSettings","searchUserGroups","buildSearchQuery","excludedIds","availableIds","buildIdSearchClosure","id","AccessEditModal","onSave","onCancel","loading","template","selectedUserGroupIds","setSelectedUserGroupIds","useState","showMyGroups","setShowMyGroups","user","useContext","UserContext","accountGroupsWithAccess","userGroupIdsFilter","t","useTranslation","hasAccessToAllTemplates","hasAuthorities","currentTemplateUserGroupIds","isOwnUserGroupSelected","disabled","jsx","Modal","Trans","jsxs","SpinnerContainer","InfoBox","warning_icon","BulkSelectFilterTable","getColumnDefs","accountGroup","Checkbox","Fragment","Button"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx as n } from "react/jsx-runtime";
2
2
  import { useContext as r, useEffect as m } from "react";
3
3
  import { useLocation as s } from "react-router-dom";
4
4
  import { messageBoxDismissGroup as a } from "@deviceinsight/ng-ui-components";
5
- import { aC as f } from "./setTitle-BkLWezzi.js";
5
+ import { aC as f } from "./setTitle-C2aZzr0p.js";
6
6
  import { M as i } from "./consts-CZ_QkIyI.js";
7
7
  function D({ children: t }) {
8
8
  const { setContextInfo: o } = r(f), { pathname: e } = s();
@@ -13,4 +13,4 @@ function D({ children: t }) {
13
13
  export {
14
14
  D as default
15
15
  };
16
- //# sourceMappingURL=BundleManagementContainer--zLnsGKr.js.map
16
+ //# sourceMappingURL=BundleManagementContainer-BZCvpaia.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BundleManagementContainer--zLnsGKr.js","sources":["../ng-ui-scale/src/modules/bundleManagement/BundleManagementContainer.tsx"],"sourcesContent":["import {type ReactNode, useContext, useEffect} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {messageBoxDismissGroup} from '@deviceinsight/ng-ui-components';\n\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport './bundleManagement.scss';\n\nimport {MODULE_ID} from './consts';\n\ntype Props = {\n\tchildren: ReactNode;\n};\nexport default function BundleManagementContainer({children}: Props) {\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst {pathname} = useLocation();\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: TODO\n\tuseEffect(() => {\n\t\tsetContextInfo();\n\t\treturn () => {\n\t\t\tmessageBoxDismissGroup(MODULE_ID);\n\t\t\tsetContextInfo();\n\t\t};\n\t}, [pathname, setContextInfo]);\n\treturn <div>{children}</div>;\n}\n"],"names":["BundleManagementContainer","children","setContextInfo","useContext","ContextInfoContext","pathname","useLocation","useEffect","messageBoxDismissGroup","MODULE_ID","jsx"],"mappings":";;;;;;AAaA,SAAwBA,EAA0B,EAAC,UAAAC,KAAkB;AACpE,QAAM,EAAC,gBAAAC,EAAA,IAAkBC,EAAWC,CAAkB,GAChD,EAAC,UAAAC,EAAA,IAAYC,EAAA;AAEnB,SAAAC,EAAU,OACTL,EAAA,GACO,MAAM;AACZ,IAAAM,EAAuBC,CAAS,GAChCP,EAAA;AAAA,EACD,IACE,CAACG,GAAUH,CAAc,CAAC,GACtB,gBAAAQ,EAAC,SAAK,UAAAT,GAAS;AACvB;"}
1
+ {"version":3,"file":"BundleManagementContainer-BZCvpaia.js","sources":["../ng-ui-scale/src/modules/bundleManagement/BundleManagementContainer.tsx"],"sourcesContent":["import {type ReactNode, useContext, useEffect} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {messageBoxDismissGroup} from '@deviceinsight/ng-ui-components';\n\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport './bundleManagement.scss';\n\nimport {MODULE_ID} from './consts';\n\ntype Props = {\n\tchildren: ReactNode;\n};\nexport default function BundleManagementContainer({children}: Props) {\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst {pathname} = useLocation();\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: TODO\n\tuseEffect(() => {\n\t\tsetContextInfo();\n\t\treturn () => {\n\t\t\tmessageBoxDismissGroup(MODULE_ID);\n\t\t\tsetContextInfo();\n\t\t};\n\t}, [pathname, setContextInfo]);\n\treturn <div>{children}</div>;\n}\n"],"names":["BundleManagementContainer","children","setContextInfo","useContext","ContextInfoContext","pathname","useLocation","useEffect","messageBoxDismissGroup","MODULE_ID","jsx"],"mappings":";;;;;;AAaA,SAAwBA,EAA0B,EAAC,UAAAC,KAAkB;AACpE,QAAM,EAAC,gBAAAC,EAAA,IAAkBC,EAAWC,CAAkB,GAChD,EAAC,UAAAC,EAAA,IAAYC,EAAA;AAEnB,SAAAC,EAAU,OACTL,EAAA,GACO,MAAM;AACZ,IAAAM,EAAuBC,CAAS,GAChCP,EAAA;AAAA,EACD,IACE,CAACG,GAAUH,CAAc,CAAC,GACtB,gBAAAQ,EAAC,SAAK,UAAAT,GAAS;AACvB;"}
@@ -4,13 +4,13 @@ import { useLocation as ue } from "react-router-dom";
4
4
  import { deleteBundleVersion as he, fetchBundleVersion as z, fetchBundleFiles as W, downloadBundleFile as me, deleteBundleFile as fe, createBundleFile as Ee, releaseBundleVersion as Be, createBundleVersion as be, fetchBundleVersions as $, createBundle as ge, deleteBundle as Ve, fetchAllBundles as De } from "@deviceinsight/ng-ui-api-client";
5
5
  import { messageBoxSuccess as H, messageBoxError as Q, ReactableWithClientSidePagination as Ne, Reactable as Te, ContentHeader as ve } from "@deviceinsight/ng-ui-components";
6
6
  import "react-i18next";
7
- import { a, am as K, a8 as _e, u as w, P as O, ca as ye, bZ as p, bf as j, bM as pe } from "./setTitle-BkLWezzi.js";
7
+ import { a, am as K, a8 as _e, u as w, P as O, ca as ye, bZ as p, bf as j, bM as pe } from "./setTitle-C2aZzr0p.js";
8
8
  import { Button as B, Icon as C, SpinnerContainer as y, Modal as L, Label as Ce, AccordionItem as Le, Accordion as Se } from "@deviceinsight/ng-ui-basic-components";
9
9
  import { B as c, Q as Y, a as Ae } from "./consts-CZ_QkIyI.js";
10
10
  import { u as Ie, b as Me } from "./useCanDeleteBundleVersion-CUD1pDJ0.js";
11
11
  import { Controller as F, useForm as Z } from "react-hook-form";
12
12
  import { get as we } from "lodash";
13
- import { F as Oe } from "./FileUploadInput-DfeELXM6.js";
13
+ import { F as Oe } from "./FileUploadInput-CRoj6JoP.js";
14
14
  const Fe = {
15
15
  id: "bundlemanagement.fetchAllBundlesError",
16
16
  defaultValue: "The bundles could not be loaded"
@@ -911,4 +911,4 @@ const hn = "DUPLICATE_FILE_NAME", mn = ({
911
911
  export {
912
912
  Hn as default
913
913
  };
914
- //# sourceMappingURL=BundlesContainer-Cjb66440.js.map
914
+ //# sourceMappingURL=BundlesContainer-Cw5tsxud.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BundlesContainer-Cjb66440.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&nbsp;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-Cw5tsxud.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&nbsp;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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"}
@@ -4,7 +4,7 @@ import { PureComponent as L, useState as D, useEffect as w, createContext as b,
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 { Y as K, a as d, cb as G, a7 as B } from "./setTitle-BkLWezzi.js";
7
+ import { Y as K, a as d, cb as G, a7 as B } from "./setTitle-C2aZzr0p.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) => {
@@ -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-D00OnAV4.js.map
293
+ //# sourceMappingURL=DatapointImport-BKY0WjJg.js.map