{"version":3,"file":"js/app.576ff487.js","mappings":"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YC,EA8CAC,EAyCAC,E,oCAvFZ,SAAYF,GACV,0CACA,4CACA,wEACA,oFACA,sDACA,wDACA,sDACA,0CACA,4CACA,4DACA,6CACA,+CACA,+CACA,iDACA,mDACA,qDACA,6CACA,+CACA,yCACA,+CACA,iDACA,mEACA,2DACA,2CACA,yCACA,2DACA,+DACA,iEACA,6CACA,2CACA,mEACA,qEACA,6DACA,2DACA,uDACA,yDACA,2EACA,qDACA,qDACA,+DACA,uDACA,2CACA,4CACD,CA5CD,CAAYA,IAAAA,EAAiB,KA8C7B,SAAYC,GACV,0CACA,8CACA,sDACA,0CACA,kCACA,oCACA,oCACA,4CACA,sCACA,gDACA,+CACA,2BACA,6BACA,uCACA,2CACA,+BACA,mDACA,uBACA,6BACA,2BACA,yCACA,6CACA,mDACA,6DACA,qCACA,uCACA,uCACA,yDACA,6CACA,uCACA,6CACA,6BACA,mCACA,qEACA,uEACA,yCACA,yCACA,0CACD,CAvCD,CAAYA,IAAAA,EAAa,KAyCzB,SAAYC,GACV,kCACA,8BACA,oCACA,wBACA,4BACA,wBACA,gCACA,0BACA,wBACA,0CACA,2BACA,uBACA,iCACA,qCACA,2CACA,yBACA,+BACA,6CACA,sCACD,CApBD,CAAYA,IAAAA,EAAY,I,+BCjFxB,IAAYC,ECFAC,ECUPC,E,iBFRL,SAAYF,GACV,sCACA,oCACA,kDACA,4CACA,gDACA,4CACA,4CACA,gCACA,4CACA,gCACA,sCACA,wCACA,sCACA,4BACA,oCACA,sCACA,oCACA,0BACA,0CACA,wCACA,8CACA,kCACA,sCACA,wCACA,sCACA,4BACA,sDACA,kEACA,0CACA,oCACA,8CACA,0DACA,wCACA,oDACA,oCACA,sCACA,gDACA,8CACA,gDACA,0DACA,8CACA,oCACA,0BACA,qCACD,CA7CD,CAAYA,IAAAA,EAAc,KCF1B,SAAYC,GACV,yBACA,2BACA,+BACA,+BACA,qCACA,uCACA,qBACA,iCACA,yBACA,0BACD,CAXD,CAAYA,IAAAA,EAAmB,KCU/B,SAAKC,GAEH,6CACA,yBACA,yBACA,wCACA,0CACA,uBACA,8BACA,+BACA,oBACA,sCACA,0BACA,8BACA,gBACA,oBACA,oCACA,mCACA,uCACA,0BACA,oBACA,8BACA,oBACA,kBACA,yBACA,2BACA,oCACA,+BACA,mBACA,+BACA,+BACA,sBACA,gBACA,qCACA,kCACA,sCACA,qCACA,mCACA,+BACA,6CACA,8BACA,oCACA,yBACA,qBACA,qCACA,gCACA,sCACA,iBACA,uBACA,2BACA,+BACA,iCACA,iCACA,mBACA,sBACA,gBACA,yCACA,mBACA,2CACA,qBACA,mBACA,6BACA,iBACA,sBACA,iCACA,qCACA,0BACA,kCACA,wBACA,0BACA,wBACA,2BACA,oBACA,qCACA,2BACA,uCACA,iCACA,6CACA,qDACA,0DACA,4CACA,qBACA,iEACA,6DACA,+BAGA,kBACA,oBACA,kCACA,qBACA,mCACA,gBACA,iBACA,2BACA,kBACA,6BACA,6BACA,0BACA,yBACA,+BACA,8BACA,mCACA,iCACA,6BACA,iCACA,mCACA,iCACA,kCAGA,4BAEA,wBACA,kCACA,+BACA,wBACA,oBACA,0BACA,0BACA,iCACA,4BACA,0BACA,wCAEA,uBAGA,6BACA,uCACA,8BAGA,iCACA,8BACD,CAvID,CAAKA,IAAAA,EAAmB,KA8IjB,MAAMC,EAAQ,IAAKH,KAAmBE,KAAwBD,E,+BC5JrE,IAAYG,EAmCAC,EAmCAC,E,oCAtEZ,SAAYF,GACV,iDACA,2CACA,qDACA,+CACA,iBACA,mBACA,gCACA,mBACA,iBACA,4BACA,yBACA,iBACA,mBACA,6BACA,yDACA,mDACA,8BACA,gCACA,gDACA,8BACA,kCACA,gCACA,iDACA,yCACA,wCACA,8BACA,kBACA,kCACA,iDACA,2CACA,2BACA,gBACD,CAjCD,CAAYA,IAAAA,EAAS,KAmCrB,SAAYC,GACV,iDACA,2CACA,iBACA,gCACA,mBACA,gCACA,mBACA,iBACA,4BACA,yBACA,iBACA,mBACA,6BACA,yDACA,mDACA,8BACA,8BACA,8BACA,gCACA,kCACA,gCACA,iDACA,yCACA,wCACA,8BACA,kBACA,kCACA,2BACA,iDACA,2CACA,yCACA,gBACD,CAjCD,CAAYA,IAAAA,EAAgB,KAmC5B,SAAYC,GACV,wCACA,kDACA,gCACA,4BACA,8BACA,4BACA,kDACA,yCACA,qCACA,uCACA,4BACA,wDACA,yCACA,gDACA,qDACA,iDACA,2CACA,8BACA,8BACA,oDACA,mCACA,0CACA,4CACA,+CACA,6CACA,6CACA,qDACA,2CACA,0CACA,gCACA,+CACA,4BACA,0BACA,2BACA,8BACA,kCACA,6CACA,sCACA,qBACD,CAxCD,CAAYA,IAAAA,EAAa,I,+BCpEzB,IAAYC,EASAC,E,yBATZ,SAAYD,GACV,0CACA,wCACA,kCACA,6CACD,CALD,CAAYA,IAAAA,EAAyB,KASrC,SAAYC,GACV,oDACA,sDACA,8DACA,0CACA,wCACA,wCACA,4CACA,mCACD,CATD,CAAYA,IAAAA,EAAqB,I,+BCXjC,IAAYC,E,iBAAZ,SAAYA,GACV,wBACA,qCACD,CAHD,CAAYA,IAAAA,EAAgB,I,+BCA5B,IAAYC,EAQAC,EA4BAC,E,oCApCZ,SAAYF,GACV,4CACA,mDACA,6DACA,kDACA,4CACD,CAND,CAAYA,IAAAA,EAAO,KAQnB,SAAYC,GAGV,+BACA,2CACA,6BACA,yCACA,+CACA,mCAMA,uCACA,0CACA,sDAMA,qCACA,4CAGD,CA1BD,CAAYA,IAAAA,EAAc,KA4B1B,SAAYC,GAGV,yCACA,4CACA,4DACA,gDAMA,iDACA,uDACA,qDACA,yDACA,iDACA,uDACA,qDACA,yDACA,sEACA,4EACA,0EACA,8EACA,qEACA,qEACA,kFAMA,yCACA,gDACA,qDACA,kEAMA,6CACA,qDAMA,wDACA,gEACA,oEAEA,yCACA,iDACA,qDAEA,iFACA,oFACA,oGACA,wFAEA,2DACA,mEACA,uEAEA,gGACA,wGACA,wHACA,4GAMA,wBACA,oCACA,sCACA,gCACA,kEACA,qEACA,qFACA,yEACA,2EACA,iFACA,+EACA,mFACA,gFACA,sFACA,oFACA,wFACA,wFACA,8FACA,4FA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","sources":["src/App.vue","src/App.vue?e5aa","src/stores/index.ts",".quasar/app.js",".quasar/quasar-user-options.js",".quasar/client-entry.js","src/auth/pkce.ts","src/env/secrets.ts","src/auth/token.ts","src/boot/axios.ts","src/boot/consoleFunctions.ts","src/boot/databaseCacheSync.ts","src/db/helpers.ts","src/boot/databaseSchemaHashes.ts","src/boot/directives.ts","src/boot/fontawesomePro.ts","src/i18n/en-US/components/sfxBreadcrumbs.ts","src/i18n/en-US/components/sfxButtons.ts","src/i18n/en-US/components/sfxCard.ts","src/i18n/en-US/components/sfxContextMenu.ts","src/i18n/en-US/components/sfxDataPoint.ts","src/i18n/en-US/components/sfxEmpty.ts","src/i18n/en-US/components/sfxErrorMsg.ts","src/i18n/en-US/components/sfxHealthIndicator.ts","src/i18n/en-US/components/sfxImage.ts","src/i18n/en-US/components/sfxInput.ts","src/i18n/en-US/components/sfxIssues.ts","src/i18n/en-US/components/sfxNavigation.ts","src/i18n/en-US/components/sfxOverlayNotifications.ts","src/i18n/en-US/components/sfxProcedureSteps.ts","src/i18n/en-US/components/sfxProgressIndicator.ts","src/i18n/en-US/components/sfxQuaternarySelector.ts","src/i18n/en-US/components/sfxScanners.ts","src/i18n/en-US/components/sfxSearch.ts","src/i18n/en-US/components/sfxSelect.ts","src/i18n/en-US/components/sfxSelectObject.ts","src/i18n/en-US/components/sfxSeparator.ts","src/i18n/en-US/components/sfxSpinner.ts","src/i18n/en-US/components/sfxTable.ts","src/i18n/en-US/components/sfxTimeEdit.ts","src/i18n/en-US/components/sfxToDo.ts","src/i18n/en-US/components/sfxTooltip.ts","src/i18n/en-US/components/sfxUserDisplay.ts","src/i18n/en-US/components/index.ts","src/i18n/en-US/dialogs/sfxDialogAcceptCorrectiveWork.ts","src/i18n/en-US/dialogs/sfxDialogAcceptWork.ts","src/i18n/en-US/dialogs/sfxDialogAddAttachments.ts","src/i18n/en-US/dialogs/sfxDialogAddComment.ts","src/i18n/en-US/dialogs/sfxDialogAttachmentDetails.ts","src/i18n/en-US/dialogs/sfxDialogAuthentication.ts","src/i18n/en-US/dialogs/sfxDialogChangePassword.ts","src/i18n/en-US/dialogs/sfxDialogChangeRequest.ts","src/i18n/en-US/dialogs/sfxDialogChangeUnlockKey.ts","src/i18n/en-US/dialogs/sfxDialogCloseIssueCorrected.ts","src/i18n/en-US/dialogs/sfxDialogCloseIssueNotCorrected.ts","src/i18n/en-US/dialogs/sfxDialogCloseWorkOrderCompleted.ts","src/i18n/en-US/dialogs/sfxDialogCloseWorkOrderNotCompleted.ts","src/i18n/en-US/dialogs/sfxDialogConnectVueDevtools.ts","src/i18n/en-US/dialogs/sfxDialogDataFetch.ts","src/i18n/en-US/dialogs/sfxDialogDevicePermission.ts","src/i18n/en-US/dialogs/sfxDialogDiscardWork.ts","src/i18n/en-US/dialogs/sfxDialogEasterEgg.ts","src/i18n/en-US/dialogs/sfxDialogEditCorrectionInfo.ts","src/i18n/en-US/dialogs/sfxDialogFeedback.ts","src/i18n/en-US/dialogs/sfxDialogHelp.ts","src/i18n/en-US/dialogs/sfxDialogHttp.ts","src/i18n/en-US/dialogs/sfxDialogIdentifier.ts","src/i18n/en-US/dialogs/sfxDialogImageDelete.ts","src/i18n/en-US/dialogs/sfxDialogItemClone.ts","src/i18n/en-US/dialogs/sfxDialogListAttachmentDelete.ts","src/i18n/en-US/dialogs/sfxDialogListIdentifier.ts","src/i18n/en-US/dialogs/sfxDialogListIssue.ts","src/i18n/en-US/dialogs/sfxDialogListUnsubmittedWork.ts","src/i18n/en-US/dialogs/sfxDialogListWorkOrder.ts","src/i18n/en-US/dialogs/sfxDialogListWorkOrderSelect.ts","src/i18n/en-US/dialogs/sfxDialogOffline.ts","src/i18n/en-US/dialogs/sfxDialogRejectCorrectiveWork.ts","src/i18n/en-US/dialogs/sfxDialogRejectedCorrectiveWork.ts","src/i18n/en-US/dialogs/sfxDialogRejectIssue.ts","src/i18n/en-US/dialogs/sfxDialogRejectWork.ts","src/i18n/en-US/dialogs/sfxDialogRelatedUnsubmittedWork.ts","src/i18n/en-US/dialogs/sfxDialogRemoveEntityFromWorkOrder.ts","src/i18n/en-US/dialogs/sfxDialogSelectModel.ts","src/i18n/en-US/dialogs/sfxDialogStagnantWork.ts","src/i18n/en-US/dialogs/sfxDialogSupersedeIssue.ts","src/i18n/en-US/dialogs/sfxDialogSystem.ts","src/i18n/en-US/dialogs/sfxDialogTableConfigurations.ts","src/i18n/en-US/dialogs/sfxDialogToDo.ts","src/i18n/en-US/dialogs/sfxDialogUnsavedChanges.ts","src/i18n/en-US/dialogs/sfxDialogUnsavedWorkOrderDraft.ts","src/i18n/en-US/dialogs/sfxDialogUnsubmittedIssues.ts","src/i18n/en-US/dialogs/sfxDialogUserSettings.ts","src/i18n/en-US/dialogs/sfxDialogWarning.ts","src/i18n/en-US/dialogs/sfxDialogWorkMustBeReviewed.ts","src/i18n/en-US/dialogs/sfxDialogWorkOrderEntities.ts","src/i18n/en-US/dialogs/sfxDialogWorkOrderRemoveEntity.ts","src/i18n/en-US/dialogs/index.ts","src/i18n/en-US/pages-manager/attachments.ts","src/i18n/en-US/pages-manager/entityConfig.ts","src/i18n/en-US/pages-manager/initiateApp.ts","src/i18n/en-US/pages-manager/issues.ts","src/i18n/en-US/pages-manager/items.ts","src/i18n/en-US/pages-manager/performedWork.ts","src/i18n/en-US/pages-manager/workOrder.ts","src/i18n/en-US/pages-manager/workspaces.ts","src/i18n/en-US/pages-manager/index.ts","src/i18n/en-US/utils/attachmentContext.ts","src/i18n/en-US/utils/entity.ts","src/i18n/en-US/utils/notifications.ts","src/i18n/en-US/utils/others.ts","src/i18n/en-US/utils/permissionNotifications.ts","src/i18n/en-US/utils/time.ts","src/i18n/en-US/utils/filter.ts","src/i18n/en-US/utils/index.ts","src/i18n/en-US/index.ts","src/i18n/index.ts","src/boot/i18n.ts","src/boot/notifications.ts","src/boot/sentry.ts","src/db/collectionDefinitions/csi/attachment.ts","src/db/collectionDefinitions/csi/attribute.ts","src/db/collectionDefinitions/csi/correctiveWork.ts","src/db/collectionDefinitions/csi/correctiveWorkItemComments.ts","src/db/collectionDefinitions/csi/identifier.ts","src/db/collectionDefinitions/csi/issueOnItemActions.ts","src/db/collectionDefinitions/csi/issueOnItemComments.ts","src/db/collectionDefinitions/csi/issuePriorities.ts","src/db/collectionDefinitions/csi/issuesOnItem.ts","src/db/collectionDefinitions/csi/item.ts","src/db/collectionDefinitions/csi/itemClass.ts","src/db/collectionDefinitions/csi/itemModel.ts","src/db/collectionDefinitions/csi/workOrder.ts","src/db/collectionDefinitions/csi/itemWorkOrders.ts","src/db/collectionDefinitions/csi/regularWork.ts","src/db/collectionDefinitions/csi/regularWorkItemComments.ts","src/db/collectionDefinitions/csi/workDomainWorkspace.ts","src/db/collectionDefinitions/csi/workOrderComments.ts","src/db/collectionDefinitions/csi/workOrderPriority.ts","src/db/collectionDefinitions/exampleItem.ts","src/db/collectionDefinitions/springboard/user.ts","src/db/collectionDefinitions/springboard/userRole.ts","src/db/collectionDefinitions/springboard/workDomainGlobal.ts","src/db/collectionDefinitions/springboard/workspace.ts","src/db/collectionDefinitions/unsubmitted/unsubmittedAttachment.ts","src/db/collectionDefinitions/unsubmitted/unsubmittedWork.ts","src/db/collectionDefinitions/unsubmitted/unsubmittedWorkIssue.ts","src/db/databases.ts","src/env/labels.ts","src/env/links.ts","src/router/routes/demoRoutes.ts","src/router/guards/manager/auth.ts","src/router/routes/manager/routes.ts","src/router/guards/technician/auth.ts","src/router/guards/technician/work.ts","src/router/routes/technician/routes.ts","src/router/routes/routes.ts","src/router/index.ts","src/stores/apiAbortStore.ts","src/stores/apiCallStore.ts","src/util/functions/reset.ts","src/stores/authStore.ts","src/stores/cacheStore.ts","src/stores/capacitorAppInfoStore.ts","src/stores/capacitorDeviceInfoStore.ts","src/stores/configurationStore.ts","src/stores/localUserSettingsStore.ts","src/stores/managerTopNavigationStore.ts","src/stores/notificationsStore.ts","src/util/functions/lists.ts","src/stores/searchStore.ts","src/stores/supportStore.ts","src/stores/todoItemsStore.ts","src/stores/topNavigationStore.ts","src/stores/unsubmittedWork.ts","src/stores/userStore.ts","src/util/classes/contextMenuItem.ts","src/util/classes/log.ts","src/util/constants/commonMessages.ts","src/util/constants/configurations.ts","src/util/constants/emptyStates.ts","src/util/constants/files.ts","src/util/constants/filters.ts","src/util/constants/navigation.ts","src/util/constants/table.ts","src/util/constants/temporal.ts","src/util/enums/configuration.ts","src/util/enums/contextSource.ts","src/util/enums/entityOverviewConfig.ts","src/util/enums/entityType.ts","src/util/enums/customIconName.ts","src/util/enums/customLocalIconName.ts","src/util/enums/fontAwesomeIcons.ts","src/util/enums/namedPaths.ts","src/util/enums/notifications.ts","src/util/enums/topNavigation.ts","src/util/enums/urls.ts","src/util/functions/appImages.ts","src/util/functions/attachments.ts","src/util/functions/attributes.ts","src/components/dialogs/error/SfxDialogAuthenticationError.vue","src/components/dialogs/error/SfxDialogAuthenticationError.vue?fa1c","src/components/dialogs/error/SfxDialogNoWorkspaces.vue","src/components/dialogs/error/SfxDialogNoWorkspaces.vue?e593","src/components/dialogs/error/SfxDialogOffline.vue","src/components/dialogs/error/SfxDialogOffline.vue?288e","src/components/dialogs/http/SfxDialogHttpBase.vue","src/components/dialogs/http/SfxDialogHttpBase.vue?5dc4","src/components/dialogs/http/SfxDialogHttp400.vue","src/components/dialogs/http/SfxDialogHttp400.vue?3e0e","src/components/dialogs/http/SfxDialogHttp401.vue","src/components/dialogs/http/SfxDialogHttp401.vue?7b94","src/components/dialogs/http/SfxDialogHttp403.vue","src/components/dialogs/http/SfxDialogHttp403.vue?0982","src/components/dialogs/http/SfxDialogHttp404.vue","src/components/dialogs/http/SfxDialogHttp404.vue?170f","src/components/dialogs/http/SfxDialogHttp408.vue","src/components/dialogs/http/SfxDialogHttp408.vue?2ca9","src/components/dialogs/http/SfxDialogHttp500.vue","src/components/dialogs/http/SfxDialogHttp500.vue?6f0f","src/components/dialogs/http/SfxDialogHttp501.vue","src/components/dialogs/http/SfxDialogHttp501.vue?3ea3","src/components/dialogs/http/SfxDialogHttp502.vue","src/components/dialogs/http/SfxDialogHttp502.vue?abd5","src/components/dialogs/http/SfxDialogHttp503.vue","src/components/dialogs/http/SfxDialogHttp503.vue?15e8","src/components/dialogs/http/SfxDialogHttp504.vue","src/components/dialogs/http/SfxDialogHttp504.vue?a3f5","src/components/dialogs/list/SfxDialogListAttachmentDelete.vue","src/components/dialogs/list/SfxDialogListAttachmentDelete.vue?48e6","src/components/dialogs/list/SfxDialogListAttachmentSelect.vue","src/components/dialogs/list/SfxDialogListAttachmentSelect.vue?2646","src/components/dialogs/list/SfxDialogListIdentifier.vue","src/components/dialogs/list/SfxDialogListIdentifier.vue?4128","src/components/dialogs/list/SfxDialogListIssue.vue","src/components/dialogs/list/SfxDialogListIssue.vue?2dfa","src/components/dialogs/list/SfxDialogListIssueManager.vue","src/components/dialogs/list/SfxDialogListIssueManager.vue?6b48","src/components/dialogs/list/SfxDialogListUnsubmittedWork.vue","src/components/dialogs/list/SfxDialogListUnsubmittedWork.vue?140f","src/components/card/SfxCardIssueUnsubmittedWork.vue","src/components/card/SfxCardIssueUnsubmittedWork.vue?fedc","src/components/dialogs/list/SfxDialogListUnsubmittedWorkIssues.vue","src/components/dialogs/list/SfxDialogListUnsubmittedWorkIssues.vue?837d","src/components/dialogs/list/SfxDialogListWorkOrder.vue","src/components/dialogs/list/SfxDialogListWorkOrder.vue?929a","src/components/dialogs/list/SfxDialogListWorkOrderSelect.vue","src/components/dialogs/list/SfxDialogListWorkOrderSelect.vue?e02e","src/components/dialogs/SfxDialogAcceptCorrectiveWork.vue","src/components/dialogs/SfxDialogAcceptCorrectiveWork.vue?036d","src/components/dialogs/SfxDialogAddAttachments.vue","src/components/dialogs/SfxDialogAddAttachments.vue?330e","src/components/dialogs/SfxDialogAddComment.vue","src/components/dialogs/SfxDialogAddComment.vue?a783","src/components/dialogs/SfxDialogAttachmentDetails.vue","src/components/dialogs/SfxDialogAttachmentDetails.vue?80bc","src/components/dialogs/SfxDialogChangePassword.vue","src/components/dialogs/SfxDialogChangePassword.vue?f815","src/components/dialogs/SfxDialogChangeUnlockKey.vue","src/components/dialogs/SfxDialogChangeUnlockKey.vue?9bc0","src/components/dialogs/SfxDialogCheckBox.vue","src/components/dialogs/SfxDialogCheckBox.vue?0d95","src/stores/devtoolsStore.ts","src/components/dialogs/SfxDialogConnectVueDevtools.vue","src/components/dialogs/SfxDialogConnectVueDevtools.vue?266b","src/components/dialogs/SfxDialogDataFetch.vue","src/components/dialogs/SfxDialogDataFetch.vue?7365","src/components/dialogs/SfxDialogDevicePermission.vue","src/components/dialogs/SfxDialogDevicePermission.vue?4658","src/components/dialogs/SfxDialogEditCorrectionInfo.vue","src/components/dialogs/SfxDialogEditCorrectionInfo.vue?6560","src/components/dialogs/SfxDialogFeedback.vue","src/components/dialogs/SfxDialogFeedback.vue?7c5b","src/components/dialogs/SfxDialogIdentifierExists.vue","src/components/dialogs/SfxDialogIdentifierExists.vue?4a63","src/components/dialogs/SfxDialogIdentifierUnknown.vue","src/components/dialogs/SfxDialogIdentifierUnknown.vue?9623","src/components/dialogs/SfxDialogImageDelete.vue","src/components/dialogs/SfxDialogImageDelete.vue?e854","src/components/dialogs/SfxDialogInput.vue","src/components/dialogs/SfxDialogInput.vue?aef9","src/components/card/SfxCardItemCondensed.vue","src/components/card/SfxCardItemCondensed.vue?eb27","src/components/dialogs/SfxDialogItemClone.vue","src/components/dialogs/SfxDialogItemClone.vue?678d","src/components/dialogs/SfxDialogMessage.vue","src/components/dialogs/SfxDialogMessage.vue?dfa2","src/components/dialogs/SfxDialogRejectedCorrectiveWork.vue","src/components/dialogs/SfxDialogRejectedCorrectiveWork.vue?16a2","src/components/dialogs/SfxDialogRejectPerformedWork.vue","src/components/dialogs/SfxDialogRejectPerformedWork.vue?5dfe","src/components/dialogs/SfxDialogRemoveIssueFromWorkOrder.vue","src/components/dialogs/SfxDialogRemoveIssueFromWorkOrder.vue?29bb","src/components/dialogs/SfxDialogRemoveItemFromWorkOrder.vue","src/components/dialogs/SfxDialogRemoveItemFromWorkOrder.vue?42bd","src/components/dialogs/SfxDialogSelectModel.vue","src/components/dialogs/SfxDialogSelectModel.vue?fd0f","src/components/dialogs/SfxDialogSystemNotification.vue","src/components/dialogs/SfxDialogSystemNotification.vue?b2da","src/components/dialogs/SfxDialogTableConfigurations.vue","src/components/dialogs/SfxDialogTableConfigurations.vue?ef4e","src/components/dialogs/SfxDialogToDoDelete.vue","src/components/dialogs/SfxDialogToDoDelete.vue?e3fa","src/components/dialogs/SfxDialogUndoNotification.vue","src/components/dialogs/SfxDialogUndoNotification.vue?4a37","src/components/dialogs/SfxDialogUnsubmittedIssues.vue","src/components/dialogs/SfxDialogUnsubmittedIssues.vue?f126","src/pages/manager/settings/SettingsConfiguration.vue","src/pages/manager/settings/SettingsConfiguration.vue?d7fa","src/pages/manager/settings/SettingsInformation.vue","src/pages/manager/settings/SettingsInformation.vue?12d6","src/components/dialogs/SfxDialogUserSettings.vue","src/components/dialogs/SfxDialogUserSettings.vue?53ba","src/components/dialogs/SfxDialogWarning.vue","src/components/dialogs/SfxDialogWarning.vue?0b48","src/components/dialogs/SfxDialogWorkOrderEntities.vue","src/components/dialogs/SfxDialogWorkOrderEntities.vue?700e","src/components/dialogs/SfxDialogWorkOrderRemoveIssue.vue","src/components/dialogs/SfxDialogWorkOrderRemoveIssue.vue?d22c","src/components/dialogs/SfxDialogWorkOrderRemoveItem.vue","src/components/dialogs/SfxDialogWorkOrderRemoveItem.vue?e6b7","src/util/functions/dialogs.ts","src/util/functions/entity.ts","src/util/functions/entityData.ts","src/util/functions/hashing.ts","src/util/functions/helpTour.ts","src/util/functions/identifier.ts","src/util/functions/issuePriority.ts","src/util/functions/issues.ts","src/util/functions/itemModel.ts","src/util/functions/item.ts","src/util/functions/itemClass.ts","src/util/constants/colorList.ts","src/util/functions/misc.ts","src/util/functions/notifications.ts","src/components/overlay/SfxImageViewOverlay.vue","src/components/overlay/SfxImageViewOverlay.vue?554a","src/components/overlay/SfxOverlayNotifications.vue","src/components/overlay/SfxOverlayNotifications.vue?08e3","src/pages/manager/overlay/SfxPhotoGalleryOverlay.vue","src/pages/manager/overlay/SfxPhotoGalleryOverlay.vue?9ee1","src/pages/manager/overlay/SfxWorkOrderIssueItemAssignment.vue","src/pages/manager/overlay/SfxWorkOrderIssueItemAssignment.vue?1184","src/pages/manager/overlay/SfxWorkOrderItemAssignment.vue","src/pages/manager/overlay/SfxWorkOrderItemAssignment.vue?47ea","src/pages/manager/overlay/SfxWorkOrderEntityAssignment.vue","src/pages/manager/overlay/SfxWorkOrderEntityAssignment.vue?ba7f","src/pages/technician/overlay/ChangePasswordOverlay.vue","src/pages/technician/overlay/ChangePasswordOverlay.vue?941e","src/pages/technician/overlay/ChangeUnlockKeyOverlay.vue","src/pages/technician/overlay/ChangeUnlockKeyOverlay.vue?fc57","src/pages/technician/overlay/ConfigurationsOverlay.vue","src/pages/technician/overlay/ConfigurationsOverlay.vue?94a0","src/util/enums/scanType.ts","src/pages/technician/overlay/IdentifyOverlay.vue","src/pages/technician/overlay/IdentifyOverlay.vue?12d9","src/pages/technician/overlay/IssueCreateOverlay.vue","src/pages/technician/overlay/IssueCreateOverlay.vue?8164","src/pages/technician/overlay/ItemCreateOverlay.vue","src/pages/technician/overlay/ItemCreateOverlay.vue?c303","src/pages/technician/overlay/ModelClassOverlay.vue","src/util/functions/overlays.ts","src/pages/technician/overlay/ModelClassOverlay.vue?fccb","src/util/functions/performedWork.ts","src/util/functions/randomData.ts","src/util/functions/scroll.ts","src/util/functions/time.ts","src/util/functions/unsubmittedData.ts","src/util/constants/serverErrors.ts","src/util/functions/user.ts","src/util/functions/workDomain.ts","src/util/functions/workOrder.ts","src/util/functions/workOrderPriority.ts","src/util/functions/workspace.ts","src/util/http/csi/attachments.ts","src/util/http/csi/attributes.ts","src/util/http/csi/history.ts","src/util/http/csi/identifiers.ts","src/util/http/csi/issuePriorities.ts","src/util/http/csi/issues.ts","src/util/http/csi/itemClasses.ts","src/util/http/csi/itemModels.ts","src/util/http/csi/items.ts","src/util/http/csi/performedWork.ts","src/util/http/csi/workDomainsWorkspace.ts","src/util/http/csi/workOrderPriorities.ts","src/util/http/csi/workOrders.ts","src/util/http/httpHelper.ts","src/util/http/springboard/user.ts","src/util/http/springboard/workDomainsGlobal.ts","src/util/http/springboard/workspaces.ts","src/util/mockData/notifications.ts","src/util/search/searchMap.ts","src/util/types/dataModels/user.ts","src/components/button/SfxBtn.vue","src/components/button/SfxBtn.vue?7926","src/components/button/SfxBtnIcon.vue","src/components/button/SfxBtnIcon.vue?3902","src/components/button/SfxBtnLink.vue","src/components/button/SfxBtnLink.vue?e351","src/components/button/SfxBtnOutline.vue","src/components/button/SfxBtnOutline.vue?0eb4","src/components/button/SfxBtnUndo.vue","src/components/button/SfxBtnUndo.vue?757b","src/components/card/SfxCard.vue","src/components/card/SfxCard.vue?d3f2","src/components/card/SfxCardAttachment.vue","src/components/card/SfxCardAttachment.vue?703b","src/components/card/SfxCardCondensed.vue","src/components/card/SfxCardCondensed.vue?a84d","src/components/card/SfxCardEventBase.vue","src/components/card/SfxCardEventBase.vue?e7c1","src/components/card/SfxCardIssueCondensed.vue","src/components/card/SfxCardIssueCondensed.vue?4416","src/components/card/SfxCardModel.vue","src/components/card/SfxCardModel.vue?ede7","src/components/card/SfxCardNotificationSystem.vue","src/components/card/SfxCardNotificationSystem.vue?962c","src/components/card/SfxCardNotificationUser.vue","src/components/card/SfxCardNotificationUser.vue?6cca","src/components/card/SfxCardObject.vue","src/components/card/SfxCardObject.vue?4468","src/components/card/SfxCardWorkOrder.vue","src/components/card/SfxCardWorkOrder.vue?b527","src/components/card/SfxCardWorkOrderCondensed.vue","src/components/card/SfxCardWorkOrderCondensed.vue?4802","src/components/card/SfxCardWorkOrderForEntity.vue","src/components/card/SfxCardWorkOrderForEntity.vue?6b5c","src/components/card/SfxCardWorkOrderIssueCondensed.vue","src/components/card/SfxCardWorkOrderIssueCondensed.vue?d2b0","src/components/card/SfxCardWorkOrderItemCondensed.vue","src/components/card/SfxCardWorkOrderItemCondensed.vue?b077","src/components/card/issue-event/SfxCardIssueEventWorkRejected.vue","src/components/card/issue-event/SfxCardIssueEventWorkRejected.vue?6395","src/components/data-point/SfxChip.vue","src/components/data-point/SfxChip.vue?5540","src/components/data-point/SfxDataPoint.vue","src/components/data-point/SfxDataPoint.vue?aaff","src/components/dialogs/SfxDialogConfirmation.vue","src/components/dialogs/SfxDialogConfirmation.vue?851b","src/components/empty/SfxEmptyPage.vue","src/components/empty/SfxEmptyPage.vue?7af2","src/components/empty/SfxEmptyPageManager.vue","src/components/empty/SfxEmptyPageManager.vue?e59b","src/components/images/SfxImageGallerySmall.vue","src/components/images/SfxImageGallerySmall.vue?431c","src/components/images/SfxImageUploader.vue","src/components/images/SfxImageUploader.vue?5cc1","src/components/images/SfxImageViewerManager.vue","src/components/images/SfxImageViewerManager.vue?81b4","src/components/input/SfxInput.vue","src/components/input/SfxInput.vue?6f24","src/components/input/SfxInputPassword.vue","src/components/input/SfxInputPassword.vue?c585","src/components/input/SfxTextarea.vue","src/components/input/SfxTextarea.vue?938f","src/components/input/SfxTextareaTitled.vue","src/components/input/SfxTextareaTitled.vue?f04c","src/components/issue/SfxIssueAdditionalRequirements.vue","src/components/issue/SfxIssueAdditionalRequirements.vue?fb3e","src/components/issue/SfxIssueBase.vue","src/components/issue/SfxIssueBase.vue?28a8","src/components/issue/SfxIssueCorrectiveAction.vue","src/components/issue/SfxIssueCorrectiveAction.vue?f081","src/components/issue/SfxIssueTimeRequirements.vue","src/components/issue/SfxIssueTimeRequirements.vue?8dd1","src/components/navigation/SfxBreadcrumbs.vue","src/components/navigation/SfxBreadcrumbs.vue?d721","src/components/navigation/SfxContextMenu.vue","src/components/navigation/SfxContextMenu.vue?c213","src/components/navigation/SfxTab.vue","src/components/navigation/SfxTab.vue?43e5","src/components/navigation/SfxTabs.vue","src/components/navigation/SfxTabs.vue?54a3","src/components/navigation/SfxContextBar.vue","src/components/navigation/SfxContextBar.vue?a430","src/components/navigation/SfxTopNavigation.vue","src/components/navigation/SfxTopNavigation.vue?a8f9","src/components/navigation/SfxContextBarManager.vue","src/components/navigation/SfxContextBarManager.vue?4a83","src/components/navigation/SfxExtendedMenuManager.vue","src/components/navigation/SfxExtendedMenuManager.vue?1ef6","src/components/navigation/SfxMainMenuManager.vue","src/components/navigation/SfxMainMenuManager.vue?374b","src/components/search/SfxSearchBarQuick.vue","src/components/search/SfxSearchBarQuick.vue?fdc4","src/components/navigation/SfxTopNavigationManager.vue","src/components/navigation/SfxTopNavigationManager.vue?c13d","src/components/overlay/SfxOverlay.vue","src/components/overlay/SfxOverlay.vue?00a1","src/components/priority-label/SfxPriorityLabel.vue","src/components/priority-label/SfxPriorityLabel.vue?9b07","src/components/radio/SfxRadioSimple.vue","src/components/radio/SfxRadioSimple.vue?0ea2","src/components/scanners/SfxScannerBarcode.vue","src/components/scanners/SfxScannerBarcode.vue?408a","src/components/scanners/SfxScannerKeyboard.vue","src/components/scanners/SfxScannerKeyboard.vue?cca8","src/components/scanners/SfxScannerNfc.vue","src/components/scanners/SfxScannerNfc.vue?4bbe","src/components/search/SfxSearchBar.vue","src/components/search/SfxSearchBar.vue?5e3f","src/components/select/SfxSelect.vue","src/components/select/SfxSelect.vue?0b0e","src/components/special/SfxCurrentUserDisplay.vue","src/components/special/SfxCurrentUserDisplay.vue?3790","src/components/special/SfxEntityReference.vue","src/components/special/SfxEntityReference.vue?2580","src/components/special/SfxExternal.vue","src/components/special/SfxExternal.vue?733c","src/components/special/SfxFormSubmit.vue","src/components/special/SfxFormSubmit.vue?8bff","src/components/special/SfxIconRow.vue","src/components/special/SfxIconRow.vue?c90e","src/components/special/SfxInfiniteScroll.vue","src/components/special/SfxInfiniteScroll.vue?90e8","src/components/special/SfxProgressIndicator.vue","src/components/special/SfxProgressIndicator.vue?c0fd","src/components/special/SfxSeparator.vue","src/components/special/SfxSeparator.vue?55a8","src/components/special/SfxSettingsField.vue","src/components/special/SfxSettingsField.vue?e69f","src/components/special/SfxSkeleton.vue","src/components/special/SfxSkeleton.vue?d6ba","src/components/special/SfxSpinner.vue","src/components/special/SfxSpinner.vue?4df8","src/components/special/SfxTimeEdit.vue","src/components/special/SfxTimeEdit.vue?8ca0","src/components/special/SfxUserData.vue","src/components/special/SfxUserData.vue?2762","src/components/table/SfxCardManagerSkeleton.vue","src/components/table/SfxCardManagerSkeleton.vue?5d21","src/components/search/SfxSearchBarManager.vue","src/components/search/SfxSearchBarManager.vue?7290","src/components/table/SfxTableBottom.vue","src/components/table/SfxTableBottom.vue?6dd2","src/components/table/SfxTableTd.vue","src/components/table/SfxTableTd.vue?39f3","src/components/table/SfxTableTdImage.vue","src/components/table/SfxTableTdImage.vue?e81a","src/components/table/SfxTableTdIndicator.vue","src/components/table/SfxTableTdIndicator.vue?4240","src/components/table/SfxTableTdStatus.vue","src/components/table/SfxTableTdStatus.vue?b009","src/components/table/SfxTableTdWorkOrderState.vue","src/components/table/SfxTableTdWorkOrderState.vue?f6e2","src/components/table/SfxTableTdWorkState.vue","src/components/table/SfxTableTdWorkState.vue?2fc1","src/components/table/SfxTableTh.vue","src/components/table/SfxTableTh.vue?d5cb","src/components/table/SfxTableThSelect.vue","src/components/table/SfxTableThSelect.vue?355a","src/components/table/SfxTableThStatus.vue","src/components/table/SfxTableThStatus.vue?bdd8","src/components/table/SfxTableThWorkState.vue","src/components/table/SfxTableThWorkState.vue?b6c5","src/components/table/SfxTable.vue","src/components/table/SfxTable.vue?bd12","src/components/table/SfxTableToggle.vue","src/components/table/SfxTableToggle.vue?68d7","src/components/table/SfxTableTrSkeleton.vue","src/components/table/SfxTableTrSkeleton.vue?8912","src/components/toggle/SfxToggleSettings.vue","src/components/toggle/SfxToggleSettings.vue?43ab","src/components/tooltip/SfxTooltip.vue","src/components/tooltip/SfxTooltip.vue?80e7","src/components/tooltip/SfxTrueCount.vue","src/components/tooltip/SfxTrueCount.vue?d91c","webpack/bootstrap","webpack/runtime/chunk loaded","webpack/runtime/compat get default export","webpack/runtime/create fake namespace object","webpack/runtime/define property getters","webpack/runtime/ensure chunk","webpack/runtime/get javascript chunk filename","webpack/runtime/get mini-css chunk filename","webpack/runtime/global","webpack/runtime/hasOwnProperty shorthand","webpack/runtime/load script","webpack/runtime/make namespace object","webpack/runtime/publicPath","webpack/runtime/css loading","webpack/runtime/jsonp chunk loading","webpack/startup"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { App } from \"@src-capacitor/@capacitor/app\"\nimport { Network } from \"@src-capacitor/@capacitor/network\"\nimport { SplashScreen } from \"@src-capacitor/@capacitor/splash-screen\"\nimport { StatusBar, Style } from \"@src-capacitor/@capacitor/status-bar\"\nimport { date, useMeta, useQuasar } from \"quasar\"\nimport { csiAPI } from \"src/boot/axios\"\nimport { LINKS } from \"src/env/links\"\nimport router from \"src/router\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useCapacitorAppInfoStore } from \"src/stores/capacitorAppInfoStore\"\nimport { useCapacitorDeviceInfoStore } from \"src/stores/capacitorDeviceInfoStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useManagerTopNavigationStore } from \"src/stores/managerTopNavigationStore\"\nimport { useNotificationsStore } from \"src/stores/notificationsStore\"\nimport { useUnsubmittedWorkStore } from \"src/stores/unsubmittedWork\"\nimport { Log } from \"src/util/classes/log\"\nimport { STAGNANT_WORK_INTERVAL } from \"src/util/constants/configurations\"\nimport { stagnantWorkDialog, systemDialog } from \"src/util/functions/dialogs\"\nimport {\n compareData,\n filterOldNotifications,\n isSystemNotification,\n showConnectionLostNotification,\n showConnectionReestablishedNotification,\n} from \"src/util/functions/notifications\"\nimport { getNotificationMockData } from \"src/util/mockData/notifications\"\nimport { NotificationCardData } from \"src/util/types/notifications\"\nimport { onBeforeMount, onMounted, onUnmounted, watch } from \"vue\"\nimport { useRoute } from \"vue-router\"\n// TODO: When vue-i18n is updated, we will be able to use top-level awaits and conditionally import them\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\nconst $q = useQuasar()\nconst iconRegex = new RegExp(\n \"^fa-(solid|regular|light|thin|duotone|brands) fa-|^fa[srltdbk] fa-|^img:\"\n)\n/**\n * Maps custom keys to image paths\n */\nconst iconMappings: Record = {\n \"sfx-logo\": \"img:img/sfx_logo.svg\",\n \"sammy-big\": \"img:img/sammy_big.svg\",\n \"sammy-small\": \"img:img/sammy_small.svg\",\n \"google-logo\": \"img:img/google_logo.svg\",\n \"microsoft-logo\": \"img:img/microsoft_logo.svg\",\n \"supersede-issue\": \"img:icons/supersede_issue.svg\",\n \"radio-on\": \"img:icons/radio_on.svg\",\n \"radio-off\": \"img:icons/radio_off.svg\",\n wizard: \"img:img/wizard.svg\",\n \"wizard-white\": \"img:img/wizard_white.svg\",\n}\nconst authStore = useAuthStore()\nconst managerTopNavigationStore = useManagerTopNavigationStore()\nconst route = useRoute()\nlet stagnantWorkInterval: ReturnType | undefined\nconst unsubmittedWorkStore = useUnsubmittedWorkStore()\n\n//endregion\n\n//region Lifecycle\n\n$q.iconMapFn = (iconName) => {\n // Apply icon mapping if possible\n const mappedIcon = iconMappings[iconName]\n if (mappedIcon) {\n return { icon: `${mappedIcon}` }\n }\n\n // Prefix names that do not match `iconRegex`\n if (!iconRegex.test(iconName)) {\n return {\n cls: `fa-regular fa-${iconName}`,\n }\n }\n\n // Images should be handled by the default\n if (iconName.startsWith(\"img:\")) return\n\n // Otherwise, assume it's a Font Awesome class string\n return { cls: iconName }\n}\n\nonBeforeMount(async () => {\n csiAPI.defaults.baseURL = authStore.getCSIBaseUrl\n\n if (authStore.selectedWorkspace) {\n await unsubmittedWorkStore.updateStagnantWork()\n await unsubmittedWorkStore.updateHasUnsubmittedWork()\n }\n\n if (!stagnantWorkInterval) {\n stagnantWorkInterval = setInterval(async () => {\n if (authStore.selectedWorkspace) {\n await unsubmittedWorkStore.updateStagnantWork()\n }\n }, STAGNANT_WORK_INTERVAL)\n }\n\n return\n // TODO: Lets not spam people with notifications\n await fetchNotificationData()\n})\n\nuseMeta(() => {\n return {\n title:\n managerTopNavigationStore.title.length > 0\n ? \"SAMMY | \" + managerTopNavigationStore.title\n : \"SAMMY\",\n }\n})\n\n//endregion\n\n//region Capacitor Specific\n\nif (process.env.MODE === \"capacitor\") {\n //region Variables\n\n const capacitorAppInfoStore = useCapacitorAppInfoStore()\n const capacitorDeviceInfoStore = useCapacitorDeviceInfoStore()\n\n //endregion\n\n //region Lifecycle\n\n onBeforeMount(async () => {\n const appInfo = await App.getInfo()\n capacitorAppInfoStore.setAppInfo(appInfo)\n await capacitorDeviceInfoStore.setStaticState()\n\n addAppStateListener()\n addAppRestoredResultListener()\n addAppUrlOpenListener()\n await stagnantWorkHandler()\n addNetworkChangeListener()\n\n return\n // TODO: Let's not spam people with notifications for now\n await notificationHandler()\n })\n\n onMounted(async () => {\n // App is ready, so we can remove the splash screen\n await SplashScreen.hide()\n })\n\n onUnmounted(async () => {\n await App.removeAllListeners()\n await Network.removeAllListeners()\n })\n\n //endregion\n\n //region Functions\n\n function addAppStateListener() {\n void App.addListener(\"appStateChange\", ({ isActive }) => {\n capacitorAppInfoStore.setAppState(isActive)\n })\n }\n\n // handle any plugin call results that were delivered when your app was not running\n function addAppRestoredResultListener() {\n void App.addListener(\"appRestoredResult\", (data) => {\n capacitorAppInfoStore.setRestoredEvent(data)\n })\n }\n\n function addAppUrlOpenListener() {\n void App.addListener(\"appUrlOpen\", (event) => {\n // Our URL = app-dev.safeex.cloud\n // slug = /w/2/?testVal=\"someData\"\n\n try {\n const openedURL = new URL(event.url)\n const path = openedURL.pathname\n\n if (openedURL.hostname !== LINKS.CAPACITOR_DEEPLINK_HOSTNAME) {\n // Does not come from a trusted website. Failsafe in case the deep linking gets busted.\n Log.error({\n message: \"Tried opening deep link with bad hostname\",\n data: { event, openedURL },\n })\n\n return\n }\n\n if (!authStore.isLoggedIn && path === \"/\") {\n const code = openedURL.searchParams.get(\"code\")\n authStore.handleAuthorizationCode(code)\n } else {\n Log.debug({ message: \"Open with deep link\", data: { event, path } })\n\n // We only push to the route if there is a path present\n if (path) {\n router.push({ path })\n }\n }\n } catch (error) {\n Log.error({ error, message: \"Failed to parse deep link URL\", data: { event } })\n }\n })\n }\n\n function addNetworkChangeListener() {\n void Network.addListener(\"networkStatusChange\", (status) => {\n if (!status.connected && capacitorAppInfoStore.hasInternet) {\n showConnectionLostNotification()\n capacitorAppInfoStore.hasInternet = false\n } else if (status.connected && !capacitorAppInfoStore.hasInternet) {\n showConnectionReestablishedNotification()\n capacitorAppInfoStore.hasInternet = true\n }\n })\n }\n\n async function notificationHandler() {\n const notificationsStore = useNotificationsStore()\n for (let i = 0; i < notificationsStore.sysNotifications.length; i++) {\n let notification = notificationsStore.sysNotifications[i]\n if (!notification.isRead) {\n const userConfirmed = await systemDialog(notification)\n if (userConfirmed) {\n // Update the notification store\n notification.isRead = true\n notificationsStore.count--\n // Update the system notifications in the server\n // TODO: Since the notification page directly use the data from the server, the read status\n // needs to be updated for the system notifications in the server\n // TODO: Incorporate the patch API for a notification below when available\n // patchNotificationsPartialUpdate(notification)\n }\n }\n }\n }\n\n async function stagnantWorkHandler() {\n if (unsubmittedWorkStore.isWorkStagnant) {\n const configurationStore = useConfigurationStore()\n\n if (!configurationStore.shownStagnantWorkDialogDate) {\n await stagnantWorkDialog(unsubmittedWorkStore.oldestWorkInDays)\n configurationStore.shownStagnantWorkDialogDate = Date.now()\n } else {\n const currentDate = Date.now()\n const dateDiff = date.getDateDiff(\n currentDate,\n configurationStore.shownStagnantWorkDialogDate\n )\n\n if (dateDiff >= 7) {\n configurationStore.shownStagnantWorkDialogDate = undefined\n await stagnantWorkHandler()\n }\n }\n }\n }\n\n //endregion\n\n //region Setup Code\n\n // only works on Android\n void StatusBar.setBackgroundColor({ color: \"#E6E8EB\" })\n void StatusBar.setStyle({ style: Style.Light })\n\n //endregion\n} else {\n watch(\n () => route.query,\n (queryParams) => {\n if (!authStore.isLoggedIn) {\n // We don't expect arrays, but it is better to have checks\n if (typeof queryParams.code === \"string\") {\n authStore.handleAuthorizationCode(queryParams.code)\n } else return\n }\n }\n )\n}\n\n//endregion\n\n//region Functions\n\n// Fetch number of notifications and system notifications from the server and store them in the store\nfunction fetchNotificationData() {\n try {\n const notificationsStore = useNotificationsStore()\n const notificationsInDB: NotificationCardData[] = getNotificationMockData()\n const validNotifications = notificationsInDB?.filter(\n (notification) => filterOldNotifications(notification) && !notification.isRead\n )\n notificationsStore.count = validNotifications.length\n notificationsStore.sysNotifications = validNotifications\n .filter((notification) => isSystemNotification(notification))\n .sort(compareData)\n } catch (error) {\n Log.error({ error, message: \"Failed to fetch the notifications\" })\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createBlock(_component_router_view))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { createPinia } from \"pinia\"\nimport piniaPluginPersistedstate from \"pinia-plugin-persistedstate\"\nimport { store } from \"quasar/wrappers\"\n\nexport default store(() => {\n const pinia = createPinia()\n\n // You can add Pinia plugins here\n // pinia.use(SomePiniaPlugin)\n pinia.use(piniaPluginPersistedstate)\n\n return pinia\n})\n","/**\n * THIS FILE IS GENERATED AUTOMATICALLY.\n * DO NOT EDIT.\n *\n * You are probably looking on adding startup/initialization code.\n * Use \"quasar new boot \" and add it there.\n * One boot file per concern. Then reference the file(s) in quasar.config.js > boot:\n * boot: ['file', ...] // do not add \".js\" extension to it.\n *\n * Boot files are your \"main.js\"\n **/\n\n\n\nimport { Quasar } from 'quasar'\nimport { markRaw } from 'vue'\nimport RootComponent from 'app/src/App.vue'\n\nimport createStore from 'app/src/stores/index'\nimport createRouter from 'app/src/router/index'\n\n\n\n\n\nexport default async function (createAppFn, quasarUserOptions) {\n // Create the app instance.\n // Here we inject into it the Quasar UI, the router & possibly the store.\n const app = createAppFn(RootComponent)\n\n \n\n app.use(Quasar, quasarUserOptions)\n\n \n\n \n const store = typeof createStore === 'function'\n ? await createStore({})\n : createStore\n\n \n app.use(store)\n\n \n \n \n\n const router = markRaw(\n typeof createRouter === 'function'\n ? await createRouter({store})\n : createRouter\n )\n\n \n // make router instance available in store\n \n store.use(({ store }) => { store.router = router })\n \n \n\n // Expose the app, the router and the store.\n // Note that we are not mounting the app here, since bootstrapping will be\n // different depending on whether we are in a browser or on the server.\n return {\n app,\n store,\n router\n }\n}\n","/**\n * THIS FILE IS GENERATED AUTOMATICALLY.\n * DO NOT EDIT.\n *\n * You are probably looking on adding startup/initialization code.\n * Use \"quasar new boot \" and add it there.\n * One boot file per concern. Then reference the file(s) in quasar.config.js > boot:\n * boot: ['file', ...] // do not add \".js\" extension to it.\n *\n * Boot files are your \"main.js\"\n **/\n\nimport iconSet from 'quasar/icon-set/fontawesome-v6.js'\n\n\n\nimport {Notify,Dialog} from 'quasar'\n\n\n\nexport default { config: {\"notify\":{}},iconSet,plugins: {Notify,Dialog} }\n\n","/**\n * THIS FILE IS GENERATED AUTOMATICALLY.\n * DO NOT EDIT.\n *\n * You are probably looking on adding startup/initialization code.\n * Use \"quasar new boot \" and add it there.\n * One boot file per concern. Then reference the file(s) in quasar.config.js > boot:\n * boot: ['file', ...] // do not add \".js\" extension to it.\n *\n * Boot files are your \"main.js\"\n **/\n\n\nimport { createApp } from 'vue'\n\n\n\n\n\n\n\nimport '@quasar/extras/roboto-font/roboto-font.css'\n\n\n\nimport '@quasar/extras/animate/fadeIn.css'\n\nimport '@quasar/extras/animate/fadeOut.css'\n\nimport '@quasar/extras/animate/slideInUp.css'\n\nimport '@quasar/extras/animate/slideOutDown.css'\n\nimport '@quasar/extras/animate/swing.css'\n\n\n// We load Quasar stylesheet file\nimport 'quasar/dist/quasar.sass'\n\n\n\n\nimport 'src/css/app.scss'\n\n\nimport createQuasarApp from './app.js'\nimport quasarUserOptions from './quasar-user-options.js'\n\n\n\n\n\n\n\nconst publicPath = `/`\n\n\nasync function start ({\n app,\n router\n , store\n}, bootFiles) {\n \n\n \n let hasRedirected = false\n const getRedirectUrl = url => {\n try { return router.resolve(url).href }\n catch (err) {}\n\n return Object(url) === url\n ? null\n : url\n }\n const redirect = url => {\n hasRedirected = true\n\n if (typeof url === 'string' && /^https?:\\/\\//.test(url)) {\n window.location.href = url\n return\n }\n\n const href = getRedirectUrl(url)\n\n // continue if we didn't fail to resolve the url\n if (href !== null) {\n window.location.href = href\n \n }\n }\n\n const urlPath = window.location.href.replace(window.location.origin, '')\n\n for (let i = 0; hasRedirected === false && i < bootFiles.length; i++) {\n try {\n await bootFiles[i]({\n app,\n router,\n store,\n ssrContext: null,\n redirect,\n urlPath,\n publicPath\n })\n }\n catch (err) {\n if (err && err.url) {\n redirect(err.url)\n return\n }\n\n console.error('[Quasar] boot error:', err)\n return\n }\n }\n\n if (hasRedirected === true) {\n return\n }\n \n\n app.use(router)\n \n\n \n\n \n\n \n app.mount('#q-app')\n \n\n \n\n \n\n}\n\ncreateQuasarApp(createApp, quasarUserOptions)\n\n .then(app => {\n // eventually remove this when Cordova/Capacitor/Electron support becomes old\n const [ method, mapFn ] = Promise.allSettled !== void 0\n ? [\n 'allSettled',\n bootFiles => bootFiles.map(result => {\n if (result.status === 'rejected') {\n console.error('[Quasar] boot error:', result.reason)\n return\n }\n return result.value.default\n })\n ]\n : [\n 'all',\n bootFiles => bootFiles.map(entry => entry.default)\n ]\n\n return Promise[ method ]([\n \n import(/* webpackMode: \"eager\" */ 'boot/i18n'),\n \n import(/* webpackMode: \"eager\" */ 'boot/axios'),\n \n import(/* webpackMode: \"eager\" */ 'boot/databaseSchemaHashes'),\n \n import(/* webpackMode: \"eager\" */ 'boot/fontawesomePro'),\n \n import(/* webpackMode: \"eager\" */ 'boot/sentry'),\n \n import(/* webpackMode: \"eager\" */ 'boot/notifications'),\n \n import(/* webpackMode: \"eager\" */ 'boot/directives'),\n \n import(/* webpackMode: \"eager\" */ 'boot/databaseCacheSync'),\n \n import(/* webpackMode: \"eager\" */ 'boot/consoleFunctions')\n \n ]).then(bootFiles => {\n const boot = mapFn(bootFiles).filter(entry => typeof entry === 'function')\n start(app, boot)\n })\n })\n\n","import Base64url from \"crypto-js/enc-base64url\"\nimport Utf8 from \"crypto-js/enc-utf8\"\nimport SHA256 from \"crypto-js/sha256\"\nimport { v4 as uuid4 } from \"uuid\"\n\n/**\n * Generate a 43 character code verifier.\n *\n * Written based on recommendation from {@link https://datatracker.ietf.org/doc/html/rfc7636#section-4.1 }\n *\n * @param seed A seed to convert to URL safe Base64 to make it usable as a PKCE code verifier.\n * If no seed is defined, a string with 32 characters is generated as a seed, and then converted into a 43 character\n * URL safe Base64 string, as per the recommendation in the RFC.\n *\n * Setting a specific seed is mainly used for unit tests, and generally a generated one should be used.\n */\nexport function generateCodeVerifier(seed?: string): string {\n // A UUID is 36 characters including the hyphens, but 32 without, which makes it perfect to use as a \"random number\"\n // we convert into URL safe Base64, to get a 43 characters code verifier, as per the RFC recommendation.\n const safeSeed = seed ?? uuid4().replaceAll(\"-\", \"\")\n\n return Utf8.parse(safeSeed).toString(Base64url)\n}\n\n/**\n *\n * Generate PKCE code challenge.\n *\n * Written based on {@link https://datatracker.ietf.org/doc/html/rfc7636#section-4.2 }\n *\n * @param codeVerifier The code verifier to generate a challenge for.\n */\nexport function generateCodeChallenge(codeVerifier: string): string {\n return SHA256(codeVerifier).toString(Base64url)\n}\n","export const SECRETS = {\n DYNAMIC_APP_REG_INITIAL_TOKEN: \"VJpACSLXu3fwC4N9iiM6SWNYbuOtnvnOF2oUAMed7cUKUS7bq9\",\n DYNAMIC_APP_REG_JWT_SECRET: \"Sr7OhzdUCn1PO6kFvzrxQ/O5Oxwrt3FMzcLO+7Km8Gafl7Ee3c\",\n} as const\n","import { Browser } from \"@src-capacitor/@capacitor/browser\"\nimport Base64url from \"crypto-js/enc-base64url\"\nimport Utf8 from \"crypto-js/enc-utf8\"\nimport { importJWK, JWK, JWTPayload, SignJWT } from \"jose\"\nimport {\n AuthenticationToken,\n ClientCredentials,\n DeviceRegistrationPayload,\n ValidAccessToken,\n} from \"src/auth/types\"\nimport { authAPI } from \"src/boot/axios\"\nimport { LINKS } from \"src/env/links\"\nimport { SECRETS } from \"src/env/secrets\"\nimport router from \"src/router\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useCapacitorDeviceInfoStore } from \"src/stores/capacitorDeviceInfoStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { AuthURL } from \"src/util/enums/urls\"\n\n/**\n * Generates a signed JSON Web Token (JWT) based on the software and devices' data.\n */\nexport async function generateJWT(): Promise {\n // Issuer is validated on the server side. It needs to be this.\n const issuer = \"SafeEx ApS\"\n\n // HMAC with SHA-256\n const algorithm = \"HS256\"\n\n // Required for the server to be able to read the tokens.\n // Encode the secret to base64, make sure it is URL safe and remove any extra padding.\n const encodedSecret = Utf8.parse(SECRETS.DYNAMIC_APP_REG_JWT_SECRET).toString(Base64url)\n\n // \"Kty\" details the type of JWK. \"Oct\" stands for \"Octet sequence\" or a sequence of bytes.\n // Oct is used to represent symmetric keys. Symmetric means two parties share the secret key.\n const jwkObject: JWK = { kty: \"oct\", k: encodedSecret }\n const JWK = await importJWK(jwkObject, algorithm)\n\n const customPayload: JWTPayload = {}\n\n customPayload.platform = process.env.PLATFORM\n customPayload.version = process.env.BUILD_VERSION\n\n if (process.env.MODE === \"capacitor\") {\n const capacitorDeviceInfoStore = useCapacitorDeviceInfoStore()\n if (capacitorDeviceInfoStore.deviceId) {\n customPayload.deviceId = capacitorDeviceInfoStore.deviceId.identifier\n }\n }\n\n return await new SignJWT(customPayload)\n .setProtectedHeader({ typ: \"JWT\", alg: algorithm })\n .setIssuer(issuer)\n .sign(JWK)\n}\n\n/**\n * Registers the device on Springboard with data generated from {@link generateJWT}.\n *\n * If this is a development environment - it adds a redirect URI.\n * This sets the allowed redirects for {@link requestAuthorizationCode}.\n * The URI is the current URL string.\n *\n * @example Request\n * POST /sso/oauth/app/\n * Payload\n * software_statement: \"eyJ0eXAiOiJ...\" // JWT string\n * // Only for dev - the source of origin\n * redirect_uris?: [localhost:8081] // Array with URLs. Accepts both HTTP and HTTPS, as well as ports\n */\nexport async function registerDevice(): Promise {\n const url = AuthURL.AUTH_REGISTER_DEVICE\n const payload: Partial = {}\n const jwt = await generateJWT()\n\n // TODO: Set the production URL to the correct one\n // Manually setting the capacitor redirect uri as the backend needs to remain hardcoded to app.safeex.dk\n // for the old app the work. They are eventually going to change it, but we might as well always provide it.\n if (process.env.MODE === \"capacitor\") {\n payload.redirect_uris = [LINKS.SPA_TECHNICIAN_URL]\n } else {\n payload.redirect_uris = process.env.DEV ? [window.location.origin] : [getProdRedirectURI()]\n }\n\n payload.software_statement = jwt\n\n const formattedToken = \"Bearer \" + SECRETS.DYNAMIC_APP_REG_INITIAL_TOKEN\n\n // Axios doesn't really like the web API headers, so we just manually make a valid object\n const headers = { Authorization: formattedToken, \"Content-Type\": \"application/json\" }\n\n const { data } = await authAPI.post(url, payload, { headers })\n\n return data\n}\n\nfunction getProdRedirectURI() {\n return process.env.IS_MANAGER_MODE ? LINKS.SPA_MANAGER_URL : LINKS.SPA_TECHNICIAN_URL\n}\n\n/**\n * Generates unique URL based on provided client ID and code challenge.\n * Then said URL is opened in an internal browser if on Capacitor or else in the same window.\n *\n * If this is a development environment - it adds a redirect URI,\n * which points to where the redirect after login should happen.\n * The URI is the current URL string.\n *\n * @example Request\n * GET /sso/oauth/authorize\n * Query:\n * client_id: \"LYFjlMlDEWzx5...\" // 40 chars\n * response_type: \"code\" // Hardcoded\n * code_challenge: \"NdlWlNPxY...\"\n * code_challenge_method: \"S256\" // Hardcoded\n *\n * @param codeChallenge\n * @param clientId\n */\nexport async function requestAuthorizationCode(codeChallenge: string, clientId: string) {\n const endpoint = AuthURL.AUTH_REQUEST_AUTHORIZATION_CODE\n\n const searchParams = new URLSearchParams()\n searchParams.append(\"client_id\", clientId)\n searchParams.append(\"response_type\", \"code\")\n searchParams.append(\"code_challenge\", codeChallenge)\n searchParams.append(\"code_challenge_method\", \"S256\")\n\n // We handle the redirection for android with deep links\n if (process.env.DEV && process.env.MODE !== \"capacitor\") {\n searchParams.append(\"redirect_uri\", window.location.origin)\n }\n\n const authUri = authAPI.getUri()\n\n const url = `${authUri}${endpoint}?${searchParams.toString()}`\n\n if (process.env.MODE === \"capacitor\") {\n await Browser.open({ url })\n } else {\n // Vue router is for internal links and quasars \"openUrl\" only opens in a new window\n window.location.replace(url)\n }\n}\n\n/**\n * Makes a request asking for an access and refresh tokens.\n * It requires data from all the previous authentication steps.\n *\n * @example Request\n * POST /sso/oauth/token/\n * Payload\n * code: \"lWJVppBLcms...\" // Authorization Code\n * client_id: \"LYFjlMlDEWzx5...\" // 40 chars\n * grant_type: \"authorization_code\" // Hardcoded\n * code_verifier: \"AMNyISeCR6...\" // 43 chars\n *\n * @param authorizationCode\n * @param clientId\n * @param codeVerifier\n */\nexport async function requestAccessToken(\n authorizationCode: string,\n clientId: string,\n codeVerifier: string\n): Promise {\n const endpoint = AuthURL.AUTH_REQUEST_ACCESS_TOKEN\n\n const payload = new FormData()\n payload.append(\"code\", authorizationCode)\n payload.append(\"client_id\", clientId)\n payload.append(\"grant_type\", \"authorization_code\")\n payload.append(\"code_verifier\", codeVerifier)\n\n const { data } = await authAPI.post(endpoint, payload)\n\n return data\n}\n\n/**\n * Makes a request for verifying the access token.\n *\n * @example Request\n * GET /sso/verify/\n * Response\n * id: \"3bbadf3f-8d8b-4425...\",\n * email: \"user@safeex.com\",\n * is_administrator: true,\n *\n * @param token\n */\nexport async function verifyAccessToken(token: string): Promise {\n const endpoint = AuthURL.AUTH_VERIFY_ACCESS_TOKEN\n\n const { data } = await authAPI.get(endpoint, {\n params: { access_token: token },\n })\n\n return data\n}\n\n/**\n * Makes a request for refreshing the access token.\n *\n * @example Request\n * POST /sso/oauth/token/\n * Payload\n * client_id: \"LYFjlMlDEWzx5...\" // 40 chars\n * grant_type: \"refresh_token\" // Hardcoded\n * refresh_token: \"TMf3zZcSgQcYuZIvz...\"\n *\n * @param clientId\n * @param refreshToken\n */\nexport async function refreshAccessToken(\n clientId: string,\n refreshToken: string\n): Promise {\n const endpoint = AuthURL.AUTH_REQUEST_ACCESS_TOKEN\n\n const payload = new FormData()\n payload.append(\"client_id\", clientId)\n payload.append(\"grant_type\", \"refresh_token\")\n payload.append(\"refresh_token\", refreshToken)\n\n const { data } = await authAPI.post(endpoint, payload)\n\n return data\n}\n\n/**\n * Makes a request for revoking a token\n *\n * @example Request\n * POST /sso/oauth/revoke_token/\n * Payload\n * client_id: \"LYFjlMlDEWzx5...\" // 40 chars\n * access_token: \"TMf3zZcSgQcYuZIvz...\"\n *\n * @param clientId\n * @param token\n */\nexport async function revokeToken(clientId: string, token: string) {\n const endpoint = AuthURL.AUTH_REVOKE_TOKEN\n\n const payload = new FormData()\n payload.append(\"client_id\", clientId)\n payload.append(\"token\", token)\n\n await authAPI.post(endpoint, payload)\n}\n\nexport async function loginSequence() {\n const authStore = useAuthStore()\n if (!authStore.canRequestAccessToken) {\n if (!authStore.clientCredentials) {\n // Register device if we don't have any data that it was already registered\n try {\n await authStore.registerDevice()\n } catch (deviceRegistrationError) {\n Log.error({ message: \"Failed registering device.\", error: deviceRegistrationError })\n }\n }\n\n // Try asking for the authorization code\n try {\n await authStore.requestAuthorizationCode()\n } catch (requestAuthCodeError) {\n Log.error({ message: \"Failed requesting authorization code.\", error: requestAuthCodeError })\n }\n } else {\n try {\n await authStore.getAccessToken()\n await router.push({ name: NamedPath.SELECT_WORKSPACE })\n } catch (error) {\n Log.error({ message: \"Failed getting access token.\", error })\n }\n }\n}\n","import axios, {\n AxiosRequestConfig,\n AxiosResponse,\n AxiosError,\n CanceledError,\n InternalAxiosRequestConfig,\n isAxiosError,\n} from \"axios\"\nimport { LINKS } from \"src/env/links\"\nimport { useApiAbortStore } from \"src/stores/apiAbortStore\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { AuthURL } from \"src/util/enums/urls\"\nimport {\n authenticationErrorDialog,\n showHTTP400Dialog,\n showHTTP401Dialog,\n showHTTP403Dialog,\n showHTTP408Dialog,\n showHTTP500Dialog,\n showHTTP501Dialog,\n showHTTP502Dialog,\n showHTTP503Dialog,\n showHTTP504Dialog,\n} from \"src/util/functions/dialogs\"\nimport { UserPermissionAccess, UserPermissionType } from \"src/util/types/dataModels/user\"\n\nexport type CustomHTTPAxiosConfig = {\n sfxAbortId: string\n multiRequest: boolean\n permissionType?: UserPermissionType\n accessLevel?: UserPermissionAccess\n}\n\ndeclare module \"axios\" {\n export interface AxiosRequestConfig {\n customConfig?: CustomHTTPAxiosConfig\n }\n}\n\n// If any client changes this (global) instance, it might be a\n// good idea to move this instance creation inside the\n// \"export default () => {}\" function below (which runs individually\n// for each client)\n\nconst authAPI = axios.create({\n baseURL: LINKS.SPRINGBOARD_URL,\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n})\n\nconst springboardAPI = axios.create({\n baseURL: LINKS.SPRINGBOARD_URL,\n headers: { \"Content-Type\": \"application/json\" },\n})\n\nconst csiAPI = axios.create({\n headers: { \"Content-Type\": \"application/json\" },\n})\n\nlet refreshTokenPromise: Promise | null\n\n//region Requests\n\nspringboardAPI.interceptors.request.use(requestSuccessHandler, requestErrorHandler)\ncsiAPI.interceptors.request.use(requestSuccessHandler, requestErrorHandler)\n\n//endregion\n\n//region Responses\n\nauthAPI.interceptors.response.use(\n function (response) {\n // Any status code that lies within the range of 2xx causes this function to trigger\n updateLastUserAPICall()\n\n return response\n },\n async function (error) {\n // Any status codes that fall outside the range of 2xx cause this function to trigger\n if (error.response && error.config.url !== AuthURL.AUTH_REQUEST_ACCESS_TOKEN) {\n switch (error.response.status) {\n case 401:\n return handleErrorUnauthorized(error)\n case 400:\n case 403:\n case 500:\n case 501:\n case 502:\n case 503:\n case 504:\n // This dialog is only temporary. We should update it as soon as we have the submit queue up and running.\n return await authenticationErrorDialog()\n }\n }\n\n throw error\n }\n)\n\nspringboardAPI.interceptors.response.use(\n function (response) {\n // Any status code that lies within the range of 2xx causes this function to trigger\n\n handleAbortRequests(response)\n\n updateLastUserAPICall()\n updateLastEntityAPICall(response, true)\n\n return response\n },\n\n responseErrorHandler\n)\n\ncsiAPI.interceptors.response.use(\n function (response) {\n // Any status code that lies within the range of 2xx causes this function to trigger\n\n handleAbortRequests(response)\n\n updateLastUserAPICall()\n updateLastWorkspaceAPICall(response)\n\n // We manually set this in the concurrent function\n if (!response.config.customConfig?.multiRequest) {\n updateLastEntityAPICall(response)\n }\n\n return response\n },\n\n responseErrorHandler\n)\n\n//endregion\n\n//region Helpers\n\nconst getRefreshedToken = async (): Promise => {\n const authStore = useAuthStore()\n await authStore.refreshAccessToken()\n return authStore.getAccessTokenString\n}\n\n// We need to fetch the token in a wrapper function in order to ensure that the data is always newly fetched.\n// If we use this code directly, then the result would be cached and could cause issues.\nfunction getAccessToken() {\n const authStore = useAuthStore()\n return authStore.getAccessTokenString\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handleErrorUnauthorized(error: any) {\n try {\n if (!refreshTokenPromise) {\n refreshTokenPromise = getRefreshedToken()\n }\n\n const token = await refreshTokenPromise\n const config: AxiosRequestConfig = error.config\n if (config.headers) config.headers.Authorization = token\n // retry the initially failed API request again\n return axios(config)\n } catch {\n Log.debug({\n message: \"There was an error while trying to refresh the token.\",\n data: { error },\n })\n\n await showHTTP401Dialog()\n\n throw new Error(\"An error has occurred while trying to authenticate the user.\")\n } finally {\n refreshTokenPromise = null\n }\n}\n\nasync function retryRequest(error: AxiosError) {\n if (!error.config) throw error\n\n const config: AxiosRequestConfig = error.config\n // retry the initially failed API request again\n return axios(config)\n}\n\nfunction requestSuccessHandler(config: InternalAxiosRequestConfig): InternalAxiosRequestConfig {\n config.headers.Authorization = getAccessToken()\n return config\n}\n\nfunction requestErrorHandler(error: unknown): Promise {\n if (error instanceof CanceledError) {\n // User canceled the request, so remove it from the abort store\n const apiAbortStore = useApiAbortStore()\n if (error.config && error.config.customConfig?.sfxAbortId) {\n apiAbortStore.removeController(error.config.customConfig?.sfxAbortId)\n }\n }\n\n return Promise.reject(error)\n}\n\nasync function responseErrorHandler(error: unknown) {\n // Any status codes that falls outside the range of 2xx causes this function to trigger\n\n if (!isAxiosError(error)) throw error\n\n // In theory, those dialog are persistent, so they will always have return value of TRUE.\n // This is just a bit of future proofing.\n switch (error.response?.status) {\n case 400:\n await showHTTP400Dialog()\n break\n\n case 401:\n // We want to try to first reauthenticate the user and only on fail show the dialog.\n // This function handles that.\n return handleErrorUnauthorized(error)\n\n case 403:\n await showHTTP403Dialog()\n break\n\n case 408: {\n const retry = await showHTTP408Dialog()\n if (retry) return retryRequest(error)\n break\n }\n\n case 500: {\n const retry = await showHTTP500Dialog()\n if (retry) return retryRequest(error)\n break\n }\n\n case 501:\n await showHTTP501Dialog()\n break\n\n case 502: {\n const retry = await showHTTP502Dialog()\n if (retry) return retryRequest(error)\n break\n }\n\n case 503: {\n const retry = await showHTTP503Dialog()\n if (retry) return retryRequest(error)\n break\n }\n\n case 504: {\n const retry = await showHTTP504Dialog()\n if (retry) return retryRequest(error)\n break\n }\n }\n\n throw error\n}\n\n/**\n * Dedicated for last global API call for the user.\n */\nfunction updateLastUserAPICall() {\n const userStore = useUserStore()\n // Dedicated for last successful call since last api store is not persistent\n userStore.latestAPICall = Date.now()\n}\n\n/**\n * Dedicated for last API call per workspace, so we can detect last interaction.\n *\n * @param response\n */\nfunction updateLastWorkspaceAPICall(response: AxiosResponse) {\n const apiCallStore = useApiCallStore()\n apiCallStore.updateWorkspaceLastApiCallTime(response.config.baseURL)\n}\n\n/**\n * Dedicated for last API call per entity, so that we don't have to fetch the same data too often.\n * @param response\n * @param isSpringboardCall\n */\nfunction updateLastEntityAPICall(response: AxiosResponse, isSpringboardCall = false) {\n const apiCallStore = useApiCallStore()\n apiCallStore.updateLastApiCallTime(response.config, isSpringboardCall)\n}\n\nfunction handleAbortRequests(response: AxiosResponse) {\n const apiAbortStore = useApiAbortStore()\n if (response.config.customConfig?.sfxAbortId && !response.config.customConfig?.multiRequest) {\n // Only remove if a singular request, multi requests need to be handled manually\n apiAbortStore.removeController(response.config.customConfig?.sfxAbortId)\n }\n}\n\n//endregion\n\nexport { authAPI, springboardAPI, csiAPI }\n","declare global {\n interface Window {\n SFX: typeof SFX\n sfx: typeof SFX\n }\n}\n\nconst SFX = {\n async deleteDBs(reloadPage = true) {\n console.debug(\"DELETING ALL DBS\")\n const dbs = await window.indexedDB.databases()\n\n for (const db of dbs) {\n if (db.name) window.indexedDB.deleteDatabase(db.name)\n }\n\n if (reloadPage) {\n console.debug(\"RELOADING PAGE\")\n location.reload()\n }\n },\n\n deleteLocalStorage(keepLogin = true) {\n console.debug(\"DELETING LOCAL STORAGE\")\n\n if (keepLogin) {\n const authStoreKey = \"pinia-authStore\"\n const authStoreValue = localStorage.getItem(authStoreKey)\n\n localStorage.clear()\n\n if (authStoreValue) localStorage.setItem(authStoreKey, authStoreValue)\n } else {\n console.debug(\"BYE BYE LOGIN DETAILS\")\n localStorage.clear()\n }\n },\n\n async logout(deleteCredentials = false) {\n const { useAuthStore } = await import(\"src/stores/authStore\")\n const authStore = useAuthStore()\n\n await authStore.logout()\n\n if (deleteCredentials) {\n console.debug(\"BYE BYE CLIENT CREDENTIALS\")\n authStore.clientCredentials = null\n }\n },\n\n async nukeEverything() {\n console.debug(\"🙃🙃🙃🙃🙃🙃🙃🙃🙃🙃\")\n this.deleteLocalStorage(false)\n await this.deleteDBs()\n },\n\n async fetchData(workspaceId: string) {\n const { dataFetchDialog } = await import(\"src/util/functions/dialogs\")\n await dataFetchDialog(workspaceId)\n },\n\n isItFriday() {\n const date = new Date()\n const day = date.getDay()\n\n if (day === 5) {\n console.debug(\"🥳 YES, IT IS 🥳\")\n return true\n } else {\n console.debug(\"😭 NO, IT IS NOT 😭\")\n return false\n }\n },\n}\n\nwindow.SFX = SFX\nwindow.sfx = SFX\n\nexport {}\n","import { boot } from \"quasar/wrappers\"\nimport { Subscription } from \"rxjs\"\nimport { getChangesDB, getDB } from \"src/db/databases\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport {\n cacheDeleteIssueWithOpenCorrectiveWork,\n cacheDeleteItemWithWorkOrders,\n cacheInsertIssueWithOpenCorrectiveWork,\n cacheInsertItemWithWorkOrders,\n cacheItemWithIssues,\n cacheUpdateIssueWithOpenCorrectiveWork,\n cacheUpdateItemWithWorkOrders,\n getAttributeValueIDFromValue,\n useCacheStore,\n} from \"src/stores/cacheStore\"\nimport { useUnsubmittedWorkStore } from \"src/stores/unsubmittedWork\"\n\nexport default boot(async () => {\n const authStore = useAuthStore()\n\n // No need to build caches if there is no data\n if (authStore.selectedWorkspace) {\n await syncDBCache()\n await syncUnsubmittedWork()\n }\n})\n\nlet dbSyncSubscription: Subscription\nlet dbIssueItemSubscription: Subscription\nlet dbWorkOrderRegularItemSubscription: Subscription\nlet dbCorrectiveWorkItemSubscription: Subscription\nlet dbAttributeValuesSubscription: Subscription\nlet dbUnsubmittedWorkSubscription: Subscription\n\nexport async function syncDBCache() {\n dbSyncSubscription?.unsubscribe()\n dbIssueItemSubscription?.unsubscribe()\n dbWorkOrderRegularItemSubscription?.unsubscribe()\n dbCorrectiveWorkItemSubscription?.unsubscribe()\n dbAttributeValuesSubscription?.unsubscribe()\n\n const db = await getDB()\n const cacheStore = useCacheStore()\n await cacheStore.rebuildCache()\n\n const attributeValuesCollections = new Set([\n \"attribute_char_value\",\n \"attribute_numeric_value\",\n \"attribute_select_value\",\n \"attribute_temporal_value\",\n ])\n\n dbIssueItemSubscription = db.issues_on_item.insert$.subscribe((i) =>\n cacheItemWithIssues([i.documentData], cacheStore.itemIssues)\n )\n\n dbWorkOrderRegularItemSubscription = db.work_order_regular_item.$.subscribe((i) => {\n switch (i.operation) {\n case \"INSERT\":\n cacheInsertItemWithWorkOrders([i.documentData], cacheStore.itemWorkOrders)\n break\n\n case \"UPDATE\":\n cacheUpdateItemWithWorkOrders(\n [i.previousDocumentData],\n [i.documentData],\n cacheStore.itemWorkOrders\n )\n break\n\n case \"DELETE\":\n cacheDeleteItemWithWorkOrders([i.documentData], cacheStore.itemWorkOrders)\n break\n }\n })\n\n dbCorrectiveWorkItemSubscription = db.corrective_work_on_item.$.subscribe((i) => {\n switch (i.operation) {\n case \"INSERT\":\n cacheInsertIssueWithOpenCorrectiveWork(\n [i.documentData],\n cacheStore.issueWithOpenCorrectiveWork\n )\n break\n\n case \"UPDATE\":\n cacheUpdateIssueWithOpenCorrectiveWork(\n i.previousDocumentData,\n i.documentData,\n cacheStore.issueWithOpenCorrectiveWork\n )\n break\n\n case \"DELETE\":\n cacheDeleteIssueWithOpenCorrectiveWork(\n i.documentData,\n cacheStore.issueWithOpenCorrectiveWork\n )\n break\n }\n })\n\n dbAttributeValuesSubscription = db.$.subscribe((event) => {\n // Skip NON attribute values because we want to handle them in the generic listener\n if (!event.collectionName || !attributeValuesCollections.has(event.collectionName)) return\n\n const id = getAttributeValueIDFromValue(event.documentData)\n\n switch (event.operation) {\n case \"INSERT\":\n case \"UPDATE\": {\n const cacheCollection = cacheStore.getCollection(event.collectionName)\n if (cacheCollection) {\n // Clean up from RxDB\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _attachments, _deleted, _meta, _rev, ...docData } = event.documentData\n cacheCollection.set(id, docData)\n }\n break\n }\n case \"DELETE\":\n const cacheCollection = cacheStore.getCollection(event.collectionName)\n if (cacheCollection) {\n cacheCollection.delete(id)\n }\n break\n }\n })\n\n dbSyncSubscription = db.$.subscribe((event) => {\n // Skip attribute values because we want to have a dedicated listener for them\n if (!event.collectionName || attributeValuesCollections.has(event.collectionName)) return\n\n switch (event.operation) {\n case \"INSERT\":\n case \"UPDATE\": {\n const cacheCollection = cacheStore.getCollection(event.collectionName)\n if (cacheCollection && event.documentData?.id) {\n // Clean up from RxDB\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _attachments, _deleted, _meta, _rev, ...docData } = event.documentData\n\n cacheCollection.set(event.documentData.id, docData)\n }\n break\n }\n case \"DELETE\":\n const cacheCollection = cacheStore.getCollection(event.collectionName)\n if (cacheCollection) {\n cacheCollection.delete(event.documentData.id)\n }\n break\n }\n })\n}\n\nexport async function syncUnsubmittedWork() {\n dbUnsubmittedWorkSubscription?.unsubscribe()\n\n const cdb = await getChangesDB()\n const unsubmittedWorkStore = useUnsubmittedWorkStore()\n\n dbUnsubmittedWorkSubscription = cdb.$.subscribe((event) => {\n switch (event.operation) {\n case \"INSERT\":\n case \"DELETE\": {\n unsubmittedWorkStore.updateHasUnsubmittedWork()\n break\n }\n }\n })\n}\n","import { RxCollection, RxDatabase, RxDumpCollection } from \"rxdb\"\nimport {\n AppAllDBCollections,\n AppBaseDBCollections,\n AppChangesDBCollections,\n AppCommonDBCollections,\n formatCSIDBName,\n getChangesDatabase,\n getCommonDatabase,\n getDatabase,\n} from \"./databases\"\n\n/**\n * Schema hashes for dump-inserts.\n */\nexport const schemaHashes: Record = {\n attachment: \"\",\n attachment_data: \"\",\n attribute_char: \"\",\n attribute_char_value: \"\",\n attribute_numeric: \"\",\n attribute_numeric_value: \"\",\n attribute_select: \"\",\n attribute_select_options: \"\",\n attribute_select_value: \"\",\n attribute_temporal: \"\",\n attribute_temporal_value: \"\",\n corrective_work_on_item: \"\",\n corrective_work_item_comments: \"\",\n identifier: \"\",\n issue_on_item_actions: \"\",\n issue_on_item_comments: \"\",\n issue_priority: \"\",\n issues_on_item: \"\",\n item: \"\",\n item_class: \"\",\n item_model: \"\",\n item_work_orders: \"\",\n regular_work_on_item: \"\",\n regular_work_item_comments: \"\",\n work_domain_workspace: \"\",\n work_order_corrective_item: \"\",\n work_order_regular_item: \"\",\n work_order_corrective_comments: \"\",\n work_order_regular_comments: \"\",\n work_order_priority: \"\",\n}\n\nexport const schemaChangesHashes: Record = {\n unsubmitted_attachment: \"\",\n unsubmitted_work: \"\",\n unsubmitted_work_issue: \"\",\n}\n\nexport const schemaCommonHashes: Record = {\n example_item: \"\",\n user: \"\",\n user_avatar: \"\",\n user_role: \"\",\n work_domain_global: \"\",\n workspace: \"\",\n}\n\n/**\n * Helper to construct dumps for use with `importDump()`.\n *\n * @param collectionName\n * @param documents\n */\nexport function constructImportDump(\n collectionName: keyof AppBaseDBCollections,\n documents: DocumentType[]\n): RxDumpCollection {\n return {\n docs: documents,\n name: collectionName as string,\n passwordHash: undefined,\n schemaHash: schemaHashes[collectionName],\n }\n}\n\nexport function constructChangesImportDump(\n collectionName: keyof AppChangesDBCollections,\n documents: DocumentType[]\n): RxDumpCollection {\n return {\n docs: documents,\n name: collectionName as string,\n passwordHash: undefined,\n schemaHash: schemaChangesHashes[collectionName],\n }\n}\n\nexport function constructCommonImportDump(\n collectionName: keyof AppCommonDBCollections,\n documents: DocumentType[]\n): RxDumpCollection {\n return {\n docs: documents,\n name: collectionName as string,\n passwordHash: undefined,\n schemaHash: schemaCommonHashes[collectionName],\n }\n}\n\n/**\n * Initiate schema hashes\n */\n\nexport async function initiateBaseSchemaHashes() {\n const dbName = await formatCSIDBName(\"test_db\")\n await initiateHashesGeneral(schemaHashes, getDatabase, dbName)\n}\n\nexport async function initiateChangesSchemaHashes() {\n const dbName = await formatCSIDBName(\"test_changes_db\")\n await initiateHashesGeneral(schemaChangesHashes, getChangesDatabase, dbName)\n}\n\nexport async function initiateCommonSchemaHashes() {\n const dbName = \"test_common_db\"\n await initiateHashesGeneral(schemaCommonHashes, getCommonDatabase, dbName)\n}\n\nasync function initiateHashesGeneral<\n DBCollection extends AppAllDBCollections,\n DB extends RxDatabase = RxDatabase,\n>(\n hashesList: Record,\n dbFunc: (name: string) => Promise,\n dbName: string\n) {\n // Check if schema hashes must be initialized\n if (Object.values(hashesList).includes(\"\")) {\n // Use the test database to get hashes, since it will not contain\n const testDB = await dbFunc(dbName)\n\n for (const collection of Object.values(testDB.collections)) {\n const typedCollection = collection as RxCollection\n const collectionExport = await typedCollection.exportJSON()\n hashesList[collectionExport.name as keyof DBCollection] = collectionExport.schemaHash\n }\n }\n}\n","import { boot } from \"quasar/wrappers\"\nimport {\n initiateBaseSchemaHashes,\n initiateChangesSchemaHashes,\n initiateCommonSchemaHashes,\n} from \"src/db/helpers\"\nimport { useAuthStore } from \"src/stores/authStore\"\n\n/**\n * Initiate schema hashes once in boot\n *\n * Alternatively this could be done in {@link constructImportCollection}, but\n * that would render that function unnecessarily async.\n */\nexport default boot(async () => {\n const authStore = useAuthStore()\n\n // No need to build hashes if there is no data\n if (authStore.selectedWorkspace) {\n await initiateBaseSchemaHashes()\n await initiateChangesSchemaHashes()\n }\n await initiateCommonSchemaHashes()\n})\n","import { boot } from \"quasar/wrappers\"\nimport { showDragAndDropEmptyFiles, showDragAndDropFail } from \"src/util/functions/notifications\"\nimport { v4 as uuid4 } from \"uuid\"\nimport { DirectiveBinding, Ref, ref, VNode } from \"vue\"\n\nexport default boot(({ app }) => {\n app.directive(TRUNCATE_MIDDLE_DIRECTIVE, {\n mounted: truncateMiddleMount,\n beforeUpdate: truncateMiddleBeforeUpdate,\n beforeUnmount: truncateMiddleBeforeUnmount,\n })\n\n app.directive(DND_DIRECTIVE, {\n mounted: (el: HTMLElement, binding: DirectiveBinding, node) => {\n const counter = ref(0)\n el.addEventListener(\"dragover\", dndDragOverHandler, false)\n el.addEventListener(\"dragenter\", (ev) => dndDragEnterHandler(ev, el, counter))\n el.addEventListener(\"dragleave\", () => dragLeaveHandler(el, counter))\n el.addEventListener(\"drop\", (ev) => dndDropHandler(ev, el, node, counter))\n },\n })\n\n // USE WITH CAUTION!\n // Functions similar to v-show with the difference being that instead of doing \"display: none\",\n // it sets the visibility to hidden and position to fixed. This way the element is still rendered,\n // but it won't really take space in the DOM layout. This is hacky solution that enables the \"truncate\" directive\n // to work properly. Additionally, if the value is initially set to false, it would set the display to none.\n app.directive(VISIBLE_DIRECTIVE, {\n beforeMount: visibleBeforeMount,\n updated: visibleUpdated,\n })\n\n app.directive(CLICK_OUTSIDE_DIRECTIVE, {\n beforeMount: clickOutsideBeforeMount,\n beforeUnmount: clickOutsideBeforeUnmount,\n })\n})\n\n//region Truncate Middle\n\nlet canvasCtx: CanvasRenderingContext2D | null = null\nconst TRUNCATE_MIDDLE_DIRECTIVE = \"truncate-middle\"\nconst TRUNCATE_MIDDLE_CLASS = \"truncate-middle\"\nconst TRUNCATE_MIDDLE_ID = \"truncate-id\"\nconst truncateMiddleMap = new Map()\n\ntype TruncateMiddleObject = {\n text: string\n el: HTMLElement\n}\n\nwindow.addEventListener(\"resize\", () => {\n if (truncateMiddleMap.size === 0) return\n\n for (const value of truncateMiddleMap.values()) {\n if (document.contains(value.el)) {\n setTruncatedText(value.text, value.el)\n }\n }\n})\n\nfunction truncateMiddleMount(el: HTMLElement, binding: DirectiveBinding) {\n // Only execute if there are is some text\n if (!binding.value) return\n\n const text: string = binding.value.toString()\n\n const textValueSpan = document.createElement(\"span\")\n\n textValueSpan.classList.add(TRUNCATE_MIDDLE_CLASS)\n textValueSpan.classList.add(\"flex\")\n\n // We add some unique identifier so that we can use the truncateMiddleMap\n const uuid = uuid4()\n textValueSpan.setAttribute(TRUNCATE_MIDDLE_ID, uuid)\n truncateMiddleMap.set(uuid, { el: textValueSpan, text })\n el.append(textValueSpan)\n\n setTruncatedText(text, textValueSpan)\n}\n\nfunction truncateMiddleBeforeUpdate(el: HTMLElement, binding: DirectiveBinding) {\n // Only execute if there are is some new text to update\n if (!binding.value || binding.value === binding.oldValue) return\n\n const text: string = binding.value.toString()\n\n const selector = `[${TRUNCATE_MIDDLE_ID}]`\n const textValueSpan = el.querySelector(selector)\n\n if (textValueSpan) {\n setTruncatedText(text, textValueSpan as HTMLElement)\n }\n}\nfunction truncateMiddleBeforeUnmount(el: HTMLElement) {\n const selector = `[${TRUNCATE_MIDDLE_ID}]`\n const textValueSpan = el.querySelector(selector)\n const id = textValueSpan?.getAttribute(TRUNCATE_MIDDLE_ID)\n if (id) truncateMiddleMap.delete(id)\n}\n\nfunction setTruncatedText(text: string, el: HTMLElement) {\n const textWidth = getTextWidth(text, el)\n // So we can ensure that we are always going to fit in the box, and it is not too close\n const extraPadding = 15\n\n // Text is long enough to fit in without truncation\n if (textWidth + extraPadding < el.offsetWidth) {\n el.innerHTML = text\n return\n }\n\n const averageCharLength = textWidth / text.length\n const shouldRemoveCharSpacing = (textWidth - el.offsetWidth + extraPadding) / averageCharLength\n const charsPerSide = Math.floor((text.length - shouldRemoveCharSpacing) / 2)\n const leftText = (text.slice(0, charsPerSide) || \"\").trim()\n const rightText = (text.slice(-charsPerSide) || \"\").trim()\n\n el.innerHTML = leftText + \"...\" + rightText\n}\n\nfunction getTextWidth(text: string, el: Element) {\n const context = getCanvas()\n if (!context) return 0\n\n context.font = getCanvasFont(el)\n const metrics = context.measureText(text)\n return metrics.width\n}\n\nfunction getCanvas() {\n // re-use canvas object for better performance\n if (!canvasCtx) {\n const canvas = document.createElement(\"canvas\")\n canvasCtx = canvas.getContext(\"2d\")\n }\n\n return canvasCtx\n}\n\nfunction getCSSStyle(element: Element, prop: string) {\n return window.getComputedStyle(element, null).getPropertyValue(prop)\n}\n\nfunction getCanvasFont(el: Element = document.body) {\n // Setting some default values just in case, although the document.body should suffice\n const fontWeight = getCSSStyle(el, \"font-weight\") || \"normal\"\n const fontSize = getCSSStyle(el, \"font-size\") || \"16px\"\n const fontFamily = getCSSStyle(el, \"font-family\") || \"Roboto\"\n\n return `${fontWeight} ${fontSize} ${fontFamily}`\n}\n\n//endregion\n\n//region Drag and Drop\n\nconst DND_CLASS = \"drag-and-drop\"\nconst DND_DIRECTIVE = \"dnd\"\nconst DND_EMIT = \"dnd\"\n\nfunction stopAndPreventDrag(ev: DragEvent) {\n if (ev && ev.dataTransfer && (ev.dataTransfer.dropEffect = \"copy\")) {\n ev.preventDefault()\n ev.stopPropagation()\n }\n}\n\nfunction dndDragOverHandler(ev: DragEvent) {\n // Prevent default behavior (Prevent file from being opened)\n stopAndPreventDrag(ev)\n}\n\nfunction dndDragEnterHandler(ev: DragEvent, el: HTMLElement, counter: Ref) {\n stopAndPreventDrag(ev)\n counter.value++\n\n if (!el?.classList.contains(DND_CLASS)) {\n el?.classList.add(DND_CLASS)\n }\n}\n\nfunction dragLeaveHandler(el: HTMLElement, counter: Ref) {\n counter.value--\n\n if (counter.value === 0 && el.classList.contains(DND_CLASS)) {\n el.classList.remove(DND_CLASS)\n }\n}\n\nfunction dndDropHandler(ev: DragEvent, el: HTMLElement, node: VNode, counter: Ref) {\n // Prevent default behavior (Prevent file from being opened)\n stopAndPreventDrag(ev)\n\n el.classList.remove(DND_CLASS)\n counter.value = 0\n\n if (!ev.dataTransfer) {\n showDragAndDropFail()\n return\n }\n\n if (ev.dataTransfer.files.length > 0) {\n const files: File[] = []\n\n for (const file of ev.dataTransfer.files) {\n // Ignore empty files. Files that are caught mid-stream also show up as size 0, and we don't want them.\n if (file.size > 0) {\n files.push(file)\n }\n }\n\n if (files.length !== ev.dataTransfer.files.length) {\n showDragAndDropEmptyFiles()\n } else if (files.length > 0) {\n dndEmitFiles(node, files)\n } else {\n showDragAndDropFail()\n }\n } else {\n showDragAndDropFail()\n }\n}\n\nfunction dndEmitFiles(node: VNode, files: File[]) {\n if (node.component) {\n node.component.emit(DND_EMIT, { detail: files })\n } else {\n const el = node.el as HTMLElement\n el.dispatchEvent(new CustomEvent(DND_EMIT, { detail: files }))\n }\n}\n\n//endregion\n\n//region Visible Element\n\nconst VISIBLE_DIRECTIVE = \"visible\"\n\nfunction visibleBeforeMount(el: HTMLElement, binding: DirectiveBinding) {\n const shouldRender = Boolean(binding.value)\n if (shouldRender) {\n setElVisibility(el, shouldRender)\n } else {\n // The element does not initially have a render value, so don't even bother\n el.style.display = \"none\"\n }\n}\n\nfunction visibleUpdated(el: HTMLElement, binding: DirectiveBinding) {\n if (binding.value === binding.oldValue) return\n\n setElVisibility(el, Boolean(binding.value))\n}\n\nfunction setElVisibility(el: HTMLElement, isVisible: boolean) {\n if (isVisible) {\n el.style.display = \"\"\n el.style.position = \"\"\n el.style.visibility = \"\"\n } else {\n el.style.display = \"block\"\n el.style.position = \"fixed\"\n el.style.visibility = \"hidden\"\n }\n}\n\n//endregion\n\n//region Click Outside\n\nconst CLICK_OUTSIDE_DIRECTIVE = \"click-outside\"\n\ninterface ExtendedHTMLElement extends HTMLElement {\n clickOutside: (event: MouseEvent) => void\n}\n\nfunction clickOutsideBeforeMount(el: ExtendedHTMLElement, binding: DirectiveBinding) {\n el.clickOutside = function (event: MouseEvent) {\n if (event.target instanceof Element && !(el === event.target || el.contains(event.target))) {\n // Check if the clicked element is neither the element\n // to which the directive is applied nor its child\n // Invoke the provided method\n binding.value(event)\n }\n }\n document.addEventListener(\"click\", el.clickOutside)\n}\n\nfunction clickOutsideBeforeUnmount(el: ExtendedHTMLElement) {\n // Remove the event listener when the bound element is unmounted\n document.removeEventListener(\"click\", el.clickOutside)\n}\n\n//endregion\n","import \"src/assets/fontawesome/css/duotone.min.css\"\nimport \"src/assets/fontawesome/css/fontawesome.min.css\"\nimport \"src/assets/fontawesome/css/regular.min.css\"\nimport \"src/assets/fontawesome/css/solid.min.css\"\nimport { boot } from \"quasar/wrappers\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\n\nexport default boot(({ app }) => {\n // Patch the Font Awesome style of the icon set\n const fontAwesomeStyle = \"fa-regular\"\n\n const iconSet = app.config.globalProperties.$q.iconSet as unknown as {\n [key: string]: { [key: string]: string }\n }\n\n for (const key in iconSet) {\n if (key !== \"name\") {\n for (const subKey in iconSet[key]) {\n // Note: We slice 4 characters from the start, because that fits with the Font Awesome 5 way of denoting styles.\n iconSet[key][subKey] = `${fontAwesomeStyle} ${iconSet[key][subKey].slice(4)}`\n }\n // Overwriting default icons\n iconSet[\"field\"][\"clear\"] = Icons.CLOSE\n iconSet[\"arrow\"][\"dropdown\"] = Icons.CHEVRON_DOWN\n }\n }\n})\n","export default {\n entityCount:\n 'Listing {count} {entity}s out of {total}',\n}\n","export default {\n btn_add_attachment: \"Add {entity} Attachment\",\n btn_add_comment_to_issue: \"Add a comment to this Issue...\",\n btn_add_comment_to_work: \"Add a comment to this Work...\",\n btn_add_comment_to_work_order: \"Add a comment to this Work Order...\",\n btn_add_identifier: \"Add Identifier\",\n btn_add_to_work_order: \"Add to Work Order\",\n btn_change_work_order: \"Change Work Order\",\n btn_argh: \"Argh!\",\n btn_associate_location: \"Associate Location\",\n btn_association_change: \"Change association\",\n btn_cancel: \"Cancel\",\n btn_change_password: \"Change password\",\n btn_close: \"Close\",\n btn_close_it: \"Close it!\",\n btn_close_work_order: \"Close Work Order\",\n btn_confirm: \"Confirm\",\n btn_connect: \"Connect\",\n btn_continue: \"Continue\",\n btn_correct_issue: \"Correct Issue!\",\n btn_create_item: \"Create Item\",\n btn_create_work_order: \"Create Work Order\",\n btn_delete: \"Delete\",\n btn_delete_selected: \"Delete selected\",\n btn_disassociate: \"Disassociate\",\n btn_discard_changes: \"Discard changes\",\n btn_done: \"Done\",\n btn_dont_show: \"Don’t show this again\",\n btn_download_attachments: \"Download selected Attachments\",\n btn_easter_egg: \"What a lot of things!\",\n btn_go_to_item: \"Go to Item\",\n btn_got_it: \"Got it!\",\n btn_got_it_period: \"Got it.\",\n btn_hide_section: \"Hide section\",\n btn_lets_go: \"Let's go already!\",\n btn_load_default: \"Load default\",\n btn_load_selected: \"Load selected\",\n btn_log_me_out: \"Blast it! Log me out\",\n btn_noted: \"Noted!\",\n btn_ok: \"OK\",\n btn_open_issue: \"Open Issue\",\n btn_open_work_orders: \"Open Work Order\",\n btn_overwrite_selected: \"Overwrite selected\",\n btn_perform: \"Perform Ad-Hoc Corrective Work\",\n btn_perform_correction: \"Perform Correction!\",\n btn_perform_planned: \"Perform Planned Corrective Work\",\n btn_perform_work: \"Perform Work!\",\n btn_proceed: \"That's okay, proceed!\",\n btn_raise: \"Raise\",\n btn_raise_issue: \"Raise issue\",\n btn_raise_next_issue: \"Raise next issue\",\n btn_refresh_workspaces: \"Refresh Workspaces\",\n btn_reject_it: \"Reject it!\",\n btn_reject: \"Reject Work\",\n btn_reject_corrective_work: \"Reject Corrective Work\",\n btn_accept: \"Accept Work\",\n btn_accept_corrective_work: \"Accept Corrective Work\",\n btn_reload_app: \"Reload app\",\n btn_remove: \"Remove\",\n btn_remove_attachments: \"Remove selected Attachments\",\n btn_request_removal: \"Request Removal\",\n btn_reset: \"Reset\",\n btn_reset_selection: \"Reset selection\",\n btn_resume: \"Resume Work\",\n btn_retry: \"Retry\",\n btn_review_work: \"Review Work\",\n btn_save: \"Save\",\n btn_save_changes: \"Save changes\",\n btn_save_selection: \"Save selection\",\n btn_search_attachments: \"Search Attachments\",\n btn_see_all: \"See all\",\n btn_see_all_count: \"See all ({count})\",\n btn_see_performed_work: \"See Performed Work\",\n btn_select_issues: \"Select Issues\",\n btn_select_items: \"Select Items\",\n btn_send: \"Send\",\n btn_sign_out: \"Sign out\",\n btn_submit: \"Submit\",\n btn_submit_changes: \"Submit changes\",\n btn_supersede: \"Supersede!\",\n btn_take_photo: \"Take photo\",\n btn_to_issues: \"To Issues\",\n btn_to_raised_issues: \"Back to Raised Issues\",\n btn_to_work_orders: \"To Work Orders\",\n btn_try_again: \"Try Again\",\n btn_understood: \"Understood!\",\n btn_understood_without_exclamation: \"Understood\",\n btn_undo: \"Undo\",\n btn_unlock_key: \"Change Unlock Key\",\n btn_upload_new_file: \"Upload new file\",\n}\n","export default {\n ad_hoc_corrective: \"Ad-Hoc Corrective Work\",\n ad_hoc_regular: \"Ad-Hoc Regular Work\",\n area: \"Area\",\n areas: \"Areas\",\n area_id: \"Area ID\",\n by: \"By\",\n event_added: \"Added\",\n event_changed: \"Changed\",\n event_change_requested: \"Change Requested\",\n event_removed: \"Removed\",\n item: \"Item\",\n items: \"Items\",\n item_id: \"Item ID\",\n item_location_id: \"Location ID\",\n item_model: \"Model\",\n issue_label_deadline: \"Deadline for Correction\",\n issue_label_procedure_steps: \"Related steps (ID)\",\n issue_no_procedure_steps: \"None\",\n issue_label_step_reference: \"Step referencing\",\n not_applicable: \"N/A\",\n issue_label_raised: \"Raised\",\n layout: \"Layout\",\n layouts: \"Layouts\",\n layout_id: \"Layout ID\",\n location: \"Location\",\n model_code: \"Model code\",\n model_manufacturer: \"Manufacturer\",\n maintenance_scheduled: \"Maintenance Scheduled\",\n performed: \"Performed\",\n planned_corrective: \"Planned Corrective Work\",\n planned_regular: \"Planned Regular Work\",\n organisation: \"Organisation\",\n requester: \"Requester\",\n risk: \"Risk factor\",\n support: \"{support}\",\n zone_id: \"Zone ID\",\n qr: \"QR code\",\n barcode: \"Barcode\",\n rfid: \"RFID\",\n unknown_user: \"Unknown\",\n system_user: \"SYSTEM\",\n error_user: \"ERROR\",\n title_corrective_work: \"Corrective Work\",\n title_closed_without_correction: \"Closed without Correction\",\n title_corrected_and_closed: \"Corrected and closed\",\n title_issue_rejected: \"Issue rejected\",\n title_issue_superseded: \"Superseded\",\n title_issue_supersedes_another: \"This Issue supersedes another\",\n title_corrective_work_rejected: \"Corrective Work rejected\",\n title_corrective_work_accepted: \"Corrective Work accepted\",\n title_issue_raised: \"Raised\",\n title_repeated_observation: \"Repeated Observation\",\n title_edited_correction_info: \"Edited Correction Information\",\n title_work_order_added: \"Added to Work Order\",\n title_work_order_removed: \"Removed from Work Order\",\n work_accepted: \"Work Accepted\",\n work_rejected: \"Work Rejected\",\n processed: \"Processed\",\n work_order: \"Work Order\",\n corrected_on: \"Corrected on\",\n corrected_on_date_by: \"Corrected on {date} by\",\n closed_on: \"Closed on\",\n closed_by: \"Closed by\",\n corrective_work_on: \"Corrective Work on\",\n reasoning: \"Reasoning\",\n rejection_reason: \"Reason for rejection\",\n superseding_issue: \"Superseding Issue\",\n superseded_issue: \"Superseded Issue\",\n performed_regular_work: \"Performed Regular Work\",\n rejected_by: \"Rejected by\",\n accepted_by: \"Accepted by\",\n relation: \"Relation\",\n reference: \"Reference\",\n deadline: \"Deadline\",\n work_description: \"Work description\",\n no_value: \"No Value\",\n}\n","export default {\n add_attachment: \"Add Attachment\",\n add_to_work_order: \"Add to Work Order\",\n associate_identifier: \"Associate Identifier\",\n change_requests: \"Change Requests\",\n clone_item: \"Clone Item\",\n close_issue: \"Close Issue\",\n create_item: \"Create Item\",\n create_location: \"Create Location\",\n create_model: \"Create Model\",\n create_work_order: \"Create Work Order\",\n close_work_order: \"Close Work Order\",\n delete: \"Delete\",\n discard: \"Discard\",\n discard_work: \"Discard Work\",\n export_results: \"Export Results\",\n feedback: \"Feedback\",\n handle_identifiers: \"Handle Identifiers\",\n help: \"Help\",\n history: \"History\",\n issues: \"Issues\",\n mark_all_read: \"Mark All as Read\",\n mark_all_unread: \"Mark All as Unread\",\n perform_adhoc_work: \"Perform Ad-hoc Work\",\n perform_corrective_work: \"Perform Corrective Work\",\n raise_issue: \"Raise Issue\",\n delete_issue: \"Delete Issue\",\n reject_issue: \"Reject Issue\",\n remove_from_work_order: \"Remove from Work Order\",\n remove_location: \"Remove from Location\",\n replace_item: \"Replace Item\",\n supersede_issue: \"Supersede Issue\",\n support: \"Support\",\n take_photo: \"Take Photo\",\n toggle_display_performed: \"Toggle Display Performed\",\n user_settings: \"User Settings\",\n image_zoom_in: \"Zoom In\",\n image_zoom_out: \"Zoom Out\",\n}\n","export default {\n coordinates: \"GPS Coordinates\",\n timezone: \"Timezone\",\n invalid_timezone: \"Invalid Zone\",\n active_work_orders: \"Active Work Orders\",\n open_issues: \"Open Issues\",\n adhoc_discovery: \"Ad-hoc discovery\",\n work_order_discovery: \"Work Order discovery\",\n pending_corrective_work: \"Pending Corrective Work\",\n median_correction_time: \"Median Correction Time\",\n days: \"days\",\n deadline_label: \"Deadline for Correction\",\n admins: \"Administrators\",\n more: \"More...\",\n}\n","export default {\n subtitle_entity_not_found: \"We didn't find any {entity}s.\",\n subtitle_entity_not_found_exclamation: \"We didn't find any {entity}s!\",\n subtitle_entity_not_added: \"There are no {entity}s added.\",\n subtitle_entity_no_matches: \"We didn't find any results for your search.\",\n subtitle_entity_not_open: \"You're not presently assigned to any open {entity}.\",\n subtitle_performed_work: \"We didn't find any Performed Work.\",\n subtitle_workspace_not_found:\n \"We could not find any Workspace that your user account can access.\",\n subtitle_unsubmitted_work_not_found: \"You have no unsubmitted work at \",\n subtitle_notifications_not_found: \"You have not yet received any Notification.\",\n subtitle_entity_not_assigned: \"You're not presently assigned to any {entity}.\",\n subtitle_attachment_drag_and_drop: \"Or browse via the button above.\",\n subtitle_no_related_actions: \"This Item has neither Issues, nor Work Orders.\",\n subtitle_no_attributes: \"You must select an Item Class\",\n subtitle_to_do: \"You have not made any To-Dos.\",\n subtitle_no_issues_raised: \"There were no Issues raised from this Performed Work\",\n subtitle_no_comments: \"Nobody has commented on this {entity}\",\n subtitle_location_not_associated: \"This item has no associated Location!\",\n subtitle_add_image: \"Click to add the first Image!\",\n subtitle_work_order_not_created:\n \"Key parameters such as Work Domain, Work type and Entity type must be set before this panel can function.

First, create the Work Order.\",\n subtitle_no_work_issues: \"Select the Issues for which Work must be performed.\",\n subtitle_no_work_items: \"Select the Items for which Work must be performed.\",\n subtitle_no_suitable_work_orders: \"We didn't find any suitable Work Order.\",\n\n title_entity_not_found: \"No {entity}s\",\n title_entity_no_matches: \"No matching {entity}s\",\n title_entity_no_matches_found: \"No matches\",\n title_entity_not_assigned: \"No {entity} assignments.\",\n title_entity_not_open: \"No open {entity}s!\",\n title_entity_not_created: \"{entity} not yet created\",\n title_unsubmitted_work_no_matches: \"No matching {entity}\",\n\n title_no_entity: \"No {entity}\",\n title_no_entities: \"No {entity}s!\",\n title_no_images: \"No Images!\",\n title_notifications_not_found: \"There are no Notifications\",\n title_unsubmitted_work_not_found: \"No Unsubmitted Work!\",\n title_workspaces_not_found: \"No Workspaces!\",\n title_workspace_not_found: \"No Workspace!\",\n title_attachment_drag_and_drop: \"Drag and drop to add {entity} Attachments\",\n title_no_related_actions: \"No related actions / events\",\n title_no_attributes: \"Attributes appear here\",\n title_no_issues_raised: \"No Issues raised!\",\n title_no_comments: \"No Comments!\",\n title_no_location: \"No Location\",\n title_no_work_issues: \"No Work Issues\",\n title_no_work_items: \"No Work Items\",\n\n contact_administrator: \"Please, contact your administrator!\",\n http_404: \"HTTP 404\",\n this_workspace: \"this workspace\",\n\n // Quotes\n\n quote_workspace_not_found: \"This is re-he-heally awkward\",\n quote_workspace_no_matches:\n \"Well that was a long walk down a windy beach to a café that was closed\",\n\n quote_area_not_found: \"Fetch straightedge and compass!\",\n quote_area_no_matches: \"Consult the scrolls once more and the fabled place may be found.\",\n\n quote_notification_not_found: \"Good news, everyone! There are no news.\",\n\n quote_to_do_not_found: \"Nothing to see here, folks, move along.\",\n\n quote_layout_not_found: \"The Workspace is Terra Incognita.\",\n quote_layout_no_matches: \"You're off the edge of the map, mate. Here there be monsters.\",\n\n quote_performed_work_not_found:\n \"If you can’t work from home, go to work. Don't go to work! Go outside. Don't go outside! And then we will or won't, something or other...\",\n quote_performed_work_no_matches: \"Does that mean it isn’t broke or... we didn't fix it?\",\n\n quote_zone_not_found: \"Zones specify important types of regions.\",\n quote_zone_no_matches: \"Perhaps there's a hole in the Zone layer!\",\n\n quote_unsubmitted_work_not_found: \"Work, or work not, there is no try\",\n\n quote_issue_no_matches:\n \"Know your Issues and know yourself and you can have a hundred Workspaces without disaster\",\n quote_issue_not_found:\n \"As many a brash youth swept in twilight’s gleam and coaxed by sweet notes of well-hopped ale bursts through the tavern doors, eyes afire for some foe, alike in prowess, finding none but fair friends

So you, searched for Issues and found none\",\n\n quote_work_order_not_assigned: \"It's the Workspace of the free!\",\n quote_work_order_not_created: \"Strucky has locksed again!\",\n quote_work_order_not_found: \"Laissez faire, laissez passer\",\n quote_work_order_no_matches: \"A Work Order by any other name may smell as sweet!\",\n quote_work_order_not_open: \"Thy work is done!\",\n\n quote_attachment_drag_and_drop: \"Be the first to sow this fertile land!\",\n quote_attachment_not_found: \"The best of us have pressed “send” without double-checking.\",\n quote_attachment_no_matches: \"These aren't the Attachments you're looking for.\",\n quote_attachment_not_added: \"Should have mailed them to the Marx brothers!\",\n\n quote_item_not_found: \"There is plenty of room for all kinds of stuff.\",\n quote_item_no_matches: \"... though we may have some in the back in a size L\",\n quote_no_related_actions: \"It’s the job that’s never started as takes longest to finish.\",\n\n quote_location_not_found: \"It is a vast country with landmarks unknown.\",\n quote_location_no_matches: \"I have no memory of this place.\",\n\n quote_no_location:\n \"Have you not heard the stories? It’s an Item that cannot be found except by those who already know where it is..\",\n\n quote_model_not_found:\n \"And the workspace abounded with novel Items, each hand-wrought and bespoke but for a single purpose.\",\n quote_model_no_matches: \"Try again! Maybe you'll get another one. A better one!\",\n quote_attributes: \"It's a bird, it's a plane. No! It's... what is it?\",\n\n quote_bug_found:\n \"Scientists say the universe is made up of protons, neutrons and electrons. They forget to mention MORONS!\",\n quote_no_issues_raised: \"No news is good news!..
right?\",\n quote_no_comments: \"‘No comment’ is a splendid expression. I am using it again and again.\",\n}\n","export default {\n error_add_identifier: \"There was an error adding an identifier\",\n error_adding_attachment:\n \"An error occurred while adding an attachment. We are already handling it.\",\n error_adding_comment: \"An error occurred while adding the comment. We are already handling it.\",\n error_adding_image: \"An error occurred while adding the image. We are already handling it.\",\n error_change_password:\n \"An error occurred while changing the password. We are already handling it.\",\n error_change_unlock_key:\n \"An error occurred while changing the unlock key. We are already handling it.\",\n error_creating_corrective_action:\n \"There was a problem while creating the corrective action. We're already handling it.\",\n error_creating_corrective_work:\n \"There was a problem while creating the corrective work. We are already handling it.\",\n error_creating_issue: \"There was a problem while creating the issue. We're already handling it.\",\n error_creating_regular_work:\n \"There was a problem while creating the regular work. We are already handling it.\",\n error_creating_corrective_work_order:\n \"There was a problem while creating the corrective work order. We are already handling it.\",\n error_creating_regular_work_order:\n \"There was a problem while creating the regular work order. We are already handling it.\",\n error_updating_corrective_work_order:\n \"There was a problem while updating the corrective work order. We are already handling it.\",\n error_updating_regular_work_order:\n \"There was a problem while updating the regular work order. We are already handling it.\",\n error_updating_issue_on_item:\n \"An error occurred while updating the issue on item. We are already handling it.\",\n error_deleting_attachment:\n \"An error occurred while deleting an attachment. We are already handling it.\",\n error_deleting_attachment_with_name:\n \"An error occurred while deleting {fileName}. We are already handling it.\",\n error_deleting_attachment_with_count:\n \"Failed to delete {failedCount} out of {totalCount} attachments. We are already handling it.\",\n error_disassociate_identifiers: \"There was an error disassociating identifiers\",\n error_closing_issue: \"An error occurred while closing the issue. We are already handling it.\",\n error_closing_issues:\n \"An error occurred while trying to close the issues raised on this Regular Work. We are already handling it.\",\n error_closing_work_order_corrective:\n \"An error occurred while closing the corrective work order. We are already handling it.\",\n error_closing_work_order_regular:\n \"An error occurred while closing the regular work order. We are already handling it.\",\n error_modifying_work_order:\n \"An error occurred while modifying the work order. We are already handling it.\",\n error_accepting_corrective_work:\n \"An error occurred while accepting the corrective work. We are already handling it.\",\n error_accepting_regular_work:\n \"An error occurred while accepting the regular work. We are already handling it.\",\n error_rejecting_corrective_work:\n \"An error occurred while rejecting the corrective work. We are already handling it.\",\n error_rejecting_regular_work:\n \"An error occurred while rejecting the regular work. We are already handling it.\",\n error_rejecting_issue: \"An error occurred while rejecting the issue. We are already handling it.\",\n error_updating_attachment:\n \"An error occurred while updating an attachment. We are already handling it.\",\n error_updating_attributes:\n \"There was an error trying to update some of the attributes for this item\",\n error_updating_corrective_action:\n \"An error occurred while updating corrective action(s). We are already handling it.\",\n error_updating_item: \"There was an error trying to update the item\",\n error_updating_issue: \"There was an error trying to update the issue\",\n error_no_valid_work_domains: \"There are no valid work domains available to choose from.\",\n error_deadline_after_start_date: \"Deadline cannot be before or equal to the start date time\",\n error_failed_to_send_email: \"Failed to send an email.\",\n}\n","export default {\n workspace_health: \"Workspace Health\",\n}\n","export default {\n no_image: \"Loading error\",\n no_image_small: \"Error\",\n title_photographs: \"Photographs\",\n dnd_content: \"Drag and drop to add {entity} photos\",\n dnd_quote: \"Magic Mirror on the wall, which Item is the fairest of all?\",\n}\n","export default {\n field_empty: \"This field cannot be empty.\",\n password: \"Password\",\n error_char_blanks: \"Blank values are not allowed\",\n error_number_min: \"Value must be at least {min}\",\n error_number_max: \"Value must be at most {max}\",\n error_number_between: \"Value must be between {min} and {max}\",\n error_number_whole: \"Only whole numbers are allowed\",\n error_number_precision: \"Precision should be at most {decimals} numbers\",\n}\n","export default {\n title_requirements: \"Additional Requirements\",\n title_time_requirements: \"Time Requirements\",\n title_action: \"Corrective Action\",\n label_isolation: \"Requires isolation\",\n label_shutdown: \"Requires shutdown\",\n label_input_action: \"Select or write a Corrective Action\",\n label_hours: \"Hours\",\n label_minutes: \"Minutes\",\n dialog_title: \"Discarding entry\",\n dialog_content: \"Are you sure you want to discard this entry?\",\n disabled_icon_info_message: \"Cannot be filled unless Corrective Action has been added.\",\n}\n","export default {\n administrate: \"Administrate\",\n analytics: \"Analytics\",\n areas: \"Areas\",\n attachments: \"Attachments\",\n audit: \"Audit\",\n change_requests: \"Change Requests\",\n error: \"Error\",\n home: \"Home\",\n identify: \"Identify\",\n issues: \"Issues\",\n items: \"Items\",\n layouts: \"Layouts\",\n locations: \"Locations\",\n models: \"Models\",\n more: \"More\",\n notifications: \"Notifications\",\n performed_work: \"Performed Work\",\n settings: \"Settings\",\n to_do: \"To-Do\",\n work_domains: \"Work Domains\",\n work_orders: \"Work Orders\",\n workspaces: \"Workspaces\",\n zones: \"Zones\",\n group_name_work_related: \"Work-related\",\n group_name_registry_entities: \"Registry entities\",\n group_name_arrangement: \"Arrangement\",\n group_name_admin: \"Admin\",\n}\n","export default {\n mark_read_dialogContent: \"Please confirm.\",\n mark_read_dialogTitle: \"Mark all as read?\",\n mark_unread_dialogContent: \"Please confirm.\",\n mark_unread_dialogTitle: \"Mark all as unread?\",\n read_notifications: \"Read\",\n title: \"Feed\",\n unread_notifications: \"Unread\",\n}\n","export default {\n mandatory_step: \"This step is mandatory.\",\n}\n","export default {\n draft: \"Draft\",\n in_progress: \"In Progress\",\n open: \"Open\",\n complete: \"Complete\",\n planned: \"Planned\",\n complete_closed: \"Closed\",\n closed: \"Closed\",\n unknown: \"Unknown\",\n}\n","export default {\n work_type_label: \"Work type\",\n work_type_true_value: \"Corrective\",\n work_type_false_value: \"Regular\",\n\n entity_type_label: \"Entity type\",\n entity_type_true_value: \"Area\",\n entity_type_false_value: \"Items\",\n}\n","export default {\n invalid_code_format_warning: \"A code was found, but it was in an invalid format.\",\n invalid_code_value_warning: \"A code was found, but its read value was not valid.\",\n missing_browser_camera_permission_warning:\n \"Please either allow camera or reset your browser's camera permission to continue.\",\n missing_camera_permission_warning:\n \"The application needs to use your camera, but camera permission has not been granted.\",\n missing_camera_warning: \"No camera has been found on the current device.\",\n nfc_warning: \"NFC is not available or is disabled\",\n}\n","export default {\n clear_search_history: \"Clear search history\",\n input_placeholder: \"Search or Filter {entityName}...\",\n input_placeholder_manager: \"Quicksearch...\",\n}\n","export default {\n field_empty: \"This field cannot be empty.\",\n one_active_user: \"At least one active user needs to be selected\",\n label_range: \"Range\",\n label_assignees: \"Assignees\",\n option_past_week: \"Past week\",\n option_past_month: \"Past month\",\n option_past_quarter: \"Past quarter\",\n option_past_year: \"Past year\",\n option_select_date_range: \"Select date range\",\n no_users: \"No users available\",\n}\n","export default {\n label_item: \"Item\",\n label_model: \"Model\",\n label_location: \"Location\",\n label_unknown: \"Unknown\",\n designation_unknown: \"Unknown Designation\",\n}\n","export default {\n done: \"Done\",\n}\n","export default {\n attachment_data: \"The app is handling attachment data. This might take some time.\",\n comments_data: \"The app is handling comments data. This might take some time.\",\n corrective_work_data: \"The app is handling corrective work data. This might take some time.\",\n regular_work_data: \"The app is handling regular work data. This might take some time.\",\n issue_data: \"The app is handling issue data. This might take some time.\",\n item_data: \"The app is handling item data. This might take some time.\",\n item_attribute_data: \"The app is handling item attribute data. This might take some time.\",\n model_data: \"The app is handling model data. This might take some time.\",\n unsubmitted_work_data: \"The app is handling unsubmitted work data. This might take some time.\",\n workspace_data: \"The app is handling workspace data. This might take some time.\",\n uploading_file: \"File is being uploaded. This might take some time.\",\n raised_issues: \"Getting raised issues.\",\n work_order_corrective:\n \"The app is handling work order corrective data. This might take some time.\",\n work_order_regular: \"The app is handling work order regular data. This might take some time.\",\n}\n","export default {\n empty_no_value: \"No value\",\n empty_no_location: \"No location\",\n empty_no_deadline: \"No deadline\",\n empty_no_model: \"No model\",\n empty_incompatible: \"Incompatible\",\n empty_none: \"None\",\n object_page: \"objects per page\",\n menu_search: \"Search\",\n menu_none: \"None Found\",\n menu_search_column: \"Search in {column}\",\n state_work_order: \"State\",\n state_dropdown: \"State\",\n state_sort_by: \"Sort State by\",\n state_latest: \"Latest\",\n state_unreviewed: \"Unreviewed\",\n state_done: \"Done\",\n state_accepted: \"Accepted\",\n state_rejected: \"Rejected\",\n state_oldest: \"Oldest\",\n state_overdue: \"Overdue\",\n state_behind: \"Behind\",\n state_resource: \"Resource\",\n state_draft: \"Draft\",\n state_in_progress: \"In progress\",\n state_open: \"Open\",\n state_complete: \"Complete\",\n state_planned: \"Planned\",\n state_complete_closed: \"Closed\",\n state_closed: \"Closed\",\n state_unknown: \"Unknown\",\n status_dropdown: \"Status\",\n status_sort_by: \"Sort Status by\",\n status_issue: \"Issue Priority\",\n status_work_order: \"Work Order Priority\",\n status_change_request: \"Change Requests Amount\",\n status_issue_overdue: \"Deadline for correction\",\n status_done: \"Corrective Work Accepted\",\n status_corrective_work: \"Corrective Work\",\n status_corrective_work_accepted: \"Corrective Work accepted\",\n status_closed: \"Closed\",\n entity_item: \"Item | Items\",\n entity_issue: \"Issue | Issues\",\n entity_model: \"Model | Models\",\n entity_performed_work: \"Performed Work | Performed Works\",\n entity_area: \"Area | Areas\",\n entity_layout: \"Layout | Layouts\",\n entity_workspace: \"Workspace | Workspaces\",\n entity_zone: \"Zone | Zones\",\n entity_work_order: \"Work Order | Work Orders\",\n entity_attachment: \"Attachment | Attachments\",\n entity_location: \"Location | Locations\",\n selection_all: \"Select All\",\n selection_none: \"Select None\",\n selection_not_included: \"Not included\",\n selection_included: \"Included\",\n selection_included_and_performed: \"Included and Performed\",\n selection_select_all_applicable: \"Select all applicable\",\n selection_deselect_all_applicable: \"Deselect all applicable\",\n selection_current_count:\n \"{current} applicable {entity} selected.\",\n toggle_to_do: \"{entity} to do\",\n toggle_performed: \"Performed\",\n}\n","export default {\n label_start: \"Start\",\n label_end: \"End\",\n label_start_date: \"Start date\",\n label_deadline: \"Deadline\",\n error_date_time: \"Invalid date. Please enter a date in this format: YYYY-MM-DD HH:MM\",\n error_date: \"Invalid date. Please enter a date in this format: YYYY-MM-DD\",\n error_time: \"Invalid time. Please enter a time in this format: HH:MM\",\n error_future: \"Cannot select a date in the future\",\n error_both: \"Both start and end dates are needed\",\n error_range: \"Your start date needs to be before the end date\",\n}\n","export default {\n input_placeholder: \"Need to do another thing? Put it here\",\n}\n","export default {\n manager_issue:\n \"Includes Superseded and Rejected Issue count\",\n manager_work_order:\n \"Includes Work Orders managed by, but not assigned to, you\",\n technician_issue:\n \"Includes Superseded and Rejected Issue count\",\n technician_work_order:\n \"Includes Work Orders managed by, but not assigned to, you\",\n todo_on_work_order:\n \"On the Work Order, not Performed\",\n performed_on_work_order:\n \"On the Work Order and Performed\",\n has_identifier: \"Has identifier\",\n work_order: \"Added to Work Order\",\n issue: \"Issue added\",\n change_request: \"Change Request made\",\n done: \"This is done.\",\n corrective_work: \"Corrective Work performed\",\n issue_overdue: \"Issue is overdue!\",\n corrective_work_accepted: \"Corrective Work accepted\",\n closed: \"Closed\",\n from_designation: \"From Designation\",\n from_group: \"From Group\",\n from_organisation: \"From Organisation\",\n}\n","export default {\n file_type_provided: \"File type provided\",\n image_file_support: \"Only image file types are supported.\",\n image_select: \"Select image for profile picture.\",\n image_select_gallery: \"From Gallery\",\n image_select_take_photo: \"Take Photo\",\n permission_camera_storage: \"Permission for Camera or Storage are required to change picture.\",\n profile_picture: \"Profile Picture\",\n image_delete_dialog_title: \"Delete User Avatar\",\n image_delete_dialog_content: \"Are you sure you want to delete your user avatar?\",\n}\n","import sfxBreadcrumbs from \"./sfxBreadcrumbs\"\nimport sfxButtons from \"./sfxButtons\"\nimport sfxCard from \"./sfxCard\"\nimport sfxContextMenu from \"./sfxContextMenu\"\nimport sfxDataPoint from \"./sfxDataPoint\"\nimport sfxEmpty from \"./sfxEmpty\"\nimport sfxErrorMsg from \"./sfxErrorMsg\"\nimport sfxHealthIndicator from \"./sfxHealthIndicator\"\nimport sfxImage from \"./sfxImage\"\nimport sfxInput from \"./sfxInput\"\nimport sfxIssues from \"./sfxIssues\"\nimport sfxNavigation from \"./sfxNavigation\"\nimport sfxOverlayNotifications from \"./sfxOverlayNotifications\"\nimport sfxProcedureSteps from \"./sfxProcedureSteps\"\nimport sfxProgressIndicator from \"./sfxProgressIndicator\"\nimport sfxQuaternarySelector from \"./sfxQuaternarySelector\"\nimport sfxScanners from \"./sfxScanners\"\nimport sfxSearch from \"./sfxSearch\"\nimport sfxSelect from \"./sfxSelect\"\nimport sfxSelectObject from \"./sfxSelectObject\"\nimport sfxSeparator from \"./sfxSeparator\"\nimport sfxSpinner from \"./sfxSpinner\"\nimport sfxTable from \"./sfxTable\"\nimport sfxTimeEdit from \"./sfxTimeEdit\"\nimport sfxToDo from \"./sfxToDo\"\nimport sfxTooltip from \"./sfxTooltip\"\nimport sfxUserDisplay from \"./sfxUserDisplay\"\n\nexport default {\n sfxBreadcrumbs,\n sfxButtons,\n sfxCard,\n sfxContextMenu,\n sfxDataPoint,\n sfxEmpty,\n sfxErrorMsg,\n sfxHealthIndicator,\n sfxImage,\n sfxInput,\n sfxIssues,\n sfxNavigation,\n sfxOverlayNotifications,\n sfxProcedureSteps,\n sfxProgressIndicator,\n sfxQuaternarySelector,\n sfxScanners,\n sfxSearch,\n sfxSelect,\n sfxSelectObject,\n sfxSeparator,\n sfxSpinner,\n sfxTable,\n sfxTimeEdit,\n sfxToDo,\n sfxTooltip,\n sfxUserDisplay,\n}\n","export default {\n title: \"Accept Corrective Work\",\n content_confirm:\n \"Are you sure you want to accept the Performed Corrective Work for this Issue?\",\n content_undone: \"This cannot be undone!\",\n checkbox_label: \"Close the Issue\",\n input_label: \"Comment\",\n}\n","export default {\n title: \"Accept Performed Work\",\n content: \"This cannot be undone!\",\n input_label: \"Accepting comment\",\n}\n","export default {\n title: \"Add Attachment\",\n body: \"Do you wish to upload a new file or search the list of existing Attachments and attach an existing file?\",\n hint: \"Hint: Press outside the dialogue to do neither / cancel.\",\n subtitle: \"Add Attachment to {entity}\",\n notification_no_attachments:\n \"There are no other Attachments for you to choose from. You can use the Upload new file button or drag and drop files\",\n}\n","export default {\n title_add_comment_to_entity: \"Add comment to {entity}\",\n label_add_comment_and_photos: \"Add your comment (and photos) here\",\n label_comment: \"Comment\",\n}\n","export default {\n title: \"Attachment details\",\n label_description: \"Description\",\n check_box_allow_downloads: \"Allow downloads\",\n}\n","export default {\n contact_support: \"contact {support}\",\n here: \"here\",\n text1: \"Something went wrong when attempting to authenticate with the server!\",\n text2: \"We have already been notified of this problem.\",\n text3: \"You can check your systems availability \",\n text4: \"If you can provide further information, please \",\n text5: \"YOU WOULD NEED TO MANUALLY SIGN OUT AND LOG BACK IN.\",\n title: \"Authentication error\",\n quote:\n \"I don’t know who you are, I don’t know what you want, but I will find you... and get you logged in.\",\n}\n","export default {\n title_change_password: \"Change Password\",\n input_current_password: \"Password\",\n input_new_password: \"New password\",\n input_repetition: \"Repeat new password\",\n password_changed: \"Password changed successfully\",\n password_incorrect: \"The current password is incorrect\",\n password_requirements:\n \"Password must contain a minimum of 10 characters including 1 upper-case letter, 1 lower-case letter, 1 number and one special symbol, e.g. #$!%&\",\n requirement_one_lowercase: \"Include one lowercase\",\n requirement_one_number: \"Include one number\",\n requirement_one_special_char: \"Include one special character\",\n requirement_one_uppercase: \"Include one uppercase\",\n requirement_same_as_old: \"New password is the same as the Current password\",\n requirement_max_char: \"Maximum 128 characters\",\n requirement_min_char: \"Minimum 10 characters\",\n password_mismatch: \"Passwords do not match!\",\n}\n","export default {\n title_attachment: \"Request Attachment Removal\",\n title_image: \"Request Image Removal\",\n label: \"Reasoning\",\n content: \"Please provide a reason for this request\",\n}\n","export default {\n title_change_unlock_key: \"Change Unlock Key\",\n input_current_password: \"Current password\",\n input_unlock_key: \"Unlock Key\",\n msg_unlock_key_changed: \"Unlock key changed\",\n}\n","export default {\n title: \"Close Corrected Issue\",\n content: \"This cannot be undone!\",\n label: \"Closing comment\",\n}\n","export default {\n title: \"Close without Correction\",\n content:\n \"
This Issue does not have any \" +\n \" accepted Performed Corrective Work. Are you sure you want to close it?

This \" +\n \"cannot be undone!
\",\n label: \"Reasoning\",\n}\n","export default {\n title: \"Close Completed Work Order\",\n content:\n \"Are you sure you want to close the selected Work Order?

This cannot be undone.\",\n label: \"Skip confirmation next time for Completed Work Orders\",\n}\n","export default {\n title: \"Close Work Order\",\n content:\n \"Are you sure you want to close the selected Work Order? It is not completed.

This cannot be undone.\",\n label: \"Closing comment\",\n}\n","export default {\n devtools_already_initiated:\n \"@:support.devtools have already been initiated. Restart the app to retry.\",\n devtools_instructions: \"Enter endpoint parameters to initiate a connection.\",\n devtools_terms:\n \"

If you connect to the development tools, you will be exposing your app data.

\" +\n \"

Please ensure that you are on a trusted network, and that you trust the endpoint you are connecting to.

\" +\n \"

Should you wish to disconnect the connection, open the @:support.devtools menu again.

\",\n host: \"host\",\n invalid_input: \"Invalid input.\",\n port: \"port\",\n prompt_sure: \"Are you sure?\",\n title_devtools: \"Connect to @:support.devtools.\",\n}\n","export default {\n title: \"Fetching data\",\n item_class: \"Fetching Item Classes\",\n attributes: \"Fetching Attributes\",\n items: \"Fetching Items\",\n item_attributes: \"Fetching Item Attribute Values\",\n issues: \"Fetching Issues\",\n work: \"Fetching Work\",\n comments: \"Fetching Comments\",\n identifiers: \"Fetching Identifiers\",\n users: \"Fetching Users\",\n explanation:\n \"Trying to fetch Workspace data. This process only occurs the first time a Workspace is accessed.\",\n}\n","export default {\n title: \"Device permissions needed\",\n info_text_1:\n \"This app, as so many others, needs a number of permissions in order to function properly.\",\n info_text_2: \"The app will ask for each of the following permissions in turn.\",\n video_title: \"Take pictures and record video\",\n video_text_1:\n 'Adding pictures or videos to the various registry objects (Areas, Items, Issues, etc.)',\n video_text_2: \"Scanning QR codes \",\n storage_title: \"Access device storage\",\n storage_text: \"Uploading attachments\",\n location_title: \"Access location information\",\n location_text:\n 'Enables the automatic highlighting of the nearest Workspace, if its coordinates are known.',\n}\n","export default {\n title: \"Discard Performed Work\",\n content:\n 'Are you sure you want to discard this Performed Work?

Any attached photographs will be deleted.',\n}\n","export default {\n good_day_title: \"What do we mean?\",\n good_day_content:\n '
• To wish you a good {time_of_day}
• That it is a good {time_of_day}, whether you want it or not
• That we feel good this {time_of_day}
• That it is a {time_of_day} to be good on
',\n}\n","export default {\n title: \"Edit Correction Information\",\n issue_actions_updated: \"Issue action(s) updated successfully\",\n}\n","export default {\n title: \"Feedback\",\n context: \"Context\",\n subject_label: \"Subject\",\n long_text_label: \"Your feedback\",\n notice_label: \"Your product feedback is sent to {company}.\",\n bug_label: \"This feedback concerns a software problem (bug).\",\n feedback_success: \"Feedback data submitted successfully\",\n feedback_error: \"Failed to send feedback data\",\n}\n","export default {\n title_welcome: \"Welcome to {product}!\",\n text_technician_welcome:\n 'You can always find helpful tips or brief tutorials under Help up in the ' +\n 'Context menu which you’ll find in the top-right corner.

' +\n 'You can make certain configuration choices in the User settings which, ' +\n 'outside the Workspaces list, can be found through More in the Main Menu ' +\n \"at the bottom of most views.

We have set some conservative default configurations.

\" +\n \"That is all! We hope you have a good time.

Help will always be given by {company} to those who ask for it.\",\n text_manager_welcome:\n 'You can always find helpful tips or brief tutorials under Help up in the ' +\n 'Context menu which you’ll find in the top-right corner.

' +\n 'You can make certain configuration choices in the User settings which ' +\n \"can always be found at the top-right, by clicking on your name or avatar.

We have set some conservative default configurations.

\" +\n \"That is all! We hope you have a good time.

Help will always be given by {company} to those who ask for it.\",\n}\n","export default {\n title_400: \"Bad Request\",\n title_401: \"Authorisation Required\",\n title_403: \"Forbidden\",\n title_404: \"Not Found\",\n title_408: \"Request Timeout\",\n title_500: \"Internal Server error\",\n title_501: \"Not Implemented\",\n title_502: \"Bad Gateway\",\n title_503: \"Service unavailable\",\n title_504: \"Gateway Timeout\",\n\n body_400_1: \"Oops! Something went wrong with that action\",\n body_400_2:\n \"We have already been notified of the problem and will investigate. Your data is saved!\",\n body_400_3: \"Please try again later. If it persists, contact {url}.\",\n body_401_1: \"Access denied\",\n body_401_2: \"You need to sign in or provide valid credentials to access this resource.\",\n body_401_3: \"Please contact {url} for assistance.\",\n body_403_1: \"Inadequate permissions\",\n body_403_2: \"You’re not supposed to see this!\",\n body_403_3: \"This means you don’t have the necessary permissions do what you attempted.\",\n body_403_4: \"Please contact your administrator for assistance\",\n body_404_1: \"Oops! We couldn’t find that resource\",\n body_404_2:\n \"It may have been moved or deleted. Please check the URL or try navigating from the Workspace Home.\",\n body_408_1: \"Uh oh! We're having trouble communicating with the server right now.\",\n body_408_2: \"We’ve been notified about this and will investigate. Please try again later.\",\n body_408_3: \"You can check your systems availability {url}.\",\n body_500_1: \"That’s a bug.\",\n body_500_2:\n \"We’re very sorry about that. There’s nothing you can do about this. We have already been notified of the problem and will investigate.\",\n body_500_3: \"Keep track of our progress on this, {url}.\",\n body_501_1: \"We're sorry, but the feature you're trying to access is still in development.\",\n body_501_2: \"We're working on it!\",\n body_502_1: \"Uh oh! We're having trouble communicating with the server right now.\",\n body_502_2: \"We’ve been notified about this and will investigate. Please try again later.\",\n body_503_1: \"The server is temporarily unable to handle your request.\",\n body_503_2: \"We’ve been notified about this and will investigate. Please try again later.\",\n body_503_3: \"You can check your systems availability {url}.\",\n body_504_1: \"Sorry, the server took too long to respond.\",\n body_504_2: \"We’ve been notified about this and will investigate. Please try again later.\",\n\n quote_400:\n \"It is possible to commit no mistakes and still lose. That is not a weakness. That is life.\",\n quote_401: \"Ah ah ah, you didn’t say the magic word!\",\n quote_403: \"That’s for her eyes only.\",\n quote_404: \"What do you say we try that again? Yes, yes. Yes. Without the “oops”.\",\n quote_408: \"Ain’t nobody got time for that.\",\n quote_500: \"No joke for this. That... is... bad.\",\n quote_501: \"Are we there yet?\",\n quote_502: \"...the mighty rampart crumbled; the Black Gate was hurled in ruin...\",\n quote_503: \"Unlike some servers, S A M M Y will never spit in your soup\",\n quote_504: \"This is the final boarding call for S A M M Y. Please proceed to the gate.\",\n\n url_support: \"support\",\n url_here: \"here\",\n}\n","export default {\n title_unknown: \"Unknown Identifier\",\n text1_unknown: 'You scanned an unknown Identifier!',\n text2_unknown:\n 'For new- or re-association between Identifiers and Items, Areas or Locations, first find their Overview via the relevant list and use the Context menu!',\n title_associate: \"Associated Identifier Scanned!\",\n text1_associate:\n 'You scanned an Identifier that is already associated with {entity_old}.',\n text2_associate:\n 'Do you want to remove that association and change the association of this Identifier to {entity_new}?',\n}\n","export default {\n title: \"Confirm removal\",\n body_description:\n \"Are you sure you want to remove this Photo from the {entity}?\",\n body_warning: \"This is irreversible!\",\n}\n","export default {\n title: \"Clone Item\",\n content: 'Do you wish to clone this Item?',\n}\n","export default {\n title: \"Confirm removal\",\n body_description:\n \"Are you sure you want to remove this Attachment from the {entity}? | Are you sure you want to remove these Attachments from the {entity}?\",\n body_warning: \"This is irreversible!\",\n}\n","export default {\n title: \"Identifiers for Item\",\n hint: \"Hint: Press on an Identifier to select it. This enables disassociation.\",\n identifier_all:\n 'Here are all the Identifiers presently associated with this ' +\n 'Item.',\n identifier_none:\n 'There are currently no Identifiers associated with this ' +\n 'Item.',\n}\n","export default {\n title_open_issues_on_item: \"Issues\",\n title_unsubmitted_work_issues: \"Regular Work with raised Issues\",\n text_more_than_one_issue:\n 'Select from the Issues or go to the filtered Issues list!',\n text_raised_issues:\n 'You have raised {count} Issues for this Performed Work.',\n text_proceed: \"How do you wish to proceed?\",\n}\n","export default {\n title: \"Unsubmitted Work\",\n text_body:\n \"You have Unsubmitted Work for this {entity}!\",\n untitled_work: \"Untitled Work\",\n}\n","export default {\n title: \"Work to Perform\",\n text_only_one_work_order:\n \"There’s 1 Work Order referencing this Item.\",\n text_more_than_one_work_order:\n \"Select from the Work Orders or go to the filtered Work Orders list!\",\n performed: \"Performed\",\n}\n","export default {\n subtitle: \"Select Work Order for {entity}\",\n restriction: \"Restricted to applicable Work Domains\",\n}\n","export default {\n contact_support: \"contact {support} \",\n text1:\n \"The app is unable to access the internet. Offline mode can first be used after the app has downloaded what it needs from a Workspace.\",\n text2:\n \"Please try the usual internet-troubleshooting steps: Connected to mobile network/WiFi, the router is on, etc. and try again.\",\n text3: \"If you are certain your device can access the internet, please \",\n title: \"Offline!\",\n quote: \"I don’t know about this new-fangled “Internet” fad... I’ll give it 6 months\",\n}\n","export default {\n title: \"Reject Corrective Work\",\n content:\n \"
Are you sure you want to reject the Performed Corrective Work for this Issue? The Issue will no longer be set as Corrected. This is also reflected in Work Orders, if applicable.

Rejection cannot be undone!
\",\n input_label: \"Reasoning\",\n}\n","export default {\n title: \"Rejected Corrective Work\",\n label_corrective_work_statement: \"Corrective Work Statement\",\n}\n","export default {\n title: \"Reject Issue\",\n content:\n \"
This marks the Issue as rejected and closes it.

\" +\n \"Rejection of Issues conveys not only that the Issue will not be Corrected, but that the Issue should not have been raised at all.

\" +\n \"The Issue will not be included by default in the Issues lists and will not be counted in the statistics for its related object.

\" +\n \"Related un-reviewed Performed Corrective Work will be closed.

\" +\n \"Issue rejection cannot be undone!

\" +\n \"Are you sure you want to proceed?
\",\n input_label: \"Reasoning\",\n}\n","export default {\n title: \"Rejecting Work\",\n content_confirm:\n \"Please confirm that you want to Reject this Performed Work.\",\n content_issue_one:\n \"The Performed Work has associated Raised Issues.\",\n content_issue_two: \"They will remain open by default.\",\n content_issue_three:\n \"Tick the box to mark them all as Closed Without Correction.\",\n checkbox_content:\n \"Close raised Issues without Correction\",\n content_undone: \"rejecting work cannot be undone\",\n input_label: \"Rejection Comment\",\n}\n","export default {\n title: \"Related Unsubmitted Work\",\n content:\n \"Corrective Work exists for this \" +\n \"Issue as Unsubmitted Work.

\" +\n \"How would you like to proceed?\",\n}\n","export default {\n title_issue: \"Remove Issue from Work Order\",\n title_item: \"Remove Item from Work Order\",\n content_issue:\n \"Are you sure you want to remove the Issue from this Work Order?\",\n content_item:\n \"Are you sure you want to remove this Item from the Work Order?\",\n checkbox_label: \"Don’t ask again.\",\n}\n","export default {\n title: \"Select Model of Item\",\n confirm_part1: \"Confirm that you want to register\",\n confirm_part2: 'as the Model of the Item',\n hint: \"Hint: Long-press on a Model in the list to see its Overview screen if you need more details before choosing.\",\n}\n","export default {\n title: \"Stagnant Unsubmitted work\",\n content:\n \"You have unsubmitted work that was drafted {days} days ago! Consider resuming or discarding it through To-Do.\",\n}\n","export default {\n title: \"Supersede Issue\",\n content:\n \"
Are you sure you wish to supersede this Issue?

\" +\n \"This starts a pre-filled "Raise Issue" form on the <Item/\" +\n \"Area> containing exactly the same information, \" +\n \"Step responses and images as in this \" +\n \"Issue.

\" +\n \"This Issue will be irredeemably closed, any unhandled \" +\n \"Corrective Work will be rejected and the superseding \" +\n \"Issue will not \" +\n \"automatically be added to a Work Order.

\" +\n \"If the creation of the superseding Issue\" +\n \" is abandoned, this Issue will remain as it is.
\",\n}\n","export default {\n and: \"and\",\n between: \"between\",\n text1: \"Maintenance is scheduled\",\n text2: \"We hope you will not be too inconvenienced by this.\",\n title: \"Notice!\",\n}\n","export default {\n title: \"Saved Configurations\",\n can_save_config:\n \"You can save up to 8 different, named configurations for the {entity} list.
\",\n config_limit_reached:\n \"You have reached the maximum of 8 saved configurations for {entity} list.

\",\n config_explanation:\n \"These include the configured columns (6 possible in total) and the filtering used with those columns, if any.\",\n favorite_config:\n \"You may pick a favourite which will be used automatically every time the list is opened.\",\n section_save_current_config: \"Save current configuration\",\n section_saved_configs: \"Saved configurations\",\n label_name: \"Name\",\n}\n","export default {\n // To-Do tab dialogs\n label_todo: \"To-Do\",\n prompt_sure: \"Are you sure you want to delete \",\n title_add_todo: \"Add To-Do\",\n title_delete_todo: \"Delete To-Do\",\n title_edit_todo: \"Edit To-Do item\",\n title_discard_todo: \"Discard all\",\n content_discard_todo:\n \"Are you sure you want to discard the {amount} To-Dos marked DONE?\",\n content_discard_todo_all: \"Remove ALL to-dos\",\n\n // Unsubmitted Work tab dialogs\n title_discard_all: \"Discard all\",\n title_discard_selected: \"Discard selected\",\n title_discard_unsubmitted: \"Discard Unsubmitted Work\",\n content_discard_all: \"Are you sure you want to discard all your unsubmitted work?\",\n content_discard_selected: \"Are you sure you want to discard the selected unsubmitted work?\",\n content_discard_unsubmitted: \"Are you sure you want to discard the unsubmitted work?\",\n}\n","export default {\n title: \"Unsaved Changes\",\n content:\n \"There are unsaved changes on this page. If you continue, the data will not be saved. Are you sure you would like to continue?\",\n}\n","export default {\n title: \"Unsaved Changes\",\n content: \"Are you sure you want to abort the creation of this Work Order?\",\n}\n","export default {\n title: \"Unsubmitted Issues!\",\n body_description:\n \"You’re trying to discard Performed Work where you raised {amount} Issue. If you confirm, the Issue will be raised without any reference to Performed Work.|You’re trying to discard Performed Work where you raised {amount} Issues. If you confirm, the Issues will be raised without any reference to Performed Work.\",\n label_checkbox:\n \"Discard the unsubmitted Issue|Discard the unsubmitted Issues\",\n}\n","export default {\n title: \"User settings\",\n title_change_unlock_key: \"Change Unlock Key\",\n title_data_transfer: \"Data transfer and prioritization settings\",\n title_interface: \"Interface and configuration\",\n title_other: \"Other stuff\",\n title_security: \"Security\",\n title_workflow: \"Workflow configuration\",\n tab_information: \"Information\",\n tab_configuration: \"Configuration\",\n dark_mode: \"Dark mode\",\n dark_mode_true_label: \"On\",\n dark_mode_false_label: \"Off\",\n dark_mode_indeterminate_label: \"Match system settings\",\n easterEggs_false_label: \"No adventures for me, thank you. Not today.\",\n easterEggs_true_label: \"I’m going on an adventure!\",\n easterEgg_notification: \"There is always more about you than anyone expects!\",\n internet_connectivity: \"General internet connectivity\",\n internet_false_label: \"Mostly offline\",\n internet_true_label: \"Mostly online\",\n issues: \"Press on Issues (#), Items/Areas\",\n language_select_label: \"Language\",\n location_select:\n \"Selecting Location for an Item\",\n location_select_false_label: \"By marker on Layout\",\n location_select_true_label: \"Search and Filter\",\n notifications: \"Enable animation on notifications bell\",\n download_all_data: \"Download all non-file data on Workspace start-up\",\n performed_work:\n \"When all required Issues have been raised after Performed Work the work is always done.\",\n prioritize_data:\n \"Prioritize data and files related to my assigned Work Orders\",\n set_password: \"Set Password\",\n set_unlock_key: \"Set Unlock Key\",\n skip_list: \"Skip lists with only 1 Object and go to Object overview\",\n trinary_false_label: \"Open the filtered Issues list\",\n trinary_indeterminate_label: \"Let me choose each time\",\n trinary_true_label: \"Perform Work immediately, top-down\",\n tutorial: \"Show tips and tricks\",\n work_orders: \"Press on Work Orders (#), Items/Areas\",\n}\n","export default {\n //Discard partially raised Issues dialog text\n discard_raised_issues_title: \"Discard partially raised Issues\",\n discard_raised_issues_content_1:\n \"One or more of the Performed Work has related unsubmitted Issues you have set to be raised.\",\n discard_raised_issues_content_2:\n \"Discarding the unsubmitted Performed Work will also remove the unsubmitted Issues!\",\n discard_raised_issues_content_3: \"Are you sure you want to do this?\",\n}\n","export default {\n title: \"Performed Work must be reviewed!\",\n body_content:\n \"The open Performed Corrective Work must be either rejected or accepted before the Issue can be {operation}.\",\n closed: \"closed\",\n rejected: \"rejected\",\n superseded: \"superseded\",\n deleted: \"deleted\",\n}\n","export default {\n title: \"Save Work {entity}\",\n label_removed:\n \"{entity} removed from Work Order\",\n label_added:\n \"{entity} added to Work Order\",\n label_to_do:\n \"{entity} to do on Work Order\",\n label_total:\n \"Total {entity} included in Work Order\",\n label_save_changes: \"Do you want to save these changes?\",\n}\n","export default {\n title_item: \"Remove Item from Work Order\",\n title_issue: \"Remove Issue from Work Order\",\n content_item:\n \"Are you sure you want to remove this Item from the Work Order?\",\n content_issue:\n \"Are you sure you want to remove this Issue from the Work Order?\",\n label: \"Don't ask again.\",\n}\n","import sfxDialogAcceptCorrectiveWork from \"./sfxDialogAcceptCorrectiveWork\"\nimport sfxDialogAcceptWork from \"./sfxDialogAcceptWork\"\nimport sfxDialogAddAttachments from \"./sfxDialogAddAttachments\"\nimport sfxDialogAddComment from \"./sfxDialogAddComment\"\nimport sfxDialogAttachmentDetails from \"./sfxDialogAttachmentDetails\"\nimport sfxDialogAuthentication from \"./sfxDialogAuthentication\"\nimport sfxDialogChangePassword from \"./sfxDialogChangePassword\"\nimport sfxDialogChangeRequest from \"./sfxDialogChangeRequest\"\nimport sfxDialogChangeUnlockKey from \"./sfxDialogChangeUnlockKey\"\nimport sfxDialogCloseIssueCorrected from \"./sfxDialogCloseIssueCorrected\"\nimport sfxDialogCloseIssueNotCorrected from \"./sfxDialogCloseIssueNotCorrected\"\nimport sfxDialogCloseWorkOrderCompleted from \"./sfxDialogCloseWorkOrderCompleted\"\nimport sfxDialogCloseWorkOrderNotCompleted from \"./sfxDialogCloseWorkOrderNotCompleted\"\nimport sfxDialogConnectVueDevtools from \"./sfxDialogConnectVueDevtools\"\nimport sfxDialogDataFetch from \"./sfxDialogDataFetch\"\nimport sfxDialogDevicePermission from \"./sfxDialogDevicePermission\"\nimport sfxDialogDiscardWork from \"./sfxDialogDiscardWork\"\nimport sfxDialogEasterEgg from \"./sfxDialogEasterEgg\"\nimport sfxDialogEditCorrectionInfo from \"./sfxDialogEditCorrectionInfo\"\nimport sfxDialogFeedback from \"./sfxDialogFeedback\"\nimport sfxDialogHelp from \"./sfxDialogHelp\"\nimport sfxDialogHttp from \"./sfxDialogHttp\"\nimport sfxDialogIdentifier from \"./sfxDialogIdentifier\"\nimport sfxDialogImageDelete from \"./sfxDialogImageDelete\"\nimport sfxDialogItemClone from \"./sfxDialogItemClone\"\nimport sfxDialogListAttachmentDelete from \"./sfxDialogListAttachmentDelete\"\nimport sfxDialogListIdentifier from \"./sfxDialogListIdentifier\"\nimport sfxDialogListIssue from \"./sfxDialogListIssue\"\nimport sfxDialogListUnsubmittedWork from \"./sfxDialogListUnsubmittedWork\"\nimport sfxDialogListWorkOrder from \"./sfxDialogListWorkOrder\"\nimport sfxDialogListWorkOrderSelect from \"./sfxDialogListWorkOrderSelect\"\nimport sfxDialogOffline from \"./sfxDialogOffline\"\nimport sfxDialogRejectCorrectiveWork from \"./sfxDialogRejectCorrectiveWork\"\nimport sfxDialogRejectedCorrectiveWork from \"./sfxDialogRejectedCorrectiveWork\"\nimport sfxDialogRejectIssue from \"./sfxDialogRejectIssue\"\nimport sfxDialogRejectWork from \"./sfxDialogRejectWork\"\nimport sfxDialogRelatedUnsubmittedWork from \"./sfxDialogRelatedUnsubmittedWork\"\nimport sfxDialogRemoveEntityFromWorkOrder from \"./sfxDialogRemoveEntityFromWorkOrder\"\nimport sfxDialogSelectModel from \"./sfxDialogSelectModel\"\nimport sfxDialogStagnantWork from \"./sfxDialogStagnantWork\"\nimport sfxDialogSupersedeIssue from \"./sfxDialogSupersedeIssue\"\nimport sfxDialogSystem from \"./sfxDialogSystem\"\nimport sfxDialogTableConfigurations from \"./sfxDialogTableConfigurations\"\nimport sfxDialogToDo from \"./sfxDialogToDo\"\nimport sfxDialogUnsavedChanges from \"./sfxDialogUnsavedChanges\"\nimport sfxDialogUnsavedWorkOrderDraft from \"./sfxDialogUnsavedWorkOrderDraft\"\nimport sfxDialogUnsubmittedIssues from \"./sfxDialogUnsubmittedIssues\"\nimport sfxDialogUserSettings from \"./sfxDialogUserSettings\"\nimport sfxDialogWarning from \"./sfxDialogWarning\"\nimport sfxDialogWorkMustBeReviewed from \"./sfxDialogWorkMustBeReviewed\"\nimport sfxDialogWorkOrderEntities from \"./sfxDialogWorkOrderEntities\"\nimport sfxDialogWorkOrderRemoveEntity from \"./sfxDialogWorkOrderRemoveEntity\"\n\nexport default {\n sfxDialogAcceptCorrectiveWork,\n sfxDialogAcceptWork,\n sfxDialogAddAttachments,\n sfxDialogAddComment,\n sfxDialogAttachmentDetails,\n sfxDialogAuthentication,\n sfxDialogChangePassword,\n sfxDialogChangeRequest,\n sfxDialogChangeUnlockKey,\n sfxDialogCloseIssueCorrected,\n sfxDialogCloseIssueNotCorrected,\n sfxDialogCloseWorkOrderCompleted,\n sfxDialogCloseWorkOrderNotCompleted,\n sfxDialogConnectVueDevtools,\n sfxDialogDataFetch,\n sfxDialogDevicePermission,\n sfxDialogDiscardWork,\n sfxDialogEasterEgg,\n sfxDialogEditCorrectionInfo,\n sfxDialogFeedback,\n sfxDialogHelp,\n sfxDialogHttp,\n sfxDialogIdentifier,\n sfxDialogImageDelete,\n sfxDialogItemClone,\n sfxDialogListAttachmentDelete,\n sfxDialogListIdentifier,\n sfxDialogListIssue,\n sfxDialogListUnsubmittedWork,\n sfxDialogListWorkOrder,\n sfxDialogListWorkOrderSelect,\n sfxDialogOffline,\n sfxDialogRejectCorrectiveWork,\n sfxDialogRejectedCorrectiveWork,\n sfxDialogRejectIssue,\n sfxDialogRejectWork,\n sfxDialogRelatedUnsubmittedWork,\n sfxDialogRemoveEntityFromWorkOrder,\n sfxDialogSelectModel,\n sfxDialogStagnantWork,\n sfxDialogSupersedeIssue,\n sfxDialogSystem,\n sfxDialogTableConfigurations,\n sfxDialogToDo,\n sfxDialogUnsavedChanges,\n sfxDialogUnsavedWorkOrderDraft,\n sfxDialogUnsubmittedIssues,\n sfxDialogUserSettings,\n sfxDialogWarning,\n sfxDialogWorkMustBeReviewed,\n sfxDialogWorkOrderEntities,\n sfxDialogWorkOrderRemoveEntity,\n}\n","export default {\n photo_gallery: \"Photo gallery\",\n}\n","export default {\n header_issues: \"Issues\",\n header_work_orders: \"Work Orders\",\n header_performed_work: \"Performed Work\",\n header_items: \"Items\",\n header_events: \"Events\",\n header_comments: \"Comments\",\n header_layouts_with_zone: \"Layouts with Zone\",\n\n label_sort_by: \"Sort by\",\n label_sort_order: \"Sort order\",\n label_when_clicked: \"When clicked\",\n\n config_sort_by_priority: \"Priority\",\n config_sort_by_raised: \"Raised\",\n config_sort_by_deadline: \"Deadline\",\n config_sort_by_issue_work_order: \"Issue / Work Order Priority\",\n config_sort_by_designation: \"Designation\",\n config_sort_by_designation_layout: \"Layout Designation\",\n config_sort_by_designation_area: \"Area Designation\",\n config_sort_by_item_id: \"Item ID\",\n config_sort_by_performed_date: \"Performed date-time\",\n config_sort_by_issue_raised: \"Issue Raised\",\n config_sort_by_issue_priority: \"Issue Priority\",\n\n config_descending: \"Descending\",\n config_ascending: \"Ascending\",\n\n config_open_overview: \"Open Overview\",\n config_open_corrective_work: \"Ad-hoc Corrective Work\",\n config_open_add_to_work_order: \"Add to Work-Order\",\n config_open_perform_work: \"Perform Work\",\n config_open_display_on_layout: \"Display on Layout\",\n config_open_display_zone_on_layout: \"Display Zone on Layout\",\n config_open_item_list_for_area: \"Open Item list sorted for Area\",\n config_open_area_overview: \"Open Area Overview (if applicable)\",\n\n label_include_item_no_area: \"Include Items with no Area\",\n label_include_item_no_location: \"Include Items with no Location\",\n\n label_click_not_performed_items: \"Clicking on non-performed Items\",\n label_click_not_performed_issues: \"Clicking on non-performed Issues\",\n label_click_performed_items: \"Clicking on performed Items\",\n label_click_performed_issues: \"Clicking on performed Issues\",\n label_hide_performed: \"Hide performed\",\n\n config_statistic_mean: \"Mean\",\n config_statistic_median: \"Median\",\n config_statistic_mode: \"Mode\",\n\n config_yes: \"Yes\",\n config_no: \"No\",\n config_true: \"True\",\n config_false: \"False\",\n\n config_click_open_item: \"Open Item Overview\",\n config_click_open_issue: \"Open Issue Overview\",\n config_click_open_perform_work: \"Open Perform Work\",\n config_click_perform_work: \"Perform Work\",\n}\n","export default {\n initiate: \"Initiating...\",\n login_required: \"You need to login in order to use the app.\",\n error_initiate:\n \"There was an error during app initiation/user sign-in. Please try again or contact {url} for assistance.\",\n error_offline:\n \"The app is unable to access the internet. Offline mode can first be used after the app has downloaded what it needs from a Workspace.\",\n try_again: \"Try Again\",\n}\n","export default {\n title: \"Issues\",\n table_column_title_label: \"Title\",\n table_column_entity_label: \"Entity\",\n table_column_entity_grouping_label: \"Entity Grouping\",\n table_column_layout_label: \"Layout\",\n table_column_raised_label: \"Raised\",\n table_column_closed_date_label: \"Closed date\",\n table_column_updated_label: \"Last Updated\",\n table_column_work_domain_label: \"Work domain\",\n table_column_priority_label: \"Priority\",\n table_column_entity_grouping_item_class: \"Item Class\",\n table_column_entity_grouping_area_attribute_set: \"Area Attribute Set\",\n item: \"Item\",\n tab_issue: \"Issue\",\n tab_item: \"Item\",\n tab_accepted_corrective_work: \"Accepted Corrective Work\",\n tab_corrective_work: \"Corrective Work\",\n tab_events: \"Events\",\n tab_comments: \"Comments\",\n title_state_and_history: \"State and History\",\n work_domain_label: \"Work domain\",\n deadline_label: \"Deadline for Correction\",\n issue_description_label: \"Issue description\",\n model_label: \"Model\",\n correction_info_label: \"Correction Information\",\n corrective_action_label: \"Corrective Action\",\n material_requirements_label: \"Material requirements\",\n time_requirements_label: \"Time requirements\",\n additional_requirements_label: \"Additional requirements\",\n isolation: \"Isolation\",\n shutdown: \"Shutdown\",\n designation_label: \"Designation\",\n title_raise_issue: \"Raise Issue\",\n entity_ref_label: \"Existing Issues\",\n select_priority_label: \"Select a Priority\",\n issue_more_info: \"Provide more information about the Issue\",\n placeholder_issue_designation: \"Issue Designation\",\n placeholder_title_reference: \"__-____\",\n issue_state_display: \"Issue state display\",\n issue_overview: \"Issue Overview\",\n no_correction_info: \"No Correction Information\",\n no_correction_info_given: \"No Correction Information has been given.\",\n no_correction_info_quote: \"Must be self-sealing stem bolts...\",\n}\n","export default {\n title: \"Items\",\n item_overview: \"Item Overview\",\n table_column_designation_label: \"Designation\",\n table_column_item_id_label: \"Item ID\",\n table_column_location_id_label: \"Location ID\",\n table_column_item_class_label: \"Item Class\",\n table_column_model_label: \"Model\",\n table_column_location_label: \"Location access\",\n table_column_layout_label: \"Layout\",\n tab_overview: \"Overview\",\n tab_item_data: \"Item data\",\n tab_model_data: \"Model data\",\n tab_attached: \"Attached\",\n tab_related_items: \"Related Items\",\n item: \"Item\",\n tab_issues: \"Issues\",\n tab_issues_with_count: \"Issues ({count} Open)\",\n tab_work_orders: \"Work Orders\",\n tab_work_orders_with_count: \"Work Orders ({count} Open)\",\n item_class_label: \"Item Class\",\n item_id_label: \"Item ID\",\n designation_label: \"Designation\",\n item_designation_label: \"Item Designation\",\n most_recent_issue_label: \"Most recent Issue\",\n issues_meantime: \"Mean time between Issues\",\n next_issue: \"Predicted next Issue\",\n most_recent_work_label: \"Most recent Performed Work\",\n work_meantime: \"Mean time between Work\",\n previous_work: \"Previous Work\",\n missing_data: \"Not enough data yet...\",\n workspace_name: \"Workspace Name\",\n title_configure_issues_n_work: \"Configure Issues and Work Orders\",\n title_issues_n_work: \"Issues and Work\",\n tab_data_id: \"ID\",\n tab_data_designation: \"Designation\",\n tab_data_item_class: \"Item Class\",\n tab_data_location: \"Location\",\n tab_data_model: \"Model\",\n tab_data_update_item: \"Item successfully updated\",\n tab_data_error_value_unique: \"Value must be unique\",\n tab_data_error_form: \"Some of the fields above have errors. Please fix them in order to submit\",\n breadcrumb_create_item: \"Create Item\",\n breadcrumb_clone_item: \"Clone Item\",\n error_value_unique: \"Value must be unique\",\n item_created: \"Item successfully created\",\n error_attributes:\n \"There was an error trying to create attributes. Please update them in the items overview page.\",\n}\n","export default {\n title: \"Performed Work\",\n title_regular_work: \"Performed Regular Work\",\n title_performed_corrective_work: \"Performed Corrective Work\",\n title_right_container_corrective: \"Events and Comments\",\n title_right_container_regular: \"Issues, Events and Comments\",\n title_right_container_corrective_configure: \"Configure Events and Comments\",\n title_right_container_regular_configure: \"Configure Issues, Events and Comments\",\n title_corrective_work: \"Corrective Work\",\n table_column_designation_label: \"Work Title\",\n table_column_work_domain_label: \"Work Domain\",\n table_column_entity_grouping_label: \"Entity Grouping\",\n table_column_entity_grouping_item_class: \"Item Class\",\n table_column_entity_grouping_area_attribute_set: \"Area Attribute Set\",\n table_column_entity_label: \"Entity\",\n table_column_work_type_label: \"Work type\",\n table_column_work_type_regular_work: \"Regular Work\",\n table_column_work_type_corrective_work: \"Corrective Work\",\n table_column_work_order_label: \"Work Order\",\n table_column_date_performed_label: \"Date Performed\",\n tab_work_instructions: \"Work Instructions\",\n tab_item: \"Item\",\n tab_issue: \"Issue\",\n tab_issues: \"Raised Issues\",\n tab_issues_open_count: \"Raised Issues ({count} Open)\",\n tab_events: \"Events\",\n tab_comments: \"Comments\",\n work_statement_label: \"Work Statement\",\n corrective_work_statement_label: \"Corrective Work Statement\",\n performed_corrective_work: \"Performed Corrective Work\",\n}\n","export default {\n title: \"Work Orders\",\n title_overview: \"Work Order Overview\",\n title_simple: \"Work Order\",\n title_work_order_items: \"Work Items\",\n title_work_order_issues: \"Work Issues\",\n title_side_panel: \"Work Order side-panel\",\n title_issue_work_comments: \"Issues, Performed Work and Comments\",\n title_item_work_comments: \"Items, Performed Work and Comments\",\n title_configure_issue_work_comments: \"Configure Issues, Performed Work and Comments\",\n title_configure_item_work_comments: \"Configure Items, Performed Work and Comments\",\n tab_overview: \"Overview\",\n tab_parameters_instructions: \"Parameters and Instructions\",\n tab_attached: \"Attached\",\n tab_issues: \"Issues\",\n tab_items: \"Items\",\n tab_performed_work: \"Performed Work\",\n tab_comments: \"Comments\",\n tab_issues_with_count: \"Issues ({count})\",\n tab_items_with_count: \"Items ({count})\",\n tab_performed_work_with_count: \"Performed Work ({count})\",\n tab_comments_with_count: \"Comments ({count})\",\n label_work_domain: \"Work Domain\",\n label_designation: \"Designation\",\n label_work_order_designation: \"Work Order Designation\",\n label_deadline: \"Deadline\",\n label_reference: \"Reference\",\n label_time_requirements: \"Time Requirements\",\n label_material_requirements: \"Material Requirements\",\n label_work_instructions: \"Work Instructions\",\n label_work_information: \"Work Information\",\n label_work_type: \"Work Type\",\n label_priority: \"Priority\",\n label_start_date: \"Start Date\",\n label_started: \"Started\",\n label_created_by: \"Created By\",\n label_entity_type: \"Entity Type\",\n items: \"Items\",\n areas: \"Areas\",\n issues: \"Issues\",\n corrective_work: \"Corrective Work\",\n regular_work: \"Regular Work\",\n restricted: \"Results restricted to Work Domain {designation}\",\n label_select_priority: \"Select a priority\",\n label_target_procedure: \"Target procedure\",\n label_accepted_alternative: \"Accepted Alternative Procedure\",\n label_assignments: \"Assignments\",\n label_daily_participants: \"Daily participants\",\n label_participants_actual_and_assigned: \"Participants (Actual {'|'} Assigned)\",\n label_average_minutes: \"Average Minutes per Work\",\n label_hours_to_complete: \"Hours to complete\",\n label_daily_average: \"Daily average work hours\",\n create_work_order: \"Create Work Order\",\n error_unique_reference: \"Entered reference is already taken. Please enter a unique value.\",\n error_value_integer: \"Value must be a positive integer\",\n requirements_expectations: \"requirements and expectations\",\n discard_requirements_dialog_title: \"Discarding entries\",\n discard_requirements_dialog_content: \"Are you sure you want to discard these entries?\",\n work_order_create: \"Work Order Create\",\n work_order_corrective: \"Work Order Corrective\",\n work_order_regular: \"Work Order Regular\",\n work_performed_count: \"Performed ({count} / {totalCount})\",\n work_not_performed_count:\n \"Not Performed ({count} / {totalCount})\",\n nofity_disable_time: \"Start date must be set first\",\n notify_disable_draft_has_issue: \"Work Domain must match the Work Domain of the issue\",\n notify_disable_work_domain_priority: \"Work domain must be selected first\",\n tooltip_participants: \"Expected average daily count of participants\",\n tooltip_average_minute: \"Expected average time in minutes to complete 1 Performed Work\",\n tooltip_hours_complete: \"Total amount of hours the entire Work Order is expected to take\",\n tooltip_hours_daily: \"Expected daily hours contributed by each participant\",\n}\n","export default {\n title: \"Workspaces\",\n title_chart_area: \"Total open Issues - Trendlines\",\n title_chart_treemap: \"Issue priority distribution\",\n treemap_raised: \"Raised\",\n treemap_work_order: \"In Work Order\",\n treemap_corrected: \"Corrected\",\n treemap_total: \"In Total\",\n tab_overview: \"Overview\",\n tab_issue: \"Issue analytics\",\n tab_work_domain: \"Work Domains\",\n tab_you: \"You\",\n work_domains_title: \"Work Domains and you\",\n workspace_home: \"Workspace Home\",\n table_column_overview_label: \"Overview\",\n table_column_organisation_label: \"Organisation\",\n table_column_group_label: \"Group\",\n table_column_items_label: \"Items (#)\",\n table_column_areas_label: \"Areas (#)\",\n table_column_issues_label: \"Issues (#)\",\n table_column_work_orders_label: \"Work Orders (#)\",\n table_column_ws_health_label: \"Workspace Health\",\n\n // Workspace Overview\n workspace_info_title: \"Workspace information\",\n assignments_title: \"Assignments and unassessed Issues\",\n work_title: \"Work and Work Orders\",\n change_requests_title: \"Change requests\",\n designation_label: \"Designation\",\n organisation_label: \"Organisation\",\n items_label: \"Items\",\n areas_label: \"Areas\",\n layouts_label: \"Layouts\",\n locations_label: \"Locations\",\n models_label: \"Models\",\n zones_label: \"Zones\",\n admins_label: \"Administrators\",\n notes_label: \"Notes\",\n assignments_label: \"Assignments\",\n issues_label: \"Open Issues\",\n corrective_work_label: \"Unassessed Corrective Work\",\n regular_work_label: \"Unassessed Regular Work\",\n overdue_work_label: \"Overdue Work Orders\",\n obstructed_work_label: \"Obstructed Work\",\n data_changes_label: \"Data changes\",\n location_changes_label: \"Location changes\",\n file_changes_label: \"File changes\",\n work_orders_title: \"Work and Work Orders\",\n work_orders_assigned_label: \"Assignments\",\n work_orders_label: \"Open Work Orders\",\n // The bar needs special escaping, because is used for pluralization in vue-i18n.\n performed_work_label: \"Unassessed Performed Work (Corrective {'|'} Regular)\",\n}\n","import attachments from \"./attachments\"\nimport entityConfig from \"./entityConfig\"\nimport initiateApp from \"./initiateApp\"\nimport issues from \"./issues\"\nimport items from \"./items\"\nimport performedWork from \"./performedWork\"\nimport workOrder from \"./workOrder\"\nimport workspaces from \"./workspaces\"\n\nexport default {\n attachments,\n entityConfig,\n initiateApp,\n issues,\n items,\n performedWork,\n workOrder,\n workspaces,\n}\n","export default {\n item: \"Item\",\n item_model: \"Model\",\n corrective_work: \"Performed Work, Corrective\",\n corrective_work_order: \"Work Order\",\n regular_work: \"Performed Work, Regular\",\n regular_work_order: \"Work Order\",\n issue: \"Issue\",\n area: \"Area\",\n zone: \"Zone\",\n}\n","export default {\n area: \"Area\",\n attachment: \"Attachment\",\n attributes: \"Attributes\",\n error: \"Bug\",\n location: \"Location\",\n issue: \"Issue\",\n item: \"Item\",\n layout: \"Layout\",\n model: \"Model\",\n performed_work: \"Performed Work\",\n to_do: \"To-do\",\n notification: \"Notification\",\n unsubmitted_work: \"Unsubmitted work\",\n workspace: \"Workspace\",\n photo: \"Photo\",\n image: \"Image\",\n work_order: \"Work Order\",\n zone: \"Zone\",\n}\n","export default {\n performed_work: \"Performed work successfully submitted!\",\n mandatory_fields_empty: \"The mandatory fields can not be empty\",\n issue_raised: \"The Issue was raised successfully!\",\n issues_raised: \"All Issues were raised successfully!\",\n issue_removed_from_work_order: \"The Issue was removed from the Work Order.\",\n all_raised: \"Work Performed and Issues raised successfully!\",\n unsubmitted_work: \"Your work is saved in “Unsubmitted Work”!\",\n removed_todo: \"Removed {removedItem}\",\n deselected_previous_selection: \"Your selections were deselected.\",\n direct_notification: \"A notification from\",\n new_notification: \"You have a new notification.\",\n maintenance: \"Maintenance Scheduled\",\n assigned_work_order: \"Assigned you to a Work Order\",\n commented_work_order: \"Commented on Work Order\",\n commented_performed_work: \"Commented on your Performed Work\",\n rejected_issue: \"Rejected your Issue\",\n rejected_work: \"Rejected your Work\",\n accepted_work: \"Accepted your Work\",\n corrected_issue: \"Corrected an Issue you raised\",\n added_issue: \"Added your Issue to a Work Order\",\n default_event_name: \"Event occurred\",\n event_start: \"starting\",\n time_period: \"minutes\",\n identify_propose: \"Identifier proposed\",\n identify_associated: \"Identifier associated\",\n identify_association_changed: \"Identifier association changed!\",\n identify_dissociate: \"Identifier disassociated!\",\n identifier_already_associated: \"The identifier is already associated with {entityDesignation}\",\n not_implemented: \"This feature has not been implemented yet.\",\n saved_as_unsubmitted_work: \"Saved as Unsubmitted Work\",\n deleted_unsubmitted_work: \"Deleted Unsubmitted Work\",\n connection_lost: \"Internet connection lost\",\n connection_reestablished: \"Internet connection re-established\",\n photo_removed: \"Photo removed\",\n need_camera_permission:\n \"The app needs to use your camera, but camera permission has not been granted.\",\n need_file_system_permission:\n \"The app needs to use your file storage, but file storage permission has not been granted.\",\n file_size_exceeded:\n \"The total size of the files you have selected exceeded {maxFileSize}MB, which is the maximum allowed size\",\n file_type_not_allowed:\n \"One or more files you have selected contained unaccepted file type. Allowed file types are {fileTypes}\",\n files_not_accepted: \"The following files were not accepted: {files}\",\n files_empty: \"Some of the files were empty. If this is a mistake, please try again.\",\n file_empty: \"The file is empty or corrupted. If this is a mistake, please try again.\",\n corrective_work_not_allowed: \"The work domain {workDomain} doesn't allow this action\",\n regular_work_not_allowed: \"There are no work domains on which work can be performed\",\n corrective_work_already_exists:\n \"A corrective work titled '{correctiveWorkTitle}' already exists on this Issue\",\n bad_regular_work_guard: \"There was a problem trying to resolve regular work creation\",\n bad_corrective_work_guard: \"There was a problem trying to resolve corrective work creation\",\n bad_file_read: \"Could not read file/s correctly. Please try again.\",\n bad_file_download: \"There was an issue while trying to download the file.\",\n closed_issue: \"Closed Issue without Correction\",\n closed_corrected_issue: \"Closed Corrected Issue\",\n closed_work_order: \"Work order closed\",\n closed_completed_work_order: \"Completed work order closed\",\n issue_rejected: \"Rejecting Issue\",\n accept_corrective_work: \"Accepted Corrective Work\",\n rejected_corrective_work: \"Rejected Corrective Work\",\n data_fetched: \"All data successfully fetched\",\n issue_closed: \"This Issue has already been closed!\",\n issue_closed_success: \"The issue closed successfully\",\n work_order_corrective_closed_success: \"The corrective work order closed successfully\",\n work_order_regular_closed_success: \"The regular work order closed successfully\",\n regular_work_accepted: \"The Regular Work has been accepted!\",\n regular_work_rejected: \"The Regular Work has been rejected!\",\n corrective_work_accepted: \"The Corrective Work has been accepted!\",\n corrective_work_rejected: \"The Corrective Work has been rejected!\",\n issue_rejected_success: \"The issue rejected successfully\",\n issue_has_accepted_corrective_work: \"This Issue has accepted Corrective Work\",\n attachment_added: \"Attachment added!\",\n attachment_adding: \"Adding {name}\",\n unsubmitted_work_discarded: \"Unsubmitted work discarded successfully\",\n unsubmitted_work_on_issue_exists: \"An Unsubmitted Corrective Work for this issue already exists!\",\n image_uploading: \"Image is being uploaded...|Images are being uploaded...\",\n batch_error_partial: \"Not all entries submitted successfully: {entries}\",\n batch_error_full: \"Entries submission failed: {entries}\",\n issue_has_multiple_user_interactions:\n \"More than one user has interacted with this Issue. Hence it is not possible to delete this Issue\",\n bad_issue_id:\n \"We could not find the relevant Issue data. Please try again later or contact support\",\n work_order_draft_created: \"Work Order draft created!\",\n work_order_updated: \"Work Order updated!\",\n item_added_to_work_order: \"Item added to the regular work order successfully\",\n issue_added_to_work_order: \"Issue added to the corrective work order successfully\",\n issue_changed_work_order: \"Changed issue work order successfully\",\n location_not_enabled: \"Location services not enabled on device\",\n}\n","export default {\n alt_logo: \"{product} Logo\",\n alt_watermark: \"{company} Watermark\",\n support: \"support\",\n}\n","export default {\n issue_update: \"Only Supervisor or Manager has the permission to perform this action\",\n no_access: \"You do not have permission to perform this action\",\n issue_in_work_order:\n \"Issue is part of a Corrective Work Order and you do not have permission to update it\",\n access_create: \"Create\",\n access_read: \"Read\",\n access_update: \"Update\",\n access_delete: \"Delete\",\n access_admin: \"Access to Admin Panels\",\n permission_attributes: \"Attributes\",\n permission_audit: \"Audit\",\n permission_change_approvals: \"Change Approvals\",\n permission_change_requests: \"Change Requests\",\n permission_organisations: \"Organisations\",\n permission_files: \"Files\",\n permission_gis: \"GIS\",\n permission_history: \"History\",\n permission_identifiers: \"Identifiers\",\n permission_issues: \"Issues\",\n permission_items: \"Items\",\n permission_license_accounts: \"License Accounts\",\n permission_oauth_apps: \"Authentication Apps\",\n permission_oauth_tokens: \"Authentication Tokens\",\n permission_performed_work: \"Performed Work\",\n permission_planning: \"Planning\",\n permission_procedures: \"Procedures\",\n permission_service_providers: \"Service Providers\",\n permission_springboard_admin_ui: \"Springboard Admin UI\",\n permission_user_accounts: \"User Accounts\",\n permission_user_roles: \"User Roles\",\n permission_user_settings: \"User Settings\",\n permission_vpc: \"VPC\",\n permission_workspaces: \"Workspaces\",\n permission_workspace_admin_ui: \"Workspace Admin UI\",\n permission_work_domains: \"Work Domains\",\n permission_work_orders: \"Work Orders\",\n one_or_more_issues: \"One or more Issues are not closed due to lack of permissions\",\n issue_close_no_permission: \"You do not have permission to close this issue\",\n}\n","export default {\n // Text relating to the future\n coming_soon: \"Coming Soon...\",\n\n // Text for getGreeting function\n good_morning: \"Good Morning\",\n good_day: \"Good Day\",\n good_afternoon: \"Good Afternoon\",\n good_evening: \"Good Evening\",\n\n // Text for getTemporalInfo function\n minute_ago: \" minute ago\",\n minutes_ago: \" minutes ago\",\n hour_ago: \" hour ago\",\n hours_ago: \" hours ago\",\n day_ago: \" day ago\",\n days_ago: \" days ago\",\n day: \" day\",\n days: \" days\",\n today: \"Today\",\n in_x_weeks: \"next week | in {weeks} weeks\",\n x_weeks_ago: \"last week | {weeks} weeks ago\",\n in: \"In \",\n was_date: \"was {date}\",\n deadline: \"Deadline\",\n latest_raised: \"Latest raised \",\n next_deadline: \"Next deadline \",\n last_deadline: \"Last deadline \",\n\n // Text for timeRequirement function\n day_with_placeholder: \"{day} day\",\n days_with_placeholder: \"{day} days\",\n days_and_hours: \"{day} days and {hour} hours\",\n days_and_hour: \"{day} days and {hour} hour\",\n day_and_hours: \"{day} day and {hour} hours\",\n day_and_hour: \"{day} day and {hour} hour\",\n hour_with_placeholder: \"{hour} hour\",\n hours_with_placeholder: \"{hour} hours\",\n hours_and_minutes: \"{hour} hours and {minute} minutes\",\n hours_and_minute: \"{hour} hours and {minute} minute\",\n hour_and_minutes: \"{hour} hour and {minute} minutes\",\n hour_and_minute: \"{hour} hour and {minute} minute\",\n minute_with_placeholder: \"{minute} minute\",\n minutes_with_placeholder: \"{minute} minutes\",\n less_than_a_minute: \"Less than a minute\",\n\n // Text for data point deadline\n issue_overdue_by_soon: \"Overdue by less than a day\",\n issue_overdue_in_24: \"In less than 24 hours\",\n issue_overdue_by_day_one: \"Overdue by 1 day\",\n issue_overdue_by_day_multiple: \"Overdue by {days} days\",\n issue_deadline_in_day_one: \"In 1 day\",\n issue_deadline_in_day_multiple: \"In {days} days\",\n issue_deadline_in_week: \"In 1 week\",\n\n hours_minutes: \"{hour} hours {minute} minutes\",\n hours_minute: \"{hour} hours 1 minute\",\n hour_minutes: \"1 hour {minute} minutes\",\n hour_minute: \"1 hour 1 minute\",\n\n generic_overdue: \"Overdue\",\n generic_behind: \"Behind\",\n\n not_applicable: \"N/A\",\n}\n","export default {\n label_system_link: \"System Link\",\n x_selected: \"{count} selected\",\n}\n","import attachmentContext from \"./attachmentContext\"\nimport entity from \"./entity\"\nimport notifications from \"./notifications\"\nimport others from \"./others\"\nimport permissionNotifications from \"./permissionNotifications\"\nimport time from \"./time\"\nimport filter from \"./filter\"\n\nexport default {\n attachmentContext,\n entity,\n notifications,\n others,\n permissionNotifications,\n time,\n filter,\n}\n","import components from \"./components/index\"\nimport dialogs from \"./dialogs/index\"\nimport manager from \"./pages-manager/index\"\nimport technician from \"./pages-technician/index\"\nimport utils from \"./utils/index\"\n\nconst pages = process.env.IS_MANAGER_MODE ? manager : technician\n\nexport default {\n ...components,\n ...dialogs,\n ...pages,\n ...utils,\n}\n","import enUS from \"./en-US\"\n\nexport default {\n \"en-US\": enUS,\n}\n","import { boot } from \"quasar/wrappers\"\nimport messages from \"src/i18n\"\nimport { createI18n } from \"vue-i18n\"\n\nconst i18n = createI18n({\n locale: \"en-US\",\n legacy: false,\n messages,\n warnHtmlMessage: false, // As long as we don't use translation on user input, we would be safe\n})\n\nexport default boot(({ app }) => {\n // Set i18n instance on app\n app.use(i18n)\n})\n\nexport { i18n }\n","import { Notify } from \"quasar\"\nimport { boot } from \"quasar/wrappers\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\n\nexport default boot(() => {\n Notify.registerType(\"sfx-notification\", {\n color: \"secondary\",\n textColor: \"white\",\n classes: \"sfx-notification text-subtitle1\",\n iconSize: \"32px\",\n })\n\n Notify.registerType(\"sfx-notification-error\", {\n color: \"negative\",\n textColor: \"white\",\n classes: \"sfx-notification text-subtitle1\",\n icon: Icons.ERROR,\n iconSize: \"32px\",\n })\n\n Notify.registerType(\"sfx-notification-accent\", {\n color: \"accent\",\n textColor: \"white\",\n classes: \"sfx-notification text-subtitle1\",\n iconSize: \"32px\",\n })\n\n Notify.registerType(\"sfx-notification-warning\", {\n color: \"warning\",\n textColor: \"white\",\n classes: \"sfx-notification text-subtitle1\",\n icon: Icons.WARNING,\n iconSize: \"32px\",\n })\n})\n","import * as Sentry from \"@sentry/browser\"\nimport * as SentryVue from \"@sentry/vue\"\nimport { Platform } from \"quasar\"\nimport { boot } from \"quasar/wrappers\"\nimport { Log } from \"src/util/classes/log\"\n\nconst DSN_KEY = \"https://80879f6b71da4034b2f0b01137c38998@o33876.ingest.sentry.io/5731323\"\nconst serializationDepth = 4\nconst environment = determineEnvironment()\nconst maxReplayDuration = 300000 // 5 minutes\n\nconst ignoredErrorList = [\n \"setOptions failed\", // Internal issue with googles media handler https://github.com/zxing-js/ngx-scanner/issues/297\n \"setPhotoOptions failed\",\n \"ResizeObserver loop completed with undelivered notifications.\",\n \"ResizeObserver loop limit exceeded\", // Couldn't get the animation frame in time. Not important https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n \"Using addListener() without 'await' is deprecated.\", // Capacitor developers being bad!\n // TODO: We shouldn't really ignore those, but we need to tinker with DB stuff. For now this should be safe to ignore.\n \"Another connection wants to delete database\", // Triggered when we do sfx.nukeEverything whilst we have the DB open\n]\n\nexport default boot(async ({ app, router }) => {\n if (process.env.MODE === \"capacitor\") {\n const SentryCapacitor = await import(\"@src-capacitor/@sentry/capacitor\")\n SentryCapacitor.init(\n {\n dsn: DSN_KEY,\n },\n SentryVue.init\n )\n }\n\n SentryVue.init({\n app,\n dsn: DSN_KEY,\n environment,\n normalizeDepth: serializationDepth,\n\n // Put all the end points that we communicate with here\n tracePropagationTargets: [\"localhost\", /^\\//],\n\n // Allow for offline caching of requests\n transport: Sentry.makeBrowserOfflineTransport(Sentry.makeFetchTransport),\n\n integrations: [\n // For some reason the typings are off, however, the official guide is using the same code\n // Additionally, there are no reports of this being broken.\n // @ts-expect-error: Typings of router and sentry expectations don't match\n Sentry.browserTracingIntegration({ router }),\n\n Sentry.feedbackIntegration({ autoInject: false }),\n\n SentryVue.captureConsoleIntegration({\n // array of methods that should be captured\n // defaults to ['log', 'info', 'warn', 'error', 'debug', 'assert']\n levels: [\"warn\", \"error\", \"info\"],\n }),\n\n SentryVue.extraErrorDataIntegration({\n // Limit of how deep the object serializer should go. Anything deeper than limit will\n // be replaced with standard Node.js REPL notation of [Object], [Array], [Function] or\n // a primitive value. Defaults to 3.\n // When changing this value, make sure to update `normalizeDepth` of the whole SDK\n // to `depth + 1` in order to get it serialized properly - https://docs.sentry.io/platforms/javascript/configuration/options/#normalize-depth\n depth: serializationDepth,\n }),\n\n Sentry.replayIntegration({\n maskAllText: false,\n blockAllMedia: true,\n mutationLimit: 1000,\n maxReplayDuration,\n }),\n ],\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1,\n\n trackComponents: true,\n\n ignoreErrors: ignoredErrorList,\n\n // This sets the sample rate to be 10%. You may want this to be 100% while\n // in development and sample at a lower rate in production\n replaysSessionSampleRate: 0.1,\n\n // If the entire session is not sampled, use the below sample rate to sample\n // sessions when an error occurs.\n replaysOnErrorSampleRate: 1,\n })\n\n // Handle unhandled Vue specific errors\n app.config.errorHandler = (error) => {\n const errorStr = error?.toString()\n if (errorStr && ignoreErrors(errorStr)) return\n\n Log.error({ message: \"Unhandled Vue error\", error })\n }\n\n // Handle unhandled non-Vue specific errors\n window.addEventListener(\"error\", (event) => {\n if (ignoreErrors(event.message)) return\n\n Log.error({ message: \"Unhandled error\", error: event.error, data: { event } })\n })\n})\n\n/**\n * Function for determining the Sentry environment.\n *\n * NOTE: This function has a sibling doing the same job in `quasar.config.js` for builds.\n * If this is updated, please also update the sibling.\n */\nfunction determineEnvironment() {\n const isDev = process.env.DEV ? \"-dev\" : \"-prod\"\n const mode = getMode()\n return mode + isDev\n}\n\nfunction getMode() {\n if (process.env.MODE === \"capacitor\") {\n if (Platform.is.android) return \"android\"\n if (Platform.is.ios) return \"ios\"\n }\n return process.env.MODE ?? \"unknown_environment\"\n}\n\nfunction ignoreErrors(currentError: string) {\n for (const error of ignoredErrorList) {\n if (currentError.startsWith(error)) return true\n }\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { Attachment, AttachmentData } from \"src/util/types/dataModels/attachment\"\n\n//region Types\n\nexport type AttachmentDocument = RxDocument\nexport type AttachmentCollection = RxCollection\nexport type AttachmentDataCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for attachment collections\n */\nexport const attachmentSchema: RxJsonSchema = {\n title: \"Attachment schema\",\n description: \"Attachments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", maxLength: 255 },\n extension: { type: \"string\" },\n description: { type: \"string\" },\n size: { type: \"number\", final: true },\n state: { type: \"number\", minimum: -1, maximum: 2 },\n state_reason: { type: \"string\" },\n context: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n attachments: { encrypted: false },\n required: [\"id\", \"name\"],\n}\n\nexport const attachmentDataSchema: RxJsonSchema = {\n title: \"Attachment schema\",\n description: \"Attachments Data\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { ref: \"attachments\", type: \"string\", maxLength: 36, uniqueItems: true },\n path: { type: \"string\" },\n type: { type: \"string\" },\n },\n attachments: { encrypted: false },\n required: [\"id\", \"path\", \"type\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const attachmentCollectionCreator: RxCollectionCreator = {\n schema: attachmentSchema,\n}\n\nexport const attachmentDataCollectionCreator: RxCollectionCreator = {\n schema: attachmentDataSchema,\n}\n","import { KeyFunctionMap, RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { getDB } from \"src/db/databases\"\nimport {\n AttributeChar,\n AttributeCharValueBase,\n AttributeNumeric,\n AttributeNumericValueBase,\n AttributeSelect,\n AttributeSelectOptions,\n AttributeSelectValueBase,\n AttributeSelectWithOptions,\n AttributeTemporal,\n AttributeTemporalValueBase,\n AttributeValueCharFull,\n AttributeValueNumericFull,\n AttributeValueSelectFull,\n AttributeValueTemporalFull,\n} from \"src/util/types/dataModels/attribute\"\n\n//region Types\n\ntype AttributeRelations = \"item\" | \"item_model\" | \"area\" | \"location\"\n\nexport interface AttributeSelectDocumentMethods extends KeyFunctionMap {\n populateWithOptions: () => Promise\n}\n\nexport interface AttributeCharValueCollectionMethods extends KeyFunctionMap {\n getValuesForEntity(\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]>\n}\nexport interface AttributeNumericValueCollectionMethods extends KeyFunctionMap {\n getValuesForEntity(\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]>\n}\nexport interface AttributeSelectValueCollectionMethods extends KeyFunctionMap {\n getValuesForEntity(\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]>\n}\nexport interface AttributeTemporalValueCollectionMethods extends KeyFunctionMap {\n getValuesForEntity(\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]>\n}\n\nexport type AttributeCharCollection = RxCollection\nexport type AttributeCharValueCollection = RxCollection<\n AttributeValueCharFull,\n object,\n AttributeCharValueCollectionMethods\n>\nexport type AttributeNumericCollection = RxCollection\nexport type AttributeNumericValueCollection = RxCollection<\n AttributeValueNumericFull,\n object,\n AttributeNumericValueCollectionMethods\n>\nexport type AttributeSelectCollection = RxCollection<\n AttributeSelect,\n AttributeSelectDocumentMethods\n>\nexport type AttributeSelectOptionsCollection = RxCollection\nexport type AttributeSelectValueCollection = RxCollection<\n AttributeValueSelectFull,\n object,\n AttributeSelectValueCollectionMethods\n>\nexport type AttributeTemporalCollection = RxCollection\nexport type AttributeTemporalValueCollection = RxCollection<\n AttributeValueTemporalFull,\n object,\n AttributeTemporalValueCollectionMethods\n>\n\n//endregion\n\n/**\n * Schema for char type attribute collections\n */\nexport const attributeCharSchema: RxJsonSchema = {\n title: \"Char attribute schema\",\n description: \"Char attributes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", maxLength: 100 },\n description: { type: \"string\" },\n order: { type: \"number\", minimum: 0, maximum: 32767 },\n autocomplete: { type: \"boolean\" },\n allow_blank: { type: \"boolean\" },\n max_length: { type: \"number\", minimum: 0, maximum: 32767 },\n },\n required: [\"id\", \"autocomplete\", \"allow_blank\"],\n indexes: [\"updated_dt\"],\n}\n\nexport const attributeCharValueSchema: RxJsonSchema = {\n title: \"Char attribute values schema\",\n description: \"Char attributes values for all attributes\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n value: { type: \"string\" },\n item: { ref: \"item\", type: \"string\", maxLength: 36 },\n item_model: { ref: \"item_model\", type: \"string\", maxLength: 36 },\n area: { ref: \"area\", type: \"string\", maxLength: 36 },\n location: { ref: \"location\", type: \"string\", maxLength: 36 },\n attribute: { ref: \"attribute_char\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"attribute\", \"value\"],\n indexes: [\"attribute\"],\n}\n\n/**\n * Schema for numeric type attribute collections\n */\nexport const attributeNumericSchema: RxJsonSchema = {\n title: \"Numeric attribute schema\",\n description: \"Numeric attributes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", maxLength: 100 },\n description: { type: \"string\" },\n order: { type: \"number\", minimum: 0, maximum: 32767 },\n decimals: { type: \"number\", minimum: 0, maximum: 32767 },\n min: { type: \"number\" },\n max: { type: \"number\" },\n },\n required: [\"id\", \"decimals\"],\n}\n\nexport const attributeNumericValueSchema: RxJsonSchema = {\n title: \"Numeric attribute values schema\",\n description: \"Numeric attributes values for all attributes\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n value: { type: \"number\" },\n item: { ref: \"item\", type: \"string\", maxLength: 36 },\n item_model: { ref: \"item_model\", type: \"string\", maxLength: 36 },\n area: { ref: \"area\", type: \"string\", maxLength: 36 },\n location: { ref: \"location\", type: \"string\", maxLength: 36 },\n attribute: { ref: \"attribute_numeric\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"attribute\", \"value\"],\n indexes: [\"attribute\"],\n}\n\n/**\n * Schema for select type attribute collections\n */\nexport const attributeSelectSchema: RxJsonSchema = {\n title: \"Select attribute schema\",\n description: \"Select attributes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", maxLength: 100 },\n description: { type: \"string\" },\n order: { type: \"number\", minimum: 0, maximum: 32767 },\n allow_multiple_selections: { type: \"boolean\" },\n },\n required: [\"id\", \"allow_multiple_selections\"],\n}\n\n/**\n * Schema for select options type attribute collections\n */\nexport const attributeSelectOptionsSchema: RxJsonSchema = {\n title: \"Select options attribute schema\",\n description: \"Select options attributes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 32 },\n updated_dt: { type: \"string\", maxLength: 32 },\n value: { type: \"string\", maxLength: 200 },\n attribute: { ref: \"attribute_select\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"attribute\", \"value\"],\n}\n\nexport const attributeSelectValueSchema: RxJsonSchema = {\n title: \"Char attribute values schema\",\n description: \"Char attributes values for all attributes\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n attribute_select_options: {\n type: \"array\",\n uniqueItems: true,\n items: { ref: \"attribute_select_options\", type: \"string\" },\n },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n item: { ref: \"item\", type: \"string\", maxLength: 36 },\n item_model: { ref: \"item_model\", type: \"string\", maxLength: 36 },\n area: { ref: \"area\", type: \"string\", maxLength: 36 },\n location: { ref: \"location\", type: \"string\", maxLength: 36 },\n attribute: { ref: \"attribute_select\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"attribute\", \"attribute_select_options\"],\n indexes: [\"attribute\"],\n}\n\n/**\n * Schema for temporal type attribute collections\n */\nexport const attributeTemporalSchema: RxJsonSchema = {\n title: \"Temporal attribute schema\",\n description: \"Temporal attributes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", maxLength: 100 },\n description: { type: \"string\" },\n order: { type: \"number\", minimum: 0, maximum: 32767 },\n enable_date: { type: \"boolean\" },\n enable_time: { type: \"boolean\" },\n },\n required: [\"id\", \"enable_date\", \"enable_time\"],\n}\n\nexport const attributeTemporalValueSchema: RxJsonSchema = {\n title: \"Temporal attribute values schema\",\n description: \"Temporal attributes values for all attributes\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n date: { type: \"string\" },\n time: { type: \"string\" },\n item: { ref: \"item\", type: \"string\", maxLength: 36 },\n item_model: { ref: \"item_model\", type: \"string\", maxLength: 36 },\n area: { ref: \"area\", type: \"string\", maxLength: 36 },\n location: { ref: \"location\", type: \"string\", maxLength: 36 },\n attribute: { ref: \"attribute_temporal\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"attribute\"],\n indexes: [\"attribute\"],\n}\n\nexport const attributeCharValueCollectionMethods: AttributeCharValueCollectionMethods = {\n async getValuesForEntity(\n this: AttributeCharValueCollection,\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]> {\n return this.find().where(entity).eq(entityID).exec()\n },\n}\n\nexport const attributeNumericValueCollectionMethods: AttributeNumericValueCollectionMethods = {\n async getValuesForEntity(\n this: AttributeNumericValueCollection,\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]> {\n return this.find().where(entity).eq(entityID).exec()\n },\n}\n\nexport const attributeSelectValueCollectionMethods: AttributeSelectValueCollectionMethods = {\n async getValuesForEntity(\n this: AttributeSelectValueCollection,\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]> {\n return this.find().where(entity).eq(entityID).exec()\n },\n}\n\nexport const attributeTemporalValueCollectionMethods: AttributeTemporalValueCollectionMethods = {\n async getValuesForEntity(\n this: AttributeTemporalValueCollection,\n entity: AttributeRelations,\n entityID?: string\n ): Promise[]> {\n return this.find().where(entity).eq(entityID).exec()\n },\n}\n\n// TODO: Is this even needed any more?\nexport const attributeSelectMethods: AttributeSelectDocumentMethods = {\n async populateWithOptions(this: RxDocument) {\n const db = await getDB()\n const options = await db.attribute_select_options\n .find()\n .where(\"attribute\")\n .equals(this.id)\n .exec()\n\n const mutatedSelectAttribute = this.toMutableJSON()\n const mutatedOptions = options.map((option) => option.toMutableJSON())\n\n const populatedSelectAttribute: AttributeSelectWithOptions = {\n ...mutatedSelectAttribute,\n options: mutatedOptions,\n }\n\n return populatedSelectAttribute\n },\n}\n\n// A set of collection creators that can be passed to the database when setting up collections\n\nexport const attributeCharCollectionCreator: RxCollectionCreator = {\n schema: attributeCharSchema,\n}\n\nexport const attributeCharValueCollectionCreator: RxCollectionCreator = {\n schema: attributeCharValueSchema,\n statics: attributeCharValueCollectionMethods,\n}\n\nexport const attributeNumericCollectionCreator: RxCollectionCreator = {\n schema: attributeNumericSchema,\n}\n\nexport const attributeNumericValueCollectionCreator: RxCollectionCreator = {\n schema: attributeNumericValueSchema,\n statics: attributeNumericValueCollectionMethods,\n}\n\nexport const attributeSelectCollectionCreator: RxCollectionCreator = {\n schema: attributeSelectSchema,\n methods: attributeSelectMethods,\n}\n\nexport const attributeSelectOptionsCollectionCreator: RxCollectionCreator = {\n schema: attributeSelectOptionsSchema,\n}\n\nexport const attributeSelectValueCollectionCreator: RxCollectionCreator = {\n schema: attributeSelectValueSchema,\n statics: attributeSelectValueCollectionMethods,\n}\n\nexport const attributeTemporalCollectionCreator: RxCollectionCreator = {\n schema: attributeTemporalSchema,\n}\n\nexport const attributeTemporalValueCollectionCreator: RxCollectionCreator = {\n schema: attributeTemporalValueSchema,\n statics: attributeTemporalValueCollectionMethods,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { CorrectiveWorkConclusion } from \"src/util/types/dataModels/genericObject\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\n\n//region Types\n\nexport type CorrectiveWorkOnItemDocument = RxDocument\n\nexport type CorrectiveWorkOnItemCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for corrective work on item collections\n */\nexport const correctiveWorkOnItemSchema: RxJsonSchema = {\n title: \"Performed Corrective Work On Item schema\",\n description: \"Collection of all performed corrective work on item\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: false, // TODO: temp fix to overcome a RxDB issue\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n declared_dt: { type: \"string\", maxLength: 64 },\n procedure_results: { type: \"object\" },\n concluded_dt: { type: \"string\", maxLength: 64 },\n conclusion: { type: \"string\", enum: [\"accepted\", \"rejected\"] as CorrectiveWorkConclusion[] },\n concluded_by_user: { type: \"string\", maxLength: 36 }, // UUID\n title: { type: \"string\", maxLength: 100 },\n description: { type: \"string\", maxLength: 2048 },\n work_domain: { ref: \"work_domain_workspace\", type: \"string\", maxLength: 36 }, // UUID\n procedure_revision: { type: \"string\", maxLength: 36 }, // UUID\n performed_by_user: { type: \"string\", maxLength: 36 }, // UUID\n work_order: { type: \"string\", maxLength: 36 }, // UUID\n issue: { ref: \"issues_on_item\", type: \"string\", maxLength: 36 }, // UUID\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"title\", \"work_domain\", \"performed_by_user\", \"issue\"],\n indexes: [\"issue\", \"updated_dt\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const correctiveWorkOnItemCollectionCreator: RxCollectionCreator = {\n schema: correctiveWorkOnItemSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { PerformedWorkComment } from \"src/util/types/dataModels/performedWork\"\n\n//region Types\n\nexport type CorrectiveWorkItemCommentDocument = RxDocument\nexport type CorrectiveWorkItemCommentCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for corrective work on item comment collections\n */\nexport const correctiveWorkItemCommentSchema: RxJsonSchema = {\n title: \"Corrective Work on Item Comment schema\",\n description: \"Collection of all the corrective work on item comments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n user: { type: \"string\", maxLength: 36 },\n performed_work: { type: \"string\", maxLength: 36 },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"text\", \"user\", \"performed_work\"],\n indexes: [\"performed_work\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const correctiveWorkItemCommentCollectionCreator: RxCollectionCreator = {\n schema: correctiveWorkItemCommentSchema,\n}\n","import {\n DeepReadonlyObject,\n KeyFunctionMap,\n RxCollection,\n RxCollectionCreator,\n RxDocument,\n RxJsonSchema,\n} from \"rxdb\"\nimport {\n Identifier,\n IdentifierAssociationType,\n IdentifierList,\n IdentifierType,\n} from \"src/util/types/dataModels/identifier\"\n\n//region Types\n\nexport interface IdentifierCollectionMethods extends KeyFunctionMap {\n bulkInsertByType: (data: IdentifierList) => Promise\n bulkInsertAndUpdateByType: (data: IdentifierList) => Promise\n checkForIdentifier: (id: string, type: IdentifierAssociationType) => Promise\n getListOfIdentifiers: (\n id: string,\n type: IdentifierAssociationType\n ) => Promise[]>\n getScannedIdentifier: (\n data: string,\n type: IdentifierType\n ) => Promise | null>\n}\n\nexport type IdentifierCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for identifier collections.\n */\nexport const identifierSchema: RxJsonSchema = {\n title: \"Identifier schema\",\n description: \"Database for containing the identifier values\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n data: { type: \"string\", maxLength: 256 },\n type: { type: \"string\", enum: [\"qr\", \"rfid\", \"barcode\"] as IdentifierType[] },\n item: { ref: \"item\", type: \"string\", maxLength: 36 },\n area: { type: \"string\", maxLength: 36 }, // FK to areas\n location: { type: \"string\", maxLength: 36 }, // FK to locations\n },\n required: [\"id\", \"data\", \"type\"],\n indexes: [\"updated_dt\", \"item\", \"area\", \"location\"],\n} as const\n\nexport const identifierCollectionMethods: IdentifierCollectionMethods = {\n async bulkInsertByType(this: IdentifierCollection, data: IdentifierList) {\n const flattenedData = Object.values(data).flat()\n await this.bulkInsert(flattenedData)\n },\n\n async bulkInsertAndUpdateByType(this: IdentifierCollection, data: IdentifierList): Promise {\n const flattenedData = Object.values(data).flat()\n const insertResults = await this.bulkInsert(flattenedData)\n\n // Error status 409 is for conflict in data, which is what we need\n const dataToUpdate = insertResults.error\n .filter(\n (item) =>\n item.status === 409 && item.documentInDb?.updated_dt !== item.writeRow.document.updated_dt\n )\n .map((item) => item.writeRow.document)\n\n await this.bulkUpsert(dataToUpdate)\n },\n\n async checkForIdentifier(\n this: IdentifierCollection,\n id: string,\n type: IdentifierAssociationType\n ): Promise {\n // Using \"count\" is faster than \"findOne\" since it doesn't need to access the document data.\n const identifierCount = await this.count().where(type).eq(id).exec()\n return Boolean(identifierCount)\n },\n\n async getListOfIdentifiers(\n this: IdentifierCollection,\n id: string,\n type: IdentifierAssociationType\n ): Promise[]> {\n const identifiersDB = await this.find().where(type).eq(id).exec()\n return identifiersDB.map((doc: RxDocument) => doc.toJSON())\n },\n\n async getScannedIdentifier(\n this: IdentifierCollection,\n data: string,\n type: IdentifierType\n ): Promise | null> {\n return await this.findOne().where({ type, data }).exec()\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections.\n */\nexport const identifierCollectionCreator: RxCollectionCreator = {\n schema: identifierSchema,\n statics: identifierCollectionMethods,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { IssuesOnItemAction } from \"src/util/types/dataModels/issue\"\n\n//region Types\n\nexport type IssueOnItemActionsCollection = RxCollection\n\nexport type IssueOnItemActionsDocument = RxDocument\n\n//endregion\n\n/**\n * Schema for issue on item actions collections\n */\nexport const issueOnItemActionsSchema: RxJsonSchema = {\n title: \"IssueOnItem Actions schema\",\n description: \"Collection of all Actions for an Issue On Item\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n time_estimate: { type: \"string\" },\n isolation_required: { type: \"boolean\" },\n shutdown_required: { type: \"boolean\" },\n procedure_step_bool: { type: \"string\", maxLength: 36 }, // UUID\n procedure_step_numeric: { type: \"string\", maxLength: 36 }, // UUID\n procedure_step_select: { type: \"string\", maxLength: 36 }, // UUID\n procedure_step_photo: { type: \"string\", maxLength: 36 }, // UUID\n procedure_step_verify: { type: \"string\", maxLength: 36 }, // UUID\n issue: { ref: \"issue_on_item\", type: \"string\", maxLength: 36 }, // UUID\n },\n required: [\"id\", \"text\", \"issue\"],\n indexes: [\"issue\", \"updated_dt\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const issueOnItemActionsCollectionCreator: RxCollectionCreator = {\n schema: issueOnItemActionsSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { IssueComment } from \"src/util/types/dataModels/issueComment\"\n\n//region Types\n\nexport type IssueOnItemCommentDocument = RxDocument\nexport type IssueOnItemCommentCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for issue on item comment collections\n */\nexport const issueOnItemCommentSchema: RxJsonSchema = {\n title: \"Issue on Item Comment schema\",\n description: \"Collection of all the issue on item comments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n reaffirmed: { type: \"boolean\" },\n user: { type: \"string\", maxLength: 36 },\n issue: { type: \"string\", maxLength: 36 },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"text\", \"reaffirmed\", \"user\", \"issue\"],\n indexes: [\"issue\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const issueOnItemCommentCollectionCreator: RxCollectionCreator = {\n schema: issueOnItemCommentSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\n\n//region Types\n\nexport type IssuePriorityDocument = RxDocument\nexport type IssuePriorityCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for issue priority collections\n */\nexport const issuePrioritySchema: RxJsonSchema = {\n title: \"Issue Priority schema\",\n description: \"Collection of all issue priorities\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n label: { type: \"string\", maxLength: 100 },\n risk_factor: { type: \"number\", maximum: 100, minimum: 1 },\n days_to_correct: { type: \"number\", maximum: 32767, minimum: 0 },\n work_domain: { type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"label\", \"risk_factor\", \"work_domain\"],\n indexes: [\"label\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const issuePriorityCollectionCreator: RxCollectionCreator = {\n schema: issuePrioritySchema,\n}\n","import {\n DeepReadonlyObject,\n KeyFunctionMap,\n RxCollection,\n RxCollectionCreator,\n RxDocument,\n RxJsonSchema,\n} from \"rxdb\"\nimport { IssueConclusion } from \"src/util/types/dataModels/genericObject\"\nimport { IssuesOnItem } from \"src/util/types/dataModels/issue\"\n\n//region Types\n\nexport interface IssuesOnItemCollectionMethods extends KeyFunctionMap {\n getIssuesTotal: () => Promise\n getLatestIssue: () => Promise | undefined>\n}\n\nexport type IssueOnItemDocument = RxDocument\n\nexport type IssuesOnItemCollection = RxCollection<\n IssuesOnItem,\n KeyFunctionMap,\n IssuesOnItemCollectionMethods\n>\n\n//endregion\n\n/**\n * Schema for issues on item collections\n */\nexport const issuesOnItemSchema: RxJsonSchema = {\n title: \"Issues On Item schema\",\n description: \"Collection of all issues on item\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 }, // Date\n updated_dt: { type: \"string\", maxLength: 64 }, // Date\n declared_dt: { type: \"string\", maxLength: 64 }, // Date\n title: { type: \"string\", maxLength: 100 },\n reference: { type: \"string\", maxLength: 80 },\n description: { type: \"string\", maxLength: 2048 },\n concluded_dt: { type: \"string\", maxLength: 64 }, // Date\n conclusion: {\n type: \"string\",\n enum: [\"closed\", \"closed_resolved\", \"rejected\"] as IssueConclusion[],\n },\n main_image: { ref: \"attachment\", type: \"string\", maxLength: 36 }, // UUID\n superseded_by: { type: \"string\", maxLength: 36 }, // UUID\n raised_by_user: { type: \"string\", maxLength: 36 }, // UUID\n concluded_by_user: { type: \"string\", maxLength: 36 }, // UUID\n work_domain: { ref: \"work_domain_workspace\", type: \"string\", maxLength: 36 }, // UUID\n priority: { ref: \"issue_priority\", type: \"string\", maxLength: 36 }, // UUID\n actionable_item: { ref: \"item\", type: \"string\", maxLength: 36 }, // UUID\n corrective_work_order: { type: \"string\", maxLength: 36 }, // UUID\n raised_from: { type: \"string\", maxLength: 36 }, // UUID\n related_procedure_steps_bool: { type: \"array\", items: { type: \"string\" } },\n related_procedure_steps_numeric: { type: \"array\", items: { type: \"string\" } },\n related_procedure_steps_select: { type: \"array\", items: { type: \"string\" } },\n related_procedure_steps_photo: { type: \"array\", items: { type: \"string\" } },\n related_procedure_steps_verify: { type: \"array\", items: { type: \"string\" } },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"title\", \"raised_by_user\", \"work_domain\", \"priority\", \"actionable_item\"],\n indexes: [\"title\", \"priority\", \"actionable_item\", \"updated_dt\"],\n}\n\nexport const issuesOnItemCollectionMethods: IssuesOnItemCollectionMethods = {\n async getIssuesTotal(this: IssuesOnItemCollection): Promise {\n return await this.count().exec()\n },\n\n async getLatestIssue(\n this: IssuesOnItemCollection\n ): Promise | undefined> {\n const resultsDB: IssueOnItemDocument[] = await this.find().exec()\n\n // No issues found\n if (resultsDB.length === 0) return\n\n const latestIssue = resultsDB.reduce((a, b) => {\n return new Date(a.declared_dt || a.created_dt).getTime() >\n new Date(b.declared_dt || b.created_dt).getTime()\n ? a\n : b\n })\n return latestIssue.toJSON()\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const issuesOnItemCollectionCreator: RxCollectionCreator = {\n schema: issuesOnItemSchema,\n statics: issuesOnItemCollectionMethods,\n}\n","import { KeyFunctionMap, RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { Item } from \"src/util/types/dataModels/item\"\n\n//region Types\n\nexport interface ItemCollectionMethod extends KeyFunctionMap {\n getItemIds: () => Promise>\n}\n\nexport type ItemDocument = RxDocument\n\nexport type ItemCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for item collections\n */\nexport const itemSchema: RxJsonSchema = {\n title: \"Item schema\",\n description: \"Collection of all items\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n item_id: { type: \"string\", minLength: 1 },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 256, minLength: 1 },\n main_image: { ref: \"attachment\", type: \"string\", maxLength: 36 },\n item_class: { ref: \"item_class\", type: \"string\", maxLength: 36 }, // UUID\n location: { type: \"string\", maxLength: 36 }, // UUID\n item_model: { ref: \"item_model\", type: \"string\", maxLength: 36 }, // UUID\n restricted_to_procedures: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"item_id\", \"designation\", \"item_class\"],\n indexes: [\"item_class\", \"location\", \"item_model\"],\n}\n\nexport const itemCollectionMethods: ItemCollectionMethod = {\n async getItemIds(this: ItemCollection): Promise {\n const allDocs: ItemDocument[] = await this.find().exec()\n return allDocs.map((item) => item.item_id)\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const itemCollectionCreator: RxCollectionCreator = {\n schema: itemSchema,\n statics: itemCollectionMethods,\n}\n","import { RxCollection, RxCollectionCreator, RxJsonSchema } from \"rxdb\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\n\n//region Types\n\nexport type ItemClassCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for item class collections\n */\nexport const itemClassSchema: RxJsonSchema = {\n title: \"Item class schema\",\n description: \"Item classes for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 100 },\n enable_model: { type: \"boolean\" },\n attributes_char_item: {\n type: \"array\",\n ref: \"attribute_char\",\n items: {\n type: \"string\",\n },\n },\n attributes_numeric_item: {\n type: \"array\",\n ref: \"attribute_numeric\",\n items: {\n type: \"string\",\n },\n },\n attributes_temporal_item: {\n type: \"array\",\n ref: \"attribute_temporal\",\n items: {\n type: \"string\",\n },\n },\n attributes_select_item: {\n type: \"array\",\n ref: \"attribute_select\",\n items: {\n type: \"string\",\n },\n },\n attributes_char_model: {\n type: \"array\",\n ref: \"attribute_char\",\n items: {\n type: \"string\",\n },\n },\n attributes_numeric_model: {\n type: \"array\",\n ref: \"attribute_numeric\",\n items: {\n type: \"string\",\n },\n },\n attributes_temporal_model: {\n type: \"array\",\n ref: \"attribute_temporal\",\n items: {\n type: \"string\",\n },\n },\n attributes_select_model: {\n type: \"array\",\n ref: \"attribute_select\",\n items: {\n type: \"string\",\n },\n },\n restricted_to_work_domains: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n restricted_to_procedures: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"designation\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const itemClassCollectionCreator: RxCollectionCreator = {\n schema: itemClassSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxJsonSchema } from \"rxdb\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\n\n//region Types\n\nexport type ItemModelCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for item model collections\n */\nexport const itemModelSchema: RxJsonSchema = {\n title: \"Item model schema\",\n description: \"Item models for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 200 },\n main_image: { ref: \"attachment\", type: \"string\", maxLength: 36 },\n model_code: { type: \"string\", maxLength: 200 },\n type_description: { type: \"string\" },\n manufacturer: { type: \"string\", maxLength: 200 },\n item_class: { ref: \"item_class\", type: \"string\", maxLength: 36 },\n restricted_to_procedures: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"designation\", \"model_code\", \"item_class\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const itemModelCollectionCreator: RxCollectionCreator = {\n schema: itemModelSchema,\n}\n","import { KeyFunctionMap, RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { WorkOrderCorrectiveItem, WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\n\n//region Types\n\nexport interface WorkOrderCorrectiveCollectionMethod extends KeyFunctionMap {\n getWorkOrderCorrectiveReferences: () => Promise>\n}\n\nexport interface WorkOrderRegularCollectionMethod extends KeyFunctionMap {\n getWorkOrderRegularReferences: () => Promise>\n}\n\nexport type WorkOrderCorrectiveItemDocument = RxDocument\nexport type WorkOrderCorrectiveItemCollection = RxCollection<\n WorkOrderCorrectiveItem,\n KeyFunctionMap,\n WorkOrderCorrectiveCollectionMethod\n>\n\nexport type WorkOrderRegularItemDocument = RxDocument\nexport type WorkOrderRegularItemCollection = RxCollection<\n WorkOrderRegularItem,\n KeyFunctionMap,\n WorkOrderRegularCollectionMethod\n>\n\n//endregion\n\n// base and WorkOrderCorrectiveItem are equivalent\nexport const workOrderBaseProperties: RxJsonSchema[\"properties\"] = {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n reference: { type: \"string\", maxLength: 80 },\n designation: { type: \"string\", maxLength: 128 },\n start_dt: { type: \"string\", maxLength: 64 },\n deadline_dt: { type: \"string\", maxLength: 64 },\n concluded_dt: { type: \"string\", maxLength: 64 },\n concluded_by_user: { type: \"string\", maxLength: 36 },\n instructions: { type: \"string\" },\n daily_participants: { type: \"number\" },\n avg_minutes_per_work: { type: \"number\" },\n hours_to_complete: { type: \"number\" },\n daily_avg_work_hours: { type: \"number\" },\n work_domain: { ref: \"work_domain_workspace\", type: \"string\", maxLength: 36 },\n priority: { ref: \"work_order_priority\", type: \"string\", maxLength: 36 },\n procedure_revision: { type: \"string\", maxLength: 36 },\n assigned_users: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n accepted_alternative_procedure_revisions: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n}\n\n/**\n * Schema for work order corrective item collections\n */\nexport const workOrderCorrectiveItemSchema: RxJsonSchema = {\n title: \"Work Order Corrective Item schema\",\n description: \"Collection of all work order corrective items\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: workOrderBaseProperties,\n required: [\n \"id\",\n \"designation\",\n \"start_dt\",\n \"instructions\",\n \"work_domain\",\n \"priority\",\n \"assigned_users\",\n ],\n indexes: [\"designation\", \"work_domain\"],\n}\n\n/**\n * Schema for work order regular item collections\n */\nexport const workOrderRegularItemSchema: RxJsonSchema = {\n title: \"Work Order Regular Item schema\",\n description: \"Collection of all work order regular items\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n ...workOrderBaseProperties,\n items: {\n type: \"array\",\n items: {\n ref: \"item\",\n type: \"string\",\n },\n },\n },\n required: [\n \"id\",\n \"designation\",\n \"start_dt\",\n \"instructions\",\n \"work_domain\",\n \"priority\",\n \"assigned_users\",\n \"items\",\n ],\n indexes: [\"designation\", \"work_domain\"],\n}\n\nexport const workOrderCorrectiveCollectionMethods: WorkOrderCorrectiveCollectionMethod = {\n async getWorkOrderCorrectiveReferences(\n this: WorkOrderCorrectiveItemCollection\n ): Promise {\n const allDocs: WorkOrderCorrectiveItemDocument[] = await this.find().exec()\n return allDocs.flatMap((workOrder) => workOrder.reference ?? [])\n },\n}\n\nexport const workOrderRegularCollectionMethods: WorkOrderRegularCollectionMethod = {\n async getWorkOrderRegularReferences(this: WorkOrderRegularItemCollection): Promise {\n const allDocs: WorkOrderRegularItemDocument[] = await this.find().exec()\n return allDocs.flatMap((workOrder) => workOrder.reference ?? [])\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workOrderCorrectiveItemCollectionCreator: RxCollectionCreator = {\n schema: workOrderCorrectiveItemSchema,\n statics: workOrderCorrectiveCollectionMethods,\n}\n\nexport const workOrderRegularItemCollectionCreator: RxCollectionCreator = {\n schema: workOrderRegularItemSchema,\n statics: workOrderRegularCollectionMethods,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { workOrderBaseProperties } from \"src/db/collectionDefinitions/csi/workOrder\"\nimport { ItemWorkOrder } from \"src/util/types/dataModels/item\"\n\n//region Types\n\nexport type ItemWorkOrderDocument = RxDocument\nexport type ItemWorkOrderCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for item work orders\n */\nexport const itemWorkOrderSchema: RxJsonSchema = {\n title: \"Item Work Order schema\",\n description: \"Collection of all work orders for an item\",\n version: 0,\n primaryKey: \"item_id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n item_id: { type: \"string\", maxLength: 36, uniqueItems: true },\n work_orders: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n ...workOrderBaseProperties,\n // These are the Items which belong to the above work order\n items: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n },\n },\n },\n required: [\"item_id\", \"work_orders\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const itemWorkOrderCollectionCreator: RxCollectionCreator = {\n schema: itemWorkOrderSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { RegularWorkConclusion } from \"src/util/types/dataModels/genericObject\"\nimport { RegularWorkOnItem } from \"src/util/types/dataModels/performedWork\"\n\n//region Types\n\nexport type RegularWorkOnItemDocument = RxDocument\n\nexport type RegularWorkOnItemCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for regular work on item collections\n */\nexport const regularWorkOnItemSchema: RxJsonSchema = {\n title: \"Performed Regular Work On Item schema\",\n description: \"Collection of all performed regular work on item\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: false, // TODO: temp fix to overcome a RxDB issue\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n declared_dt: { type: \"string\", maxLength: 64 },\n procedure_results: { type: \"object\" },\n concluded_dt: { type: \"string\", maxLength: 64 },\n conclusion: {\n type: \"string\",\n enum: [\"accepted\", \"rejected\", \"not_applicable\"] as RegularWorkConclusion[],\n },\n concluded_by_user: { type: \"string\", maxLength: 36 }, // UUID\n title: { type: \"string\", maxLength: 100 },\n description: { type: \"string\", maxLength: 2048 },\n work_domain: { ref: \"work_domain_workspace\", type: \"string\", maxLength: 36 }, // UUID\n procedure_revision: { type: \"string\", maxLength: 36 }, // UUID\n performed_by_user: { type: \"string\", maxLength: 36 }, // UUID\n work_order: { type: \"string\", maxLength: 36 }, // UUID\n actionable_item: { ref: \"item\", type: \"string\", maxLength: 36 }, // UUID\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"title\", \"work_domain\", \"performed_by_user\", \"actionable_item\"],\n indexes: [\"actionable_item\", \"updated_dt\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const regularWorkOnItemCollectionCreator: RxCollectionCreator = {\n schema: regularWorkOnItemSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { PerformedWorkComment } from \"src/util/types/dataModels/performedWork\"\n\n//region Types\n\nexport type RegularWorkItemCommentDocument = RxDocument\nexport type RegularWorkItemCommentCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for regular work on item comment collections\n */\nexport const regularWorkItemCommentSchema: RxJsonSchema = {\n title: \"Regular Work on Item Comment schema\",\n description: \"Collection of all the regular work on item comments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n user: { type: \"string\", maxLength: 36 },\n performed_work: { type: \"string\", maxLength: 36 },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"text\", \"user\", \"performed_work\"],\n indexes: [\"performed_work\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const regularWorkItemCommentCollectionCreator: RxCollectionCreator = {\n schema: regularWorkItemCommentSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\n\n//region Types\n\nexport type WorkDomainWorkspaceDocument = RxDocument\nexport type WorkDomainWorkspaceCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for work domain collections\n */\nexport const workDomainWorkspaceSchema: RxJsonSchema = {\n title: \"Work domain workspace schema\",\n description: \"Collection of all work domains for a specific workspace\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 128 },\n allows_regular_adhoc: { type: \"boolean\" },\n allows_corrective_adhoc: { type: \"boolean\" },\n require_proof_of_presence: { type: \"boolean\" },\n shorthand_name: { type: \"string\", maxLength: 48, minLength: 1 },\n },\n required: [\"id\", \"designation\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workDomainWorkspaceCollectionCreator: RxCollectionCreator = {\n schema: workDomainWorkspaceSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport {\n WorkOrderCorrectiveItemComment,\n WorkOrderRegularItemComment,\n} from \"src/util/types/dataModels/workOrderComment\"\n\n//region Types\n\nexport type WorkOrderCorrectiveItemCommentDocument = RxDocument\nexport type WorkOrderCorrectiveItemCommentCollection = RxCollection\n\nexport type WorkOrderRegularItemCommentDocument = RxDocument\nexport type WorkOrderRegularItemCommentCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for work order corrective item comments collections\n */\nexport const workOrderCorrectiveItemCommentSchema: RxJsonSchema = {\n title: \"Work Order Corrective Item Comments schema\",\n description: \"Collection of all work orders corrective item comments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n user: { type: \"string\", maxLength: 36 },\n work_order: { ref: \"work_order_corrective_item\", type: \"string\", maxLength: 36 },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"text\", \"user\", \"work_order\"],\n indexes: [\"work_order\"],\n}\n\n/**\n * Schema for work order regular item comment collections\n */\nexport const workOrderRegularItemCommentSchema: RxJsonSchema = {\n title: \"Work Order Regular Item Comments schema\",\n description: \"Collection of all work orders regular item comments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n text: { type: \"string\", maxLength: 2048 },\n user: { type: \"string\", maxLength: 36 },\n work_order: { ref: \"work_order_regular_item\", type: \"string\", maxLength: 36 },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"text\", \"user\", \"work_order\"],\n indexes: [\"work_order\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workOrderCorrectiveItemCommentCollectionCreator: RxCollectionCreator = {\n schema: workOrderCorrectiveItemCommentSchema,\n}\n\nexport const workOrderRegularItemCommentCollectionCreator: RxCollectionCreator = {\n schema: workOrderRegularItemCommentSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\n\n//region Types\n\nexport type WorkOrderPriorityDocument = RxDocument\nexport type WorkOrderPriorityCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for work order priority collections\n */\nexport const workOrderPrioritySchema: RxJsonSchema = {\n title: \"Work Order Priority schema\",\n description: \"Collection of all work order priorities\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 100 },\n rank: { type: \"number\", maximum: 100, minimum: 1 },\n work_domain: { ref: \"work_domain_workspace\", type: \"string\", maxLength: 36 },\n },\n required: [\"id\", \"designation\", \"rank\", \"work_domain\"],\n indexes: [\"designation\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workOrderPriorityCollectionCreator: RxCollectionCreator = {\n schema: workOrderPrioritySchema,\n}\n","import { KeyFunctionMap, RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\n\n//region Types\n\nexport interface ExampleItemDocumentProperties {\n id: string\n name: string\n description?: string\n properties?: Record\n}\n\nexport interface ExampleItemDocumentMethods extends KeyFunctionMap {\n getTitle: () => string\n}\n\nexport type ExampleItemDocument = RxDocument<\n ExampleItemDocumentProperties,\n ExampleItemDocumentMethods\n>\n\nexport interface ExampleItemCollectionMethods extends KeyFunctionMap {\n countAllDocuments: () => Promise\n}\n\nexport type ExampleItemCollection = RxCollection<\n ExampleItemDocumentProperties,\n ExampleItemDocumentMethods,\n ExampleItemCollectionMethods\n>\n\n//endregion\n\n/**\n * Schema for ExampleItem collections.\n */\nexport const exampleItemSchema: RxJsonSchema = {\n title: \"ExampleItem schema\",\n description: \"Example items to demonstrate with\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 100 },\n name: { type: \"string\", maxLength: 100 },\n description: { type: \"string\" },\n properties: {\n type: \"object\",\n additionalProperties: true,\n },\n },\n required: [\"id\", \"name\"],\n indexes: [\"name\"],\n}\n\n/**\n * Implementation of ExampleItem document methods.\n */\nexport const exampleItemDocumentMethods: ExampleItemDocumentMethods = {\n getTitle(this: ExampleItemDocument): string {\n return `${this.id}: ${this.name}`\n },\n}\n\n/**\n * Implementation of ExampleItem Collection methods.\n */\nexport const exampleItemCollectionMethods: ExampleItemCollectionMethods = {\n async countAllDocuments(this: ExampleItemCollection) {\n const allDocs = await this.find().exec()\n return allDocs.length\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections.\n */\nexport const exampleItemCollectionCreator: RxCollectionCreator = {\n schema: exampleItemSchema,\n methods: exampleItemDocumentMethods,\n statics: exampleItemCollectionMethods,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { UserAvatar, UserBasic } from \"src/util/types/dataModels/user\"\n\n//region Types\n\nexport type UserCollection = RxCollection\nexport type UserDocument = RxDocument\n\nexport type UserAvatarCollection = RxCollection\nexport type UserAvatarDocument = RxDocument\n\n//endregion\n\n/**\n * Schema for user roles collections\n */\nexport const userSchema: RxJsonSchema = {\n title: \"User schema\",\n description: \"Collection of all users\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true }, // UUID\n\n email: { type: \"string\", minLength: 1, maxLength: 254 },\n\n first_name: { type: \"string\", maxLength: 150 },\n\n last_name: { type: \"string\", maxLength: 150 },\n\n is_active: { type: \"boolean\" },\n\n is_superuser: { type: \"boolean\" },\n\n roles: { type: \"array\", items: { type: \"string\", maxLength: 36, uniqueItems: true } },\n },\n required: [\"id\", \"email\", \"roles\"],\n}\n\nexport const userAvatarSchema: RxJsonSchema = {\n title: \"User schema\",\n description: \"Collection of all users\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { ref: \"attachments\", type: \"string\", maxLength: 36, uniqueItems: true },\n path: { type: \"string\" },\n type: { type: \"string\" },\n },\n required: [\"id\", \"path\", \"type\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const userCollectionCreator: RxCollectionCreator = {\n schema: userSchema,\n}\n\nexport const userAvatarCollectionCreator: RxCollectionCreator = {\n schema: userAvatarSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { UserRole } from \"src/util/types/dataModels/user\"\n\n//region Types\n\nexport type UserRoleDocument = RxDocument\nexport type UserRoleCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for user roles collections\n */\nexport const userRoleSchema: RxJsonSchema = {\n title: \"User Role schema\",\n description: \"Collection of all user roles\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true }, // UUID\n\n name: { type: \"string\", minLength: 1, maxLength: 128 },\n\n organisation: { type: \"string\", maxLength: 36 }, // UUID\n\n service_provider: { type: \"string\", maxLength: 36 }, // UUID\n\n workspaces: {\n type: \"array\",\n items: {\n ref: \"workspace\",\n type: \"string\",\n maxLength: 36,\n },\n },\n\n work_domains: {\n type: \"array\",\n items: {\n ref: \"work_domain_global\",\n type: \"string\",\n maxLength: 36,\n },\n },\n },\n required: [\"id\", \"name\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const userRoleCollectionCreator: RxCollectionCreator = {\n schema: userRoleSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { WorkDomainGlobal } from \"src/util/types/dataModels/workDomain\"\n\n//region Types\n\nexport type WorkDomainGlobalDocument = RxDocument\nexport type WorkDomainGlobalCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for work domain collections\n */\nexport const workDomainGlobalSchema: RxJsonSchema = {\n title: \"Work domain global schema\",\n description: \"Collection of all work domains\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n designation: { type: \"string\", maxLength: 128 },\n allows_regular_adhoc: { type: \"boolean\" },\n allows_corrective_adhoc: { type: \"boolean\" },\n require_proof_of_presence: { type: \"boolean\" },\n shorthand_name: { type: \"string\", maxLength: 48, minLength: 1 },\n organisation: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n workspaces: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"designation\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workDomainGlobalCollectionCreator: RxCollectionCreator = {\n schema: workDomainGlobalSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxJsonSchema } from \"rxdb\"\nimport { WorkspaceDetail } from \"src/util/types/dataModels/workspace\"\n\n//region Types\n\nexport type WorkspaceCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for Workspace collections\n */\nexport const WorkspaceSchema: RxJsonSchema = {\n title: \"Workspace schema\",\n description: \"Workspaces for a particular user\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n organisation: {\n type: \"object\",\n properties: {\n id: { type: \"number\", maxLength: 36, uniqueItems: true },\n name: { type: \"string\", minLength: 1, maxLength: 255 },\n address: { type: \"string\", minLength: 1, maxLength: 255 },\n logo: { type: \"string\" },\n vpc: { type: \"string\", maxLength: 36 },\n service_provider: { type: \"string\", maxLength: 36 },\n account_owners: {\n type: \"array\",\n items: {\n type: \"string\",\n maxLength: 36,\n },\n },\n },\n required: [\"id\", \"name\", \"vpc\", \"service_provider\", \"account_owners\"],\n },\n stats: {\n type: \"object\",\n properties: {\n num_items: { type: \"number\" },\n num_areas: { type: \"number\" },\n num_issues: { type: \"number\" },\n num_layouts: { type: \"number\" },\n num_locations: { type: \"number\" },\n num_models: { type: \"number\" },\n num_zones: { type: \"number\" },\n num_work_orders: { type: \"number\" },\n num_change_requests: { type: \"object\" },\n issue_highest_priority: { type: \"string\", minLength: 1 },\n work_order_highest_priority: { type: \"number\" },\n total_health_percent: { type: \"number\" },\n time_zone: { type: \"string\", minLength: 1 },\n },\n },\n admins: {\n type: \"array\",\n items: {\n type: \"string\",\n maxLength: 36,\n },\n },\n created_dt: { type: \"string\", maxLength: 64 },\n updated_dt: { type: \"string\", maxLength: 64 },\n name: { type: \"string\", minLength: 1, maxLength: 255 },\n group: { type: \"string\", minLength: 1, maxLength: 255 },\n description: { type: \"string\" },\n image: { type: \"string\" },\n coordinates: { type: \"string\", maxLength: 64 },\n time_zone: { type: \"string\", maxLength: 64 },\n },\n required: [\"id\", \"organisation\", \"name\"],\n indexes: [\"name\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const workspaceCollectionCreator: RxCollectionCreator = {\n schema: WorkspaceSchema,\n}\n","import { RxCollection, RxCollectionCreator, RxJsonSchema } from \"rxdb\"\nimport { UnsubmittedAttachment } from \"src/util/types/dataModels/unsubmittedWork\"\n\n//region Types\n\nexport type UnsubmittedAttachmentCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for unsubmitted attachment collections\n */\nexport const unsubmittedAttachmentSchema: RxJsonSchema = {\n title: \"Attachment schema\",\n description: \"Attachments\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true },\n name: { type: \"string\", maxLength: 255 },\n mimeType: { type: \"string\" },\n fileData: { type: \"string\" },\n },\n required: [\"id\", \"name\", \"mimeType\", \"fileData\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const unsubmittedAttachmentCollectionCreator: RxCollectionCreator = {\n schema: unsubmittedAttachmentSchema,\n}\n","import { date } from \"quasar\"\nimport { KeyFunctionMap, RxCollection, RxCollectionCreator, RxDocument, RxJsonSchema } from \"rxdb\"\nimport { UnsubmittedWork } from \"src/util/types/dataModels/unsubmittedWork\"\n\n//region Types\n\nexport interface UnsubmittedWorkCollectionMethods extends KeyFunctionMap {\n getOldestWorkDays: () => Promise\n hasUnsubmittedWork: () => Promise\n}\n\nexport type UnsubmittedWorkDocument = RxDocument\n\nexport type UnsubmittedWorkCollection = RxCollection<\n UnsubmittedWork,\n KeyFunctionMap,\n UnsubmittedWorkCollectionMethods\n>\n\n//endregion\n\n/**\n * Schema for unsubmitted work collections\n */\nexport const unsubmittedWorkSchema: RxJsonSchema = {\n title: \"Unsubmitted work schema\",\n description: \"Collection of all the unsubmitted work\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true }, // UUID\n entity_id: { type: \"string\", maxLength: 36 }, // UUID\n entity_type: { type: \"string\" }, // Item or Area\n work_type: { type: \"string\" },\n declared_dt: { type: \"string\", maxLength: 64 },\n work_domain: { type: \"string\", maxLength: 36 }, // UUID\n procedure_results: { type: \"object\" },\n title: { type: \"string\", maxLength: 100 },\n description: { type: \"string\", maxLength: 2048 },\n work_order_id: { type: \"string\", maxLength: 36 },\n unsubmitted_work_issues: {\n type: \"array\",\n items: { type: \"string\", maxLength: 36 },\n },\n attachments: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n },\n },\n required: [\"id\", \"entity_id\", \"entity_type\", \"work_type\", \"declared_dt\"],\n indexes: [\"declared_dt\"],\n}\n\nexport const unsubmittedWorkCollectionMethods: UnsubmittedWorkCollectionMethods = {\n async getOldestWorkDays(this: UnsubmittedWorkCollection): Promise {\n const data = await this.find().exec()\n // NOTE: Would directly fetching the first entity from the DB be sufficient?\n const oldest = data.sort((a, b) => a.declared_dt.localeCompare(b.declared_dt))[0]\n\n if (!oldest) return 0\n\n return date.getDateDiff(new Date(), oldest.declared_dt, \"days\")\n },\n\n async hasUnsubmittedWork(this: UnsubmittedWorkCollection): Promise {\n const unsubmittedWorkCount = await this.count().exec()\n\n return Boolean(unsubmittedWorkCount)\n },\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const unsubmittedWorkCollectionCreator: RxCollectionCreator = {\n schema: unsubmittedWorkSchema,\n statics: unsubmittedWorkCollectionMethods,\n}\n","import { KeyFunctionMap, RxCollection, RxCollectionCreator, RxJsonSchema } from \"rxdb\"\nimport { UnsubmittedWorkIssue } from \"src/util/types/dataModels/unsubmittedWork\"\n\n//region Types\n\nexport type UnsubmittedWorkIssueCollection = RxCollection\n\n//endregion\n\n/**\n * Schema for unsubmitted work collections\n */\nexport const unsubmittedWorkIssueSchema: RxJsonSchema = {\n title: \"Unsubmitted work issues schema\",\n description: \"Collection of all the unsubmitted work issues\",\n version: 0,\n primaryKey: \"id\",\n type: \"object\",\n keyCompression: true,\n properties: {\n id: { type: \"string\", maxLength: 36, uniqueItems: true }, // UUID\n unsubmitted_work_id: { type: \"string\", maxLength: 36, uniqueItems: true }, // UUID\n issue: { type: \"object\" },\n action: { type: \"object\" },\n },\n required: [\"id\", \"unsubmitted_work_id\", \"issue\"],\n}\n\n/**\n * A collection creator that can be passed to the database when setting up collections\n */\nexport const unsubmittedWorkIssueCollectionCreator: RxCollectionCreator = {\n schema: unsubmittedWorkIssueSchema,\n}\n","import { Platform } from \"quasar\"\nimport { addRxPlugin, createRxDatabase, RxDatabase } from \"rxdb\"\nimport { RxCollectionCreator } from \"rxdb/dist/types\"\nimport { RxDBAttachmentsPlugin } from \"rxdb/plugins/attachments\"\nimport { RxDBDevModePlugin } from \"rxdb/plugins/dev-mode\"\nimport { RxDBJsonDumpPlugin } from \"rxdb/plugins/json-dump\"\nimport { wrappedKeyCompressionStorage } from \"rxdb/plugins/key-compression\"\nimport { RxDBMigrationPlugin } from \"rxdb/plugins/migration\"\nimport { RxDBQueryBuilderPlugin } from \"rxdb/plugins/query-builder\"\nimport { getRxStorageDexie } from \"rxdb/plugins/storage-dexie\"\nimport { getRxStorageLoki } from \"rxdb/plugins/storage-lokijs\"\nimport {\n AttachmentCollection,\n attachmentCollectionCreator,\n AttachmentDataCollection,\n attachmentDataCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/attachment\"\nimport {\n AttributeCharCollection,\n attributeCharCollectionCreator,\n AttributeCharValueCollection,\n attributeCharValueCollectionCreator,\n AttributeNumericCollection,\n attributeNumericCollectionCreator,\n AttributeNumericValueCollection,\n attributeNumericValueCollectionCreator,\n AttributeSelectCollection,\n attributeSelectCollectionCreator,\n AttributeSelectOptionsCollection,\n attributeSelectOptionsCollectionCreator,\n AttributeSelectValueCollection,\n attributeSelectValueCollectionCreator,\n AttributeTemporalCollection,\n attributeTemporalCollectionCreator,\n AttributeTemporalValueCollection,\n attributeTemporalValueCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/attribute\"\nimport {\n CorrectiveWorkOnItemCollection,\n correctiveWorkOnItemCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/correctiveWork\"\nimport {\n CorrectiveWorkItemCommentCollection,\n correctiveWorkItemCommentCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/correctiveWorkItemComments\"\nimport {\n IdentifierCollection,\n identifierCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/identifier\"\nimport {\n IssueOnItemActionsCollection,\n issueOnItemActionsCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/issueOnItemActions\"\nimport {\n IssueOnItemCommentCollection,\n issueOnItemCommentCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/issueOnItemComments\"\nimport {\n IssuePriorityCollection,\n issuePriorityCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/issuePriorities\"\nimport {\n IssuesOnItemCollection,\n issuesOnItemCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/issuesOnItem\"\nimport { ItemCollection, itemCollectionCreator } from \"src/db/collectionDefinitions/csi/item\"\nimport {\n ItemClassCollection,\n itemClassCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/itemClass\"\nimport {\n ItemModelCollection,\n itemModelCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/itemModel\"\nimport {\n ItemWorkOrderCollection,\n itemWorkOrderCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/itemWorkOrders\"\nimport {\n RegularWorkOnItemCollection,\n regularWorkOnItemCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/regularWork\"\nimport {\n RegularWorkItemCommentCollection,\n regularWorkItemCommentCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/regularWorkItemComments\"\nimport {\n WorkDomainWorkspaceCollection,\n workDomainWorkspaceCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/workDomainWorkspace\"\nimport {\n WorkOrderCorrectiveItemCollection,\n workOrderCorrectiveItemCollectionCreator,\n WorkOrderRegularItemCollection,\n workOrderRegularItemCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/workOrder\"\nimport {\n WorkOrderCorrectiveItemCommentCollection,\n workOrderCorrectiveItemCommentCollectionCreator,\n WorkOrderRegularItemCommentCollection,\n workOrderRegularItemCommentCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/workOrderComments\"\nimport {\n WorkOrderPriorityCollection,\n workOrderPriorityCollectionCreator,\n} from \"src/db/collectionDefinitions/csi/workOrderPriority\"\nimport {\n ExampleItemCollection,\n exampleItemCollectionCreator,\n} from \"src/db/collectionDefinitions/exampleItem\"\nimport {\n UserAvatarCollection,\n userAvatarCollectionCreator,\n UserCollection,\n userCollectionCreator,\n} from \"src/db/collectionDefinitions/springboard/user\"\nimport {\n UserRoleCollection,\n userRoleCollectionCreator,\n} from \"src/db/collectionDefinitions/springboard/userRole\"\nimport {\n WorkDomainGlobalCollection,\n workDomainGlobalCollectionCreator,\n} from \"src/db/collectionDefinitions/springboard/workDomainGlobal\"\nimport {\n WorkspaceCollection,\n workspaceCollectionCreator,\n} from \"src/db/collectionDefinitions/springboard/workspace\"\nimport {\n UnsubmittedAttachmentCollection,\n unsubmittedAttachmentCollectionCreator,\n} from \"src/db/collectionDefinitions/unsubmitted/unsubmittedAttachment\"\nimport {\n UnsubmittedWorkCollection,\n unsubmittedWorkCollectionCreator,\n} from \"src/db/collectionDefinitions/unsubmitted/unsubmittedWork\"\nimport {\n UnsubmittedWorkIssueCollection,\n unsubmittedWorkIssueCollectionCreator,\n} from \"src/db/collectionDefinitions/unsubmitted/unsubmittedWorkIssue\"\n\n//region Load plugins\n\naddRxPlugin(RxDBMigrationPlugin)\naddRxPlugin(RxDBJsonDumpPlugin)\naddRxPlugin(RxDBQueryBuilderPlugin)\naddRxPlugin(RxDBAttachmentsPlugin)\n\nif (process.env.DEV || process.env.DEBUGGING) addRxPlugin(RxDBDevModePlugin)\n//endregion\n\n//region Definitions\n\n/**\n * Available database names\n */\nexport type DatabaseBaseName =\n /** Contains the data as it is at the server. */\n | \"base_db\"\n /** Use for testing purposes and for initiating schema hashes for import inserts.\n * Testing purposes include unit tests, re-routing of data during development,\n * and, if required, performance benchmarks in production builds. */\n | \"test_db\"\n\nexport type DatabaseChangesName =\n /** Contains the changes made locally. */\n \"changes_db\" | \"test_changes_db\"\n\nexport type DatabaseCommonName =\n /** Contains the common non-CSI related data */\n \"common_db\" | \"test_common_db\"\n\ntype DatabaseAllName = DatabaseBaseName | DatabaseChangesName | DatabaseCommonName\n\nenum StorageOption {\n Dexie,\n LokiMemory,\n PremiumIndexedDB,\n PremiumSQLite,\n}\n\nexport interface AppBaseDBCollections {\n attachment: AttachmentCollection\n attachment_data: AttachmentDataCollection\n attribute_char: AttributeCharCollection\n attribute_char_value: AttributeCharValueCollection\n attribute_numeric: AttributeNumericCollection\n attribute_numeric_value: AttributeNumericValueCollection\n attribute_select: AttributeSelectCollection\n attribute_select_options: AttributeSelectOptionsCollection\n attribute_select_value: AttributeSelectValueCollection\n attribute_temporal: AttributeTemporalCollection\n attribute_temporal_value: AttributeTemporalValueCollection\n corrective_work_on_item: CorrectiveWorkOnItemCollection\n corrective_work_item_comments: CorrectiveWorkItemCommentCollection\n identifier: IdentifierCollection\n issue_on_item_actions: IssueOnItemActionsCollection\n issue_on_item_comments: IssueOnItemCommentCollection\n issue_priority: IssuePriorityCollection\n issues_on_item: IssuesOnItemCollection\n item: ItemCollection\n item_class: ItemClassCollection\n item_model: ItemModelCollection\n item_work_orders: ItemWorkOrderCollection\n regular_work_on_item: RegularWorkOnItemCollection\n regular_work_item_comments: RegularWorkItemCommentCollection\n work_domain_workspace: WorkDomainWorkspaceCollection\n work_order_corrective_item: WorkOrderCorrectiveItemCollection\n work_order_regular_item: WorkOrderRegularItemCollection\n work_order_corrective_comments: WorkOrderCorrectiveItemCommentCollection\n work_order_regular_comments: WorkOrderRegularItemCommentCollection\n work_order_priority: WorkOrderPriorityCollection\n}\n\nexport interface AppChangesDBCollections {\n unsubmitted_attachment: UnsubmittedAttachmentCollection\n unsubmitted_work: UnsubmittedWorkCollection\n unsubmitted_work_issue: UnsubmittedWorkIssueCollection\n}\n\nexport interface AppCommonDBCollections {\n example_item: ExampleItemCollection\n user: UserCollection\n user_avatar: UserAvatarCollection\n user_role: UserRoleCollection\n work_domain_global: WorkDomainGlobalCollection\n workspace: WorkspaceCollection\n}\n\nexport type AppBaseDB = RxDatabase\nexport type AppChangesDB = RxDatabase\nexport type AppCommonDB = RxDatabase\n\nexport type AppAllDBCollections =\n | AppBaseDBCollections\n | AppChangesDBCollections\n | AppCommonDBCollections\n\n/**\n * Define all collections here.\n */\nconst collectionBaseCreators: Record = {\n attachment: attachmentCollectionCreator,\n attachment_data: attachmentDataCollectionCreator,\n attribute_char: attributeCharCollectionCreator,\n attribute_char_value: attributeCharValueCollectionCreator,\n attribute_numeric: attributeNumericCollectionCreator,\n attribute_numeric_value: attributeNumericValueCollectionCreator,\n attribute_select: attributeSelectCollectionCreator,\n attribute_select_options: attributeSelectOptionsCollectionCreator,\n attribute_select_value: attributeSelectValueCollectionCreator,\n attribute_temporal: attributeTemporalCollectionCreator,\n attribute_temporal_value: attributeTemporalValueCollectionCreator,\n corrective_work_on_item: correctiveWorkOnItemCollectionCreator,\n corrective_work_item_comments: correctiveWorkItemCommentCollectionCreator,\n identifier: identifierCollectionCreator,\n issue_on_item_actions: issueOnItemActionsCollectionCreator,\n issue_on_item_comments: issueOnItemCommentCollectionCreator,\n issue_priority: issuePriorityCollectionCreator,\n issues_on_item: issuesOnItemCollectionCreator,\n item: itemCollectionCreator,\n item_class: itemClassCollectionCreator,\n item_model: itemModelCollectionCreator,\n item_work_orders: itemWorkOrderCollectionCreator,\n regular_work_on_item: regularWorkOnItemCollectionCreator,\n regular_work_item_comments: regularWorkItemCommentCollectionCreator,\n work_domain_workspace: workDomainWorkspaceCollectionCreator,\n work_order_corrective_item: workOrderCorrectiveItemCollectionCreator,\n work_order_regular_item: workOrderRegularItemCollectionCreator,\n work_order_corrective_comments: workOrderCorrectiveItemCommentCollectionCreator,\n work_order_regular_comments: workOrderRegularItemCommentCollectionCreator,\n work_order_priority: workOrderPriorityCollectionCreator,\n}\n\nconst collectionChangesCreators: Record = {\n unsubmitted_attachment: unsubmittedAttachmentCollectionCreator,\n unsubmitted_work: unsubmittedWorkCollectionCreator,\n unsubmitted_work_issue: unsubmittedWorkIssueCollectionCreator,\n}\n\nconst collectionCommonCreators: Record = {\n example_item: exampleItemCollectionCreator,\n user: userCollectionCreator,\n user_avatar: userAvatarCollectionCreator,\n user_role: userRoleCollectionCreator,\n work_domain_global: workDomainGlobalCollectionCreator,\n workspace: workspaceCollectionCreator,\n}\n\n//endregion\n\nconst databaseBaseInstances: Record = {}\nconst databaseChangesInstances: Record = {}\nconst databaseCommonInstances: Record = {}\n\nlet lockDBCreation = false\nlet lockEnsuringCollections = false\n\nfunction sleep(ms: number): Promise {\n return new Promise((r) => setTimeout(r, ms))\n}\n\n//region Helpers for getDatabase\n\n/**\n * Detects and create the RxDB storage to use in the current environment.\n */\nfunction getStorage() {\n let chosenStorage\n\n // Detect storage\n Platform?.is?.capacitor\n ? (chosenStorage = StorageOption.PremiumSQLite)\n : (chosenStorage = StorageOption.PremiumIndexedDB)\n\n // Override the chosen storage (for testing purposes)\n if (process.env.OVERRIDE_RXDB_STORAGE) {\n for (const [key, value] of Object.entries(StorageOption)) {\n if (process.env.OVERRIDE_RXDB_STORAGE === key) {\n chosenStorage = value as StorageOption\n console.warn(\"Chosen storage overridden\", process.env.OVERRIDE_RXDB_STORAGE)\n }\n }\n }\n\n switch (chosenStorage) {\n case StorageOption.Dexie:\n return wrappedKeyCompressionStorage({ storage: getRxStorageDexie() })\n\n case StorageOption.LokiMemory:\n // NOTE: In-memory may be in play for online sessions on a PC.\n // Therefore, this is kept around to be available for testing.\n return wrappedKeyCompressionStorage({ storage: getRxStorageLoki() })\n\n case StorageOption.PremiumIndexedDB:\n // TODO: Replace this when possible\n return wrappedKeyCompressionStorage({ storage: getRxStorageDexie() })\n\n case StorageOption.PremiumSQLite:\n // TODO: Replace this when possible\n return wrappedKeyCompressionStorage({ storage: getRxStorageDexie() })\n }\n}\n//endregion\n\n// TODO: We need to rework this section, this can definitely be simplified\n\n/**\n * Get the instance for a database.\n *\n * Will instantiate a new instance if there is none, or the current instance is destroyed.\n * Otherwise, it will get the current instance and recreate any missing collections.\n *\n * @param databaseName The database to get\n */\nexport async function getDatabase(databaseName: string): Promise {\n // Prevent multi-creation of database instances\n while (lockDBCreation) {\n await sleep(500)\n }\n\n let databaseInstance = databaseBaseInstances[databaseName]\n\n if (databaseInstance === undefined || databaseInstance.destroyed) {\n lockDBCreation = true // Acquire lock\n\n const storage = getStorage()\n\n databaseInstance = await createRxDatabase({\n name: databaseName,\n storage: storage,\n multiInstance: true,\n })\n databaseBaseInstances[databaseName] = databaseInstance\n\n lockDBCreation = false // Release lock\n }\n\n // Prevent multiple instances setting up collections\n while (lockDBCreation || lockEnsuringCollections) {\n await sleep(500)\n }\n\n lockEnsuringCollections = true // Acquire lock\n\n // Ensure all the required collections are in the database\n let collectionsMissing = false\n const missingCollectionCreators: Partial = {}\n const collectionNames = Object.keys(collectionBaseCreators) as Array\n\n for (const collectionName of collectionNames) {\n if (\n !(collectionName in databaseInstance.collections) ||\n databaseInstance.collections[collectionName].destroyed\n ) {\n collectionsMissing = true\n missingCollectionCreators[collectionName] = collectionBaseCreators[collectionName]\n }\n }\n\n if (!lockDBCreation && collectionsMissing && missingCollectionCreators) {\n // Add missing collections\n await databaseInstance.addCollections(missingCollectionCreators)\n insertHooks(databaseInstance)\n }\n\n lockEnsuringCollections = false // Release lock\n\n return databaseInstance\n}\n\nexport async function getChangesDatabase(databaseName: string): Promise {\n // Prevent multi-creation of database instances\n while (lockDBCreation) {\n await sleep(500)\n }\n\n let databaseInstance = databaseChangesInstances[databaseName]\n\n if (databaseInstance === undefined || databaseInstance.destroyed) {\n lockDBCreation = true // Acquire lock\n\n const storage = getStorage()\n\n databaseInstance = await createRxDatabase({\n name: databaseName,\n storage: storage,\n multiInstance: true,\n })\n databaseChangesInstances[databaseName] = databaseInstance\n\n lockDBCreation = false // Release lock\n }\n\n // Prevent multiple instances setting up collections\n while (lockDBCreation || lockEnsuringCollections) {\n await sleep(500)\n }\n\n lockEnsuringCollections = true // Acquire lock\n\n // Ensure all the required collections are in the database\n let collectionsMissing = false\n const missingCollectionCreators: Partial = {}\n const collectionNames = Object.keys(collectionChangesCreators) as Array<\n keyof AppChangesDBCollections\n >\n\n for (const collectionName of collectionNames) {\n if (\n !(collectionName in databaseInstance.collections) ||\n databaseInstance.collections[collectionName].destroyed\n ) {\n collectionsMissing = true\n missingCollectionCreators[collectionName] = collectionChangesCreators[collectionName]\n }\n }\n\n if (!lockDBCreation && collectionsMissing && missingCollectionCreators) {\n // Add missing collections\n await databaseInstance.addCollections(missingCollectionCreators)\n }\n\n lockEnsuringCollections = false // Release lock\n\n return databaseInstance\n}\n\nexport async function getCommonDatabase(databaseName: string): Promise {\n // Prevent multi-creation of database instances\n while (lockDBCreation) {\n await sleep(500)\n }\n\n let databaseInstance = databaseCommonInstances[databaseName]\n\n if (databaseInstance === undefined || databaseInstance.destroyed) {\n lockDBCreation = true // Acquire lock\n\n const storage = getStorage()\n\n databaseInstance = await createRxDatabase({\n name: databaseName,\n storage: storage,\n multiInstance: true,\n })\n databaseCommonInstances[databaseName] = databaseInstance\n\n lockDBCreation = false // Release lock\n }\n\n // Prevent multiple instances setting up collections\n while (lockDBCreation || lockEnsuringCollections) {\n await sleep(500)\n }\n\n lockEnsuringCollections = true // Acquire lock\n\n // Ensure all the required collections are in the database\n let collectionsMissing = false\n const missingCollectionCreators: Partial = {}\n const collectionNames = Object.keys(collectionCommonCreators) as Array<\n keyof AppCommonDBCollections\n >\n\n for (const collectionName of collectionNames) {\n if (\n !(collectionName in databaseInstance.collections) ||\n databaseInstance.collections[collectionName].destroyed\n ) {\n collectionsMissing = true\n missingCollectionCreators[collectionName] = collectionCommonCreators[collectionName]\n }\n }\n\n if (!lockDBCreation && collectionsMissing && missingCollectionCreators) {\n // Add missing collections\n await databaseInstance.addCollections(missingCollectionCreators)\n }\n\n lockEnsuringCollections = false // Release lock\n\n return databaseInstance\n}\n\nfunction insertHooks(databaseInstance: AppBaseDB) {\n databaseInstance.attachment.preSave((attachmentNew, attachmentOld) => {\n // Get old and new attachment context and take only the unique values\n attachmentNew.context = [...new Set(attachmentOld.context.concat(attachmentNew.context))]\n }, true)\n}\n\nexport async function getDB(workspaceUUID?: string) {\n const base_db = await formatCSIDBName(\"base_db\", workspaceUUID)\n const test_db = await formatCSIDBName(\"test_db\", workspaceUUID)\n\n return Boolean(process.env.PROD) ? getDatabase(base_db) : getDatabase(test_db)\n}\n\nexport async function getChangesDB(workspaceUUID?: string) {\n const changes_db = await formatCSIDBName(\"changes_db\", workspaceUUID)\n const test_changes_db = await formatCSIDBName(\"test_changes_db\", workspaceUUID)\n\n return Boolean(process.env.PROD)\n ? getChangesDatabase(changes_db)\n : getChangesDatabase(test_changes_db)\n}\n\nexport async function getCommonDB() {\n const common_db: DatabaseCommonName = \"common_db\"\n const test_common_db: DatabaseCommonName = \"test_common_db\"\n\n return Boolean(process.env.PROD)\n ? getCommonDatabase(common_db)\n : getCommonDatabase(test_common_db)\n}\n\nexport async function formatCSIDBName(\n dbName: DatabaseAllName,\n workspaceUUID?: string\n): Promise {\n const { useAuthStore } = await import(\"src/stores/authStore\")\n const authStore = useAuthStore()\n const uuid = workspaceUUID || authStore.selectedWorkspace?.id\n\n if (uuid) {\n const formattedUUID = uuid.replaceAll(\"-\", \"\")\n return formattedUUID + \"/\" + dbName\n } else {\n return dbName\n }\n}\n","export const LABELS = {\n COMPANY: \"SafeEx\",\n PRODUCT: \"SAMMY\",\n SUPPORT: \"SafeEx Support\",\n} as const\n","export const LINKS = {\n CAPACITOR_DEEPLINK_HOSTNAME: \"app.safeex.cloud\",\n SPA_MANAGER_URL: \"https://app.safeex.cloud\",\n SPA_TECHNICIAN_URL: \"https://app.safeex.cloud\",\n CSI_URL: \"https://ws.safeex.cloud\",\n SPRINGBOARD_URL: \"https://safeex.cloud\",\n USER_MANAGEMENT_URL: \"https://user-admin.safeex.cloud\",\n MESSAGE_URL: \"https://msg.safeex.cloud\",\n} as const\n","import { DemoNamedPath } from \"src/util/enums/namedPaths\"\nimport { RouteRecordRaw } from \"vue-router\"\n\nconst routes: RouteRecordRaw = {\n path: \"/ui-demo\",\n component: () => import(\"src/layouts/DemoLayout.vue\"),\n children: [\n {\n path: \"\",\n name: DemoNamedPath.UI_DEMO,\n component: () => null,\n beforeEnter: () => {\n return { name: DemoNamedPath.DEMO_INDEX }\n },\n },\n {\n path: \"home\",\n name: DemoNamedPath.DEMO_INDEX,\n component: () => import(\"src/pages/demo/DemoIndex.vue\"),\n },\n {\n path: \"store\",\n name: DemoNamedPath.EXAMPLE_STORE,\n component: () => import(\"src/pages/demo/functionality/ExampleStore.vue\"),\n },\n {\n path: \"database\",\n name: DemoNamedPath.DATABASE,\n component: () => import(\"src/pages/demo/functionality/DatabaseExample.vue\"),\n },\n {\n path: \"barcode-reader\",\n name: DemoNamedPath.BARCODE_READER,\n component: () => import(\"src/pages/demo/functionality/BarcodeReader.vue\"),\n },\n {\n path: \"keyboard-reader\",\n name: DemoNamedPath.KEYBOARD_READER,\n component: () => import(\"src/pages/demo/functionality/KeyboardReader.vue\"),\n },\n {\n path: \"nfc-reader\",\n name: DemoNamedPath.NFC_READER,\n component: () => import(\"src/pages/demo/functionality/NfcReader.vue\"),\n },\n {\n path: \"api-calls\",\n name: DemoNamedPath.API_CALLS,\n component: () => import(\"src/pages/demo/functionality/ApiCalls.vue\"),\n },\n {\n path: \"custom-directives\",\n name: DemoNamedPath.CUSTOM_DIRECTIVES,\n component: () => import(\"src/pages/demo/functionality/CustomDirectives.vue\"),\n },\n {\n path: \"general-directives\",\n name: DemoNamedPath.GENERAL_DIRECTIVES,\n component: () => import(\"src/pages/demo/elements/GeneralDirectives.vue\"),\n },\n {\n path: \"typography\",\n name: DemoNamedPath.TYPOGRAPHY,\n component: () => import(\"src/pages/demo/elements/TypographyElements.vue\"),\n },\n {\n path: \"cards\",\n name: DemoNamedPath.CARDS,\n component: () => import(\"src/pages/demo/elements/CardElements.vue\"),\n },\n {\n path: \"dialogs-and-overlays\",\n name: DemoNamedPath.DIALOGS_AND_OVERLAYS,\n component: () => import(\"src/pages/demo/elements/DialogsAndOverlays.vue\"),\n },\n {\n path: \"custom-icons\",\n name: DemoNamedPath.CUSTOM_ICONS,\n component: () => import(\"src/pages/demo/elements/CustomIcons.vue\"),\n },\n {\n path: \"button-elements\",\n name: DemoNamedPath.BUTTONS,\n component: () => import(\"src/pages/demo/elements/ButtonsElements.vue\"),\n },\n {\n path: \"input-elements\",\n name: DemoNamedPath.INPUTS,\n component: () => import(\"src/pages/demo/elements/InputFields.vue\"),\n },\n {\n path: \"issue-elements\",\n name: DemoNamedPath.ISSUES,\n component: () => import(\"src/pages/demo/elements/IssueElements.vue\"),\n },\n {\n path: \"select-elements\",\n name: DemoNamedPath.SELECTS,\n component: () => import(\"src/pages/demo/elements/SelectFields.vue\"),\n },\n {\n path: \"table-elements\",\n name: DemoNamedPath.TABLE,\n component: () => import(\"src/pages/demo/elements/TableElements.vue\"),\n },\n {\n path: \"tab-elements\",\n name: DemoNamedPath.TABS,\n component: () => import(\"src/pages/demo/elements/TabElements.vue\"),\n },\n {\n path: \"special-purpose\",\n name: DemoNamedPath.SPECIAL_PURPOSE,\n component: () => import(\"src/pages/demo/elements/SpecialPurpose.vue\"),\n },\n {\n path: \"top-navigation\",\n name: DemoNamedPath.TOP_NAVIGATION,\n component: () => import(\"src/pages/demo/elements/TopNavigation.vue\"),\n },\n {\n path: \"radio-buttons\",\n name: DemoNamedPath.RADIO_BUTTONS,\n component: () => import(\"src/pages/demo/elements/RadioButtons.vue\"),\n },\n {\n path: \"empty-states\",\n name: DemoNamedPath.EMPTY_STATES,\n component: () => import(\"src/pages/demo/elements/EmptyStates.vue\"),\n },\n {\n path: \"progress-indicator\",\n name: DemoNamedPath.PROGRESS_INDICATOR,\n component: () => import(\"src/pages/demo/elements/ProgressIndicator.vue\"),\n },\n {\n path: \"data-point\",\n name: DemoNamedPath.DATA_POINT,\n component: () => import(\"src/pages/demo/elements/DataPoint.vue\"),\n },\n {\n path: \"chips\",\n name: DemoNamedPath.CHIPS,\n component: () => import(\"src/pages/demo/elements/ChipElements.vue\"),\n },\n {\n path: \"main-menu\",\n name: DemoNamedPath.MAIN_MENU,\n component: () => import(\"src/pages/demo/elements/MainMenu.vue\"),\n },\n {\n path: \"to-do\",\n name: DemoNamedPath.TO_DO,\n component: () => import(\"src/pages/demo/elements/ToDoElements.vue\"),\n },\n {\n path: \"toggle-elements\",\n name: DemoNamedPath.TOGGLE,\n component: () => import(\"src/pages/demo/elements/ToggleElements.vue\"),\n },\n {\n path: \"procedure-step\",\n name: DemoNamedPath.PROCEDURE_STEP,\n component: () => import(\"src/pages/demo/elements/ProcedureSteps.vue\"),\n },\n {\n path: \"search-bar\",\n name: DemoNamedPath.SEARCH_BAR,\n component: () => import(\"src/pages/demo/functionality/SearchBar.vue\"),\n },\n {\n path: \"notifications\",\n name: DemoNamedPath.NOTIFICATIONS,\n component: () => import(\"src/pages/demo/elements/NotificationMessages.vue\"),\n },\n {\n path: \"priority-labels\",\n name: DemoNamedPath.PRIORITY_LABELS,\n component: () => import(\"src/pages/demo/elements/PriorityLabels.vue\"),\n },\n {\n path: \"filtering\",\n name: DemoNamedPath.FILTERING_ELEMENTS,\n component: () => import(\"src/pages/demo/elements/FilteringElements.vue\"),\n },\n {\n path: \"health-indicator\",\n name: DemoNamedPath.HEALTH_INDICATOR,\n component: () => import(\"src/pages/demo/elements/HealthIndicator.vue\"),\n },\n {\n path: \"images\",\n name: DemoNamedPath.IMAGE_GALLERY,\n component: () => import(\"src/pages/demo/elements/ImageElements.vue\"),\n },\n {\n path: \"charts\",\n name: DemoNamedPath.CHARTS,\n component: () => import(\"src/pages/demo/elements/ChartElements.vue\"),\n },\n {\n path: \"tooltips\",\n name: DemoNamedPath.TOOLTIPS,\n component: () => import(\"src/pages/demo/elements/TooltipElements.vue\"),\n },\n ],\n}\n\nexport default routes\n","import { useAuthStore } from \"src/stores/authStore\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { NavigationGuardWithThis } from \"vue-router\"\n\nfunction workspaceRoute() {\n const authStore = useAuthStore()\n // Go to selected workspace only if it exists\n return authStore.selectedWorkspace?.id\n ? { name: NamedManagerPath.WORKSPACE, params: { workspaceId: authStore.selectedWorkspace?.id } }\n : { name: NamedManagerPath.SELECT_WORKSPACE }\n}\n\nexport const loginGuard: NavigationGuardWithThis = (to) => {\n const authStore = useAuthStore()\n return authStore.isLoggedIn ? true : { name: NamedManagerPath.INITIATE_APP, query: to.query }\n}\n\nexport const loginWorkspaceGuard: NavigationGuardWithThis = () => {\n const authStore = useAuthStore()\n return !authStore.isLoggedIn ? true : workspaceRoute()\n}\n","import { loginGuard, loginWorkspaceGuard } from \"src/router/guards/manager/auth\"\nimport { UUID_REGEX } from \"src/util/constants/configurations\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { RouteRecordRaw } from \"vue-router\"\n\n/**\n * All the routes that are available to a manager.\n *\n * We have an entry per route that specifies the *full path* in the `path` field, so no subrouting.\n * This has some benefits:\n * - We can use the appropriate layout for each route.\n * - We can adjust permissions on the route level. That is, we can be very granular.\n * - There's a single spot where all the details of a route can be seen (parameters, permissions, name, layout).\n * This way we can be confident when we want to modify routes.\n *\n * We always name uuid's that are captured in the path properly, so we know what they refer to.\n * For instance, prefer `:workspaceId` over the generic `:id`.\n */\nconst routesManager: RouteRecordRaw[] = [\n ///// AUTH /////\n {\n path: \"/auth\",\n component: () => import(\"src/layouts/manager/AuthLayout.vue\"),\n beforeEnter: [loginWorkspaceGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.INITIATE_APP,\n component: () => import(\"src/pages/manager/InitiateApp.vue\"),\n },\n ],\n },\n\n ///// WORKSPACES /////\n {\n path: \"/workspaces\",\n component: () => import(\"src/layouts/manager/WorkspaceLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.SELECT_WORKSPACE,\n component: () => import(\"src/pages/manager/workspace/WorkspaceSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.WORKSPACE,\n component: () => import(\"src/pages/manager/workspace/WorkspaceContainer.vue\"),\n },\n ],\n },\n ///// ISSUES /////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.SELECT_ISSUE,\n component: () => import(\"src/pages/manager/issue/IssueSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues/:issueId${UUID_REGEX}`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.ISSUE,\n component: () => import(\"src/pages/manager/issue/IssueContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues/create/:itemId${UUID_REGEX}/:closedIssueId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.CREATE_ISSUE,\n component: () => import(\"src/pages/manager/issue/IssueCreate.vue\"),\n },\n ],\n },\n ///// ITEMS /////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/items`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.SELECT_ITEM,\n component: () => import(\"src/pages/manager/item/ItemSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/items/:itemId${UUID_REGEX}`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.ITEM,\n component: () => import(\"src/pages/manager/item/ItemContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/items/create/:clonedItemId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.CREATE_ITEM,\n component: () => import(\"src/pages/manager/item/ItemCreate.vue\"),\n },\n ],\n },\n\n ///// PERFORMED WORK /////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective`,\n redirect: { name: NamedManagerPath.SELECT_PERFORMED_WORK },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular`,\n redirect: { name: NamedManagerPath.SELECT_PERFORMED_WORK },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.SELECT_PERFORMED_WORK,\n component: () => import(\"src/pages/manager/work/PerformedWorkSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective/:performedWorkId${UUID_REGEX}`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.PERFORMED_CORRECTIVE_WORK,\n component: () => import(\"src/pages/manager/work/PerformedCorrectiveContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular/:performedWorkId${UUID_REGEX}`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.PERFORMED_REGULAR_WORK,\n component: () => import(\"src/pages/manager/work/PerformedRegularContainer.vue\"),\n },\n ],\n },\n\n ///// WORK ORDERS /////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/regular`,\n redirect: { name: NamedManagerPath.SELECT_WORK_ORDER },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/corrective`,\n redirect: { name: NamedManagerPath.SELECT_WORK_ORDER },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.SELECT_WORK_ORDER,\n component: () => import(\"src/pages/manager/work-order/WorkOrderSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/corrective/:workOrderId${UUID_REGEX}/:draftCreated?`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.WORK_ORDER_CORRECTIVE,\n component: () => import(\"src/pages/manager/work-order/WorkOrderCorrectiveContainer.vue\"),\n props: (route) => ({ draftCreated: Boolean(route.params.draftCreated) }),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/regular/:workOrderId${UUID_REGEX}/:draftCreated?`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.WORK_ORDER_REGULAR,\n component: () => import(\"src/pages/manager/work-order/WorkOrderRegularContainer.vue\"),\n props: (route) => ({ draftCreated: Boolean(route.params.draftCreated) }),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/create/:itemId${UUID_REGEX}?:issueId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/manager/GenericLayout.vue\"),\n beforeEnter: [loginGuard],\n children: [\n {\n path: \"\",\n name: NamedManagerPath.CREATE_WORK_ORDER,\n component: () => import(\"src/pages/manager/work-order/WorkOrderCreate.vue\"),\n },\n ],\n },\n]\n\nexport default routesManager\n","import { useAuthStore } from \"src/stores/authStore\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { NavigationGuardWithThis } from \"vue-router\"\n\nfunction workspaceRoute() {\n const authStore = useAuthStore()\n // Go to selected workspace only if it exists\n return authStore.selectedWorkspace?.id\n ? { name: NamedPath.WORKSPACE, params: { workspaceId: authStore.selectedWorkspace?.id } }\n : { name: NamedPath.SELECT_WORKSPACE }\n}\n\nexport const loginGuard: NavigationGuardWithThis = (to) => {\n const authStore = useAuthStore()\n return authStore.isLoggedIn ? true : { name: NamedPath.INITIATE_APP, query: to.query }\n}\n\nexport const loginWorkspaceGuard: NavigationGuardWithThis = () => {\n const authStore = useAuthStore()\n return !authStore.isLoggedIn ? true : workspaceRoute()\n}\n\nexport const lockGuard: NavigationGuardWithThis = () => {\n const authStore = useAuthStore()\n return authStore.isLocked ? { name: NamedPath.LOCK } : true\n}\n","import { i18n } from \"src/boot/i18n\"\nimport { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { getWorkDomainWorkspaceListData } from \"src/util/functions/entityData\"\nimport { getOpenCorrectiveWorkOnItemForIssue } from \"src/util/functions/issues\"\nimport { showWarningNotification } from \"src/util/functions/notifications\"\nimport { getItem } from \"src/util/http/csi/items\"\nimport { getWorkDomainWorkspace } from \"src/util/http/csi/workDomainsWorkspace\"\nimport { NavigationGuardWithThis, RouteLocationNormalized } from \"vue-router\"\n\nexport const canPerformCorrectiveWork: NavigationGuardWithThis = async (\n to,\n from,\n next\n) => {\n const canNavigate = await canGoToCorrectiveWork(to, from)\n if (canNavigate) next()\n else {\n from.name ? next(false) : next({ name: NamedPath.NOT_FOUND })\n }\n}\n\nexport const canPerformRegularWork: NavigationGuardWithThis = async (to, from, next) => {\n const canNavigate = await canGoToRegularWork(to, from)\n if (canNavigate) next()\n else {\n from.name ? next(false) : next({ name: NamedPath.NOT_FOUND })\n }\n}\n\nasync function canGoToCorrectiveWork(to: RouteLocationNormalized, from: RouteLocationNormalized) {\n const { t } = i18n.global\n\n try {\n const issueId = to.params[\"issueId\"]\n if (!issueId || typeof issueId !== \"string\") {\n Log.error({ message: \"Issue Id on corrective work guard is incorrect\", data: { to, from } })\n return false\n }\n\n const cacheStore = useCacheStore()\n const db = await getDB()\n\n const issueData =\n cacheStore.issues_on_item.get(issueId) ||\n (await db.issues_on_item.findOne(issueId).exec()) ||\n (await getOpenCorrectiveWorkOnItemForIssue(issueId))\n\n if (!issueData) {\n showWarningNotification(t(\"notifications.bad_issue_id\"))\n return false\n }\n\n const workDomainData =\n cacheStore.work_domain_workspace.get(issueData.work_domain) ||\n (await db.work_domain_workspace.findOne(issueData.work_domain).exec()) ||\n (await getWorkDomainWorkspace({}, issueData.work_domain))\n\n const correctiveWork = await getOpenCorrectiveWorkOnItemForIssue(issueId)\n\n if (workDomainData?.allows_corrective_adhoc) {\n if (correctiveWork) {\n const msg = t(\"notifications.corrective_work_already_exists\", {\n correctiveWorkTitle: correctiveWork.title,\n })\n showWarningNotification(msg)\n return false\n } else {\n return true\n }\n } else {\n const msg = t(\"notifications.corrective_work_not_allowed\", {\n workDomain: workDomainData?.designation,\n })\n showWarningNotification(msg)\n return false\n }\n } catch (error) {\n Log.debug({ message: \"Problem resolving corrective work guard\", data: { to, from, error } })\n showWarningNotification(t(\"notifications.bad_corrective_work_guard\"))\n return false\n }\n}\n\nasync function canGoToRegularWork(to: RouteLocationNormalized, from: RouteLocationNormalized) {\n const { t } = i18n.global\n\n try {\n const itemId = to.params[\"itemId\"]\n if (!itemId || typeof itemId !== \"string\") {\n Log.error({ message: \"Item Id on regular work guard is incorrect\", data: { to, from } })\n return false\n }\n\n const cacheStore = useCacheStore()\n const db = await getDB()\n\n const itemData =\n cacheStore.item.get(itemId) ||\n (await db.item.findOne(itemId).exec()) ||\n (await getItem({}, itemId))\n\n if (!itemData) {\n showWarningNotification(t(\"notifications.bad_item_id\"))\n return false\n }\n\n for (const workDomain of cacheStore.work_domain_workspace.values()) {\n if (workDomain.allows_regular_adhoc) return true\n }\n\n const workDomainData =\n (await db.work_domain_workspace.find().exec()) || (await getWorkDomainWorkspaceListData())\n\n if (workDomainData.some((workDomain) => workDomain.allows_regular_adhoc)) {\n return true\n }\n\n showWarningNotification(t(\"notifications.regular_work_not_allowed\"))\n return false\n } catch (error) {\n Log.debug({ message: \"Problem resolving regular work guard\", data: { to, from, error } })\n showWarningNotification(t(\"notifications.bad_regular_work_guard\"))\n return false\n }\n}\n","import { lockGuard, loginGuard, loginWorkspaceGuard } from \"src/router/guards/technician/auth\"\nimport { canPerformCorrectiveWork, canPerformRegularWork } from \"src/router/guards/technician/work\"\nimport { UUID_REGEX } from \"src/util/constants/configurations\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { RouteRecordRaw } from \"vue-router\"\n\n/**\n * All the routes that are available to a technician.\n *\n * We have an entry per route that specifies the *full path* in the `path` field, so no subrouting.\n * This has some benefits:\n * - We can use the appropriate layout for each route.\n * - We can adjust permissions on the route level. That is, we can be very granular.\n * - There's a single spot where all the details of a route can be seen (parameters, permissions, name, layout).\n * This way we can be confident when we want to modify routes.\n *\n * We always name uuid's that are captured in the path properly, so we know what they refer to.\n * For instance, prefer `:workspaceId` over the generic `:id`.\n */\nconst routesTechnician: RouteRecordRaw[] = [\n //////// SETTINGS ////////\n {\n path: \"/settings\",\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.USER_SETTINGS,\n component: () => import(\"src/pages/technician/settings/UserSettings.vue\"),\n },\n ],\n },\n\n //////// TODO ////////\n {\n path: `/to-dos/:unsubmittedWorkId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.TO_DO,\n component: () => import(\"src/pages/technician/to-do/ToDoContainer.vue\"),\n props: (route) => ({ unsubmittedWorkTabActive: Boolean(route.params.unsubmittedWorkId) }),\n },\n ],\n },\n\n //////// AUTH ////////\n {\n path: \"/auth\",\n component: () => import(\"src/layouts/technician/AuthLayout.vue\"),\n children: [\n {\n path: \"\",\n name: NamedPath.INITIATE_APP,\n component: () => import(\"src/pages/technician/InitiateApp.vue\"),\n beforeEnter: [loginWorkspaceGuard],\n },\n ],\n },\n {\n path: \"/auth/lock\",\n component: () => import(\"src/layouts/technician/AuthLayout.vue\"),\n children: [\n {\n path: \"\",\n name: NamedPath.LOCK,\n component: () => import(\"src/pages/technician/auth/LockScreen.vue\"),\n beforeEnter: [loginGuard],\n },\n ],\n },\n\n //////// WORKSPACE ////////\n {\n path: \"/workspaces\",\n component: () => import(\"src/layouts/technician/WorkspaceSelectLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_WORKSPACE,\n component: () => import(\"src/pages/technician/workspace/WorkspaceSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/WorkspaceLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.WORKSPACE,\n component: () => import(\"src/pages/technician/workspace/WorkspaceHome.vue\"),\n },\n ],\n },\n\n //////// ITEMS ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/items`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_ITEM,\n component: () => import(\"src/pages/technician/item/ItemSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/items/:itemId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.ITEM,\n component: () => import(\"src/pages/technician/item/ItemContainer.vue\"),\n },\n ],\n },\n\n //////// LAYOUTS ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/layouts`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_LAYOUT,\n component: () => import(\"src/pages/technician/layout/LayoutSelect.vue\"),\n },\n ],\n },\n\n //////// MODELS ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/models`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_MODEL,\n component: () => import(\"src/pages/technician/model/ModelSelect.vue\"),\n },\n ],\n },\n\n //////// PERFORMED WORK ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective`,\n redirect: { name: NamedPath.SELECT_PERFORMED_WORK },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular`,\n redirect: { name: NamedPath.SELECT_PERFORMED_WORK },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_PERFORMED_WORK,\n component: () => import(\"src/pages/technician/work/PerformedWorkSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective/:performedWorkId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.PERFORMED_CORRECTIVE_WORK,\n component: () => import(\"src/pages/technician/work/PerformedCorrectiveContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective/create/ad-hoc/:issueId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard, canPerformCorrectiveWork],\n children: [\n {\n path: \"\",\n name: NamedPath.ADHOC_CORRECTIVE_WORK,\n component: () => import(\"src/pages/technician/work/AdhocCorrectiveContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/corrective/create/planned/:issueId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard, canPerformCorrectiveWork],\n children: [\n {\n path: \"\",\n name: NamedPath.PLANNED_CORRECTIVE_WORK,\n component: () => import(\"src/pages/technician/work/PlannedCorrectiveContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular/:performedWorkId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.PERFORMED_REGULAR_WORK,\n component: () => import(\"src/pages/technician/work/PerformedRegularContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular/create/ad-hoc/:itemId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard, canPerformRegularWork],\n children: [\n {\n path: \"\",\n name: NamedPath.ADHOC_REGULAR_WORK,\n component: () => import(\"src/pages/technician/work/AdhocRegularContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/performed-work/regular/create/planned/:itemId${UUID_REGEX}/:workOrderId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard, canPerformRegularWork],\n children: [\n {\n path: \"\",\n name: NamedPath.PLANNED_REGULAR_WORK,\n component: () => import(\"src/pages/technician/work/PlannedRegularContainer.vue\"),\n },\n ],\n },\n\n //////// WORK ORDERS ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/corrective`,\n redirect: { name: NamedPath.SELECT_WORK_ORDER },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/regular`,\n redirect: { name: NamedPath.SELECT_WORK_ORDER },\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_WORK_ORDER,\n component: () => import(\"src/pages/technician/work-order/WorkOrderSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/corrective/:workOrderId${UUID_REGEX}/:itemId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.WORK_ORDER_CORRECTIVE,\n component: () => import(\"src/pages/technician/work-order/WorkOrderCorrectiveContainer.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/work-orders/regular/:workOrderId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.WORK_ORDER_REGULAR,\n component: () => import(\"src/pages/technician/work-order/WorkOrderRegularContainer.vue\"),\n },\n ],\n },\n\n //////// ZONES ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/zones`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_ZONE,\n component: () => import(\"src/pages/technician/zone/ZoneSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/zones/:zoneId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.ZONE,\n component: () => import(\"src/pages/technician/zone/ZoneContainer.vue\"),\n },\n ],\n },\n\n //////// AREAS ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/areas`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_AREA,\n component: () => import(\"src/pages/technician/area/AreaSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/areas/:areaId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.AREA,\n component: () => import(\"src/pages/technician/area/AreaContainer.vue\"),\n },\n ],\n },\n\n //////// ISSUES ////////\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_ISSUE,\n component: () => import(\"src/pages/technician/issue/IssueSelect.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues/:issueId${UUID_REGEX}`,\n component: () => import(\"src/layouts/technician/GenericLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.ISSUE,\n component: () => import(\"src/pages/technician/issue/IssueOverview.vue\"),\n },\n ],\n },\n {\n path: `/workspaces/:workspaceId${UUID_REGEX}/issues/for-item/:itemId${UUID_REGEX}?`,\n component: () => import(\"src/layouts/technician/GenericSearchLayout.vue\"),\n beforeEnter: [loginGuard, lockGuard],\n children: [\n {\n path: \"\",\n name: NamedPath.SELECT_ISSUE_FOR_ITEM,\n component: () => import(\"src/pages/technician/issue/IssueSelect.vue\"),\n },\n ],\n },\n]\n\nexport default routesTechnician\n","import demoRoutes from \"src/router/routes/demoRoutes\"\nimport managerRouteList from \"src/router/routes/manager/routes\"\nimport technicianRouteList from \"src/router/routes/technician/routes\"\nimport { Log } from \"src/util/classes/log\"\nimport { NamedManagerPath, NamedPath } from \"src/util/enums/namedPaths\"\nimport { NavigationGuardWithThis, RouteRecordRaw } from \"vue-router\"\n\nconst logBadPath: NavigationGuardWithThis = (to, from) => {\n Log.warning({ message: \"Bad URL\", data: { to, from } })\n}\n\nexport const technicianRoutes: RouteRecordRaw[] = [\n {\n path: \"/\",\n component: () => null,\n children: [\n {\n path: \"\",\n name: NamedPath.INDEX,\n redirect: { name: NamedPath.INITIATE_APP },\n },\n ],\n },\n\n ...technicianRouteList,\n\n // Always leave this as last one,\n // but you can also remove it\n {\n path: \"/:catchAll(.*)*\",\n name: NamedPath.NOT_FOUND,\n component: () => import(\"src/pages/404NotFound.vue\"),\n beforeEnter: logBadPath,\n },\n]\n\nexport const managerRoutes: RouteRecordRaw[] = [\n {\n path: \"/\",\n component: () => null,\n children: [\n {\n path: \"\",\n name: NamedManagerPath.INDEX,\n redirect: { name: NamedManagerPath.INITIATE_APP },\n },\n ],\n },\n ...managerRouteList,\n\n // Always leave this as last one,\n // but you can also remove it\n {\n path: \"/:catchAll(.*)*\",\n name: NamedPath.NOT_FOUND,\n component: () => import(\"src/pages/404NotFound.vue\"),\n beforeEnter: logBadPath,\n },\n]\n\nif (process.env.DEV || process.env.DEBUGGING) {\n technicianRoutes.unshift(demoRoutes)\n managerRoutes.unshift(demoRoutes)\n}\n","import { Screen } from \"quasar\"\nimport { managerRoutes, technicianRoutes } from \"src/router/routes/routes\"\nimport { useApiAbortStore } from \"src/stores/apiAbortStore\"\nimport { useManagerTopNavigationStore } from \"src/stores/managerTopNavigationStore\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport {\n createMemoryHistory,\n createRouter,\n createWebHashHistory,\n createWebHistory,\n} from \"vue-router\"\n\nconst createHistory = process.env.SERVER\n ? createMemoryHistory\n : process.env.VUE_ROUTER_MODE === \"history\"\n ? createWebHistory\n : createWebHashHistory\n\nconst router = createRouter({\n scrollBehavior: (to) => {\n // Go to anchor\n if (to.hash) {\n return {\n el: to.hash,\n top: Screen.height / 2, // Put it in the middle\n behavior: \"smooth\",\n }\n } else {\n return { left: 0, top: 0 }\n }\n },\n\n routes: process.env.IS_MANAGER_MODE ? managerRoutes : technicianRoutes,\n\n // Capacitor and Electron will always be in hash mode as it is the only thing it supports.\n history: createHistory(process.env.VUE_ROUTER_BASE),\n})\n\nif (process.env.IS_MANAGER_MODE) {\n router.beforeEach(() => {\n const topNavigationStore = useManagerTopNavigationStore()\n topNavigationStore.$reset()\n\n const supportStore = useSupportStore()\n supportStore.feedback = {}\n\n const apiAbortStore = useApiAbortStore()\n apiAbortStore.abortControllers()\n })\n} else {\n router.beforeResolve((to, from) => {\n // Make sure the search bar is not present\n const searchStore = useSearchStore()\n searchStore.resetIntermediateData()\n\n const topNavigationStore = useTopNavigationStore()\n // We don't want to reset the store if we do internal TO_DO navigation\n // This is also because we use router.replace\n if (to.name !== NamedPath.TO_DO || from.name !== to.name) {\n topNavigationStore.$reset()\n }\n\n const supportStore = useSupportStore()\n supportStore.feedback = {}\n\n const apiAbortStore = useApiAbortStore()\n apiAbortStore.abortControllers()\n })\n}\n\nexport default router\n","import { defineStore } from \"pinia\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { HttpAbortConfig, HttpRequestType } from \"src/util/types/dataModels/http\"\nimport { v4 as uuidv4 } from \"uuid\"\n\nexport interface ApiAbortStoreType {\n abortControllerData: HttpAbortConfig[]\n}\n\nexport const useApiAbortStore = defineStore(\"pinia-apiAbortStore\", {\n state: (): ApiAbortStoreType => ({\n abortControllerData: [],\n }),\n\n actions: {\n createController(requestType: HttpRequestType, url?: string): HttpAbortConfig {\n const abortController = new AbortController()\n const id = uuidv4()\n\n const httpConfig: HttpAbortConfig = { controller: abortController, id, requestType, url }\n\n this.addController(httpConfig)\n\n return httpConfig\n },\n\n addController(abortHandler: HttpAbortConfig) {\n const apiCallStore = useApiCallStore()\n abortHandler.url = apiCallStore.getFixedUrl(abortHandler.url || \"\")\n this.abortControllerData.push(abortHandler)\n },\n\n removeController(id: string) {\n this.abortControllerData = this.abortControllerData.filter((i) => i.id !== id)\n },\n\n abortControllers(requestType: HttpRequestType = \"GET\") {\n const apiCallStore = useApiCallStore()\n for (const controllerData of this.abortControllerData) {\n if (controllerData.requestType === requestType) {\n controllerData.controller.abort()\n if (controllerData.url) apiCallStore.endpointLastCall[controllerData.url] = 0\n this.removeController(controllerData.id)\n }\n }\n },\n },\n})\n","import { AxiosRequestConfig } from \"axios\"\nimport { defineStore } from \"pinia\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { DEBOUNCE_TIME_API_CALL } from \"src/util/constants/configurations\"\n\nexport interface ApiCallStoreType {\n endpointLastCall: Record\n workspaceLastCall: Record\n}\n\nexport const useApiCallStore = defineStore(\"pinia-apiCallStore\", {\n persist: true,\n\n state: (): ApiCallStoreType => {\n return {\n endpointLastCall: {},\n workspaceLastCall: {},\n }\n },\n getters: {\n getFixedUrl: () => {\n const authStore = useAuthStore()\n const uuid = authStore.selectedWorkspace?.id\n return (url: string) => (uuid && url.startsWith(\"/\" + uuid) ? url : \"/\" + uuid + url)\n },\n },\n actions: {\n // Save the last get API request time in milliseconds in the store\n updateLastApiCallTime(config: AxiosRequestConfig, isSpringboardCall: boolean = false) {\n // We need to have some URL and we want to only look at GET requests\n if (!config.baseURL || !config.url || config.method !== \"get\") return\n\n const url = new URL(config.baseURL + config.url)\n const searchParams = new URLSearchParams(url.search)\n\n const ignoreList = [\"page\", \"page_size\", \"updated_dt__gte\"]\n\n for (const param of ignoreList) {\n searchParams.delete(param)\n }\n\n const urlString = url.pathname + searchParams.toString()\n const fixedUrl = isSpringboardCall ? urlString : this.getFixedUrl(urlString)\n\n // verify whether the url has a question mark except at the end\n const hasQuestionMark = fixedUrl.slice(0, -1).includes(\"?\")\n\n // consider only the requests without any filtering - aka, there is no \"?\"\n if (!hasQuestionMark) {\n this.endpointLastCall[fixedUrl] = Date.now()\n }\n },\n\n updateLastApiCallTimeConcurrent(url: string) {\n const fixedUrl = this.getFixedUrl(url)\n this.endpointLastCall[fixedUrl] = Date.now()\n },\n\n // Takes the axios baseUrl\n updateWorkspaceLastApiCallTime(baseUrl?: string) {\n const uuid = baseUrl?.split(\"/\").pop()\n if (uuid) {\n this.workspaceLastCall[uuid] = Date.now()\n }\n },\n\n canCallAgain(url: string, debounceTime?: number) {\n const fixedUrl = this.getFixedUrl(url)\n const lastCallTime = this.endpointLastCall[fixedUrl]\n\n // if the url is not stored in the store, call the API right away\n if (!lastCallTime) return true\n\n if (debounceTime === undefined) debounceTime = DEBOUNCE_TIME_API_CALL\n\n return Date.now() - lastCallTime > debounceTime\n },\n\n // Return the last API call UTC time stamp in the format: 2023-01-17T21:58:48.658Z\n getLastUpdatedTimeStamp(url: string) {\n const fixedUrl = this.getFixedUrl(url)\n const lastCallTime = this.endpointLastCall[fixedUrl]\n\n return lastCallTime ? new Date(lastCallTime).toISOString() : undefined\n },\n },\n})\n","import { useApiAbortStore } from \"src/stores/apiAbortStore\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useCapacitorAppInfoStore } from \"src/stores/capacitorAppInfoStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { useToDoItemsStore } from \"src/stores/todoItemsStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\n\nexport function clearLocalStorage() {\n localStorage.clear()\n}\n\nexport function resetPiniaStores() {\n const authStore = useAuthStore()\n const apiCallStore = useApiCallStore()\n const apiAbortStore = useApiAbortStore()\n const capacitorAppInfoStore = useCapacitorAppInfoStore()\n const configurationStore = useConfigurationStore()\n const searchStore = useSearchStore()\n const supportStore = useSupportStore()\n const todoItemsStore = useToDoItemsStore()\n const topNavigationStore = useTopNavigationStore()\n const userStore = useUserStore()\n\n authStore.$reset()\n apiCallStore.$reset()\n apiAbortStore.$reset()\n capacitorAppInfoStore.$reset()\n configurationStore.$reset()\n searchStore.$reset()\n supportStore.$reset()\n todoItemsStore.$reset()\n topNavigationStore.$reset()\n userStore.$reset()\n}\n","import { Argon2BrowserHashResult } from \"argon2-browser\"\nimport { defineStore } from \"pinia\"\nimport { generateCodeChallenge, generateCodeVerifier } from \"src/auth/pkce\"\nimport {\n refreshAccessToken,\n registerDevice,\n requestAccessToken,\n requestAuthorizationCode,\n revokeToken,\n verifyAccessToken,\n} from \"src/auth/token\"\nimport { AuthenticationToken, ClientCredentials } from \"src/auth/types\"\nimport { csiAPI } from \"src/boot/axios\"\nimport { syncDBCache, syncUnsubmittedWork } from \"src/boot/databaseCacheSync\"\nimport { LINKS } from \"src/env/links\"\nimport router from \"src/router\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { NamedManagerPath, NamedPath } from \"src/util/enums/namedPaths\"\nimport { authenticationErrorDialog, dataFetchDialog } from \"src/util/functions/dialogs\"\nimport { clearLocalStorage, resetPiniaStores } from \"src/util/functions/reset\"\nimport { WorkspaceDetail } from \"src/util/types/dataModels/workspace\"\n\nexport interface AuthStoreType {\n email: string\n passHashed: Argon2BrowserHashResult | null\n unlockKeyHashed: Argon2BrowserHashResult | null\n isLocked: boolean\n selectedWorkspace: WorkspaceDetail | null\n clientCredentials: ClientCredentials | null\n authenticationToken: AuthenticationToken | null\n sso?: boolean\n codeCheck: PKCE | Record // Allows for empty object assignment\n authorizationCode: string | null\n}\n\nexport interface PKCE {\n codeVerifier?: string\n codeChallenge?: string\n}\n\n//TODO: Add comments on the functionality of methods\nexport const useAuthStore = defineStore(\"pinia-authStore\", {\n persist: true,\n\n state: (): AuthStoreType => ({\n email: \"\",\n passHashed: null,\n unlockKeyHashed: null,\n isLocked: false,\n selectedWorkspace: null,\n clientCredentials: null,\n authenticationToken: null,\n sso: false,\n codeCheck: {},\n authorizationCode: null,\n }),\n\n getters: {\n /**\n * If we detect that there is a valid authentication token object (access token + rest),\n * then we know that the user is logged in, as that token is required for all HTTP operations.\n *\n * @param state\n */\n isLoggedIn(state: AuthStoreType): boolean {\n return Boolean(state.authenticationToken)\n },\n\n /**\n * Returns the access token type and the access token for the logged-in user\n * ex: \"Bearer FtAgiIh+RGTojcgme7JKCwgJQVGDDCyE145SitHtdikxYAF\"\n *\n * In case the access token is not available, returns an empty string\n *\n * @param state\n */\n getAccessTokenString(state: AuthStoreType): string {\n if (!state.authenticationToken) return \"\"\n return state.authenticationToken.token_type + \" \" + state.authenticationToken.access_token\n },\n\n /**\n * Checks if all required data needed for requesting access tokens is present.\n *\n * @param state\n */\n canRequestAccessToken(state: AuthStoreType): boolean {\n // The order of checks is the order we do in the login sequence\n return (\n Boolean(state.clientCredentials) &&\n Boolean(state.codeCheck?.codeVerifier) &&\n Boolean(state.authorizationCode)\n )\n },\n\n getCSIBaseUrl(state: AuthStoreType): string {\n const uuid = state.selectedWorkspace?.id || \"\"\n return LINKS.CSI_URL + \"/\" + uuid\n },\n },\n\n actions: {\n lock() {\n this.isLocked = true\n },\n\n unlock() {\n this.isLocked = false\n },\n\n /**\n * Sets the selected workspace to the one provided.\n * The selected workspace is used for all internal workspace related actions.\n * This also changes the CSI HTTP baseURL, fetches all the data if this is the first time we have connected to\n * this workspace, and also it rebuilds the cache and DB event subscriptions.\n *\n * If the data fetch is aborted, then we reset the selected workspace.\n *\n * @param workspace\n */\n async setSelectedWorkspace(workspace: WorkspaceDetail) {\n this.selectedWorkspace = workspace\n\n // Change base URL for the CSI, so that HTTP requests would go to the correct endpoints\n csiAPI.defaults.baseURL = this.getCSIBaseUrl\n\n const apiCallStore = useApiCallStore()\n const configurationStore = useConfigurationStore()\n\n // If there is no record, this means that it is the first time we enter the workspace, so we fetch all data\n if (\n configurationStore.downloadDataOnStartUp &&\n !apiCallStore.workspaceLastCall[workspace.id]\n ) {\n const dataFetched = await dataFetchDialog(workspace.id)\n if (!dataFetched) {\n const routeName = process.env.IS_MANAGER_MODE\n ? NamedManagerPath.SELECT_WORKSPACE\n : NamedPath.SELECT_WORKSPACE\n\n // Fetch aborted, so we reset the values\n this.selectedWorkspace = null\n csiAPI.defaults.baseURL = undefined\n delete apiCallStore.workspaceLastCall[workspace.id]\n\n return router.push({ name: routeName })\n }\n }\n\n // We switch to a different workspace, so rebuild cache and resubscribe to DB events\n await syncDBCache()\n await syncUnsubmittedWork()\n },\n\n setNewPasswordHashed(password: Argon2BrowserHashResult) {\n this.passHashed = password\n },\n\n setUnlockKeyHashed(key: Argon2BrowserHashResult) {\n this.unlockKeyHashed = key\n },\n\n /**\n * Resets the auth store data and attempts to clean all extraneous data.\n * Carries over some data, like the client credentials, since they are device specific and not user specific.\n * Routes the user back to the app initiation screen.\n */\n async logout() {\n // Transfer over client credentials since they are device specific\n const savedClientCredentials = this.clientCredentials\n\n try {\n await this.revokeToken()\n } catch (error) {\n Log.warning({ message: \"Failed to revoke token\", error })\n }\n\n resetPiniaStores()\n clearLocalStorage()\n\n // NOTE: In some cases you might need to manually delete this if your local IP changes.\n this.clientCredentials = savedClientCredentials\n localStorage.removeItem(\"mockWorkspaceData\")\n\n await router.push({ name: NamedPath.INITIATE_APP })\n },\n\n /**\n * Attempts to register the device on springboard.\n *\n * @throws Failed HTTP request\n */\n async registerDevice() {\n try {\n this.clientCredentials = await registerDevice()\n } catch (error) {\n Log.debug(\"Could not register the device.\")\n throw error\n }\n },\n\n /**\n * Sends a request for authorization code with newly generates code verifier and challenge.\n * Code verifier and challenge are only saved on successful operation.\n *\n * @throws Client credentials are not present\n * @throws Failure to open in-app browser/redirect to springboard login page\n */\n async requestAuthorizationCode() {\n const codeVerifier = generateCodeVerifier()\n const codeChallenge = generateCodeChallenge(codeVerifier)\n\n // This should not happen as we make sure to check it during app start, but just a precaution\n if (!this.clientCredentials) {\n throw new Error(\"Client credentials during request for authorization code are undefined\")\n }\n\n try {\n await requestAuthorizationCode(codeChallenge, this.clientCredentials.client_id)\n\n // Request successfully send, save variables\n this.codeCheck.codeVerifier = codeVerifier\n this.codeCheck.codeChallenge = codeChallenge\n } catch (error) {\n Log.debug(\"There was an error when requesting the authorization code.\")\n throw error\n }\n },\n\n /**\n * Attempts to save the received authorization code to the store.\n * If they are not valid, it logs an error, but it doesn't throw it.\n *\n * @param authorizationCode\n */\n async handleAuthorizationCode(authorizationCode?: string | null) {\n if (authorizationCode) {\n this.authorizationCode = authorizationCode\n } else {\n Log.error({\n message: \"Bad input for authorization code given\",\n data: { authorizationCode },\n })\n }\n },\n\n /**\n * Sends a request for getting access token data.\n *\n * @throws Request payload is not valid\n * @throws Failed HTTP request\n */\n async getAccessToken() {\n // Only ask for access token if we have all available resources, else throw an error\n if (this.canRequestAccessToken) {\n try {\n // We know that those are not null due to canRequestAccessToken, but ESLint doesn't\n\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n\n this.authenticationToken = await requestAccessToken(\n this.authorizationCode!,\n this.clientCredentials!.client_id,\n this.codeCheck.codeVerifier!\n )\n\n /*eslint-enable @typescript-eslint/no-non-null-assertion */\n } catch (error) {\n if (error && typeof error === \"object\") {\n const errorObject = error as Record\n if (errorObject.error === \"invalid_grant\") {\n // The authorization code expired, so we have to renew it\n this.authorizationCode = null\n }\n }\n\n Log.debug(\"An error occurred while trying to get the access token.\")\n throw error\n }\n } else {\n await authenticationErrorDialog()\n\n // Leave a breadcrumb with the faulty data\n Log.debug({\n data: {\n authorizationCode: this.authorizationCode,\n clientId: this.clientCredentials?.client_id,\n codeVerifier: this.codeCheck?.codeVerifier,\n },\n })\n\n this.$reset()\n await router.push({ name: NamedPath.INITIATE_APP })\n\n throw new Error(\"Auth store has bad values for requesting access token\")\n }\n },\n\n /**\n * Sends a request for verifying the access token.\n *\n */\n async verifyAccessToken() {\n try {\n if (!this.authenticationToken) {\n Log.error({\n message: \"Auth store has bad values for access token.\",\n })\n return\n }\n await verifyAccessToken(this.authenticationToken.access_token)\n } catch (error) {\n Log.debug({\n message: \"An error occurred while trying to verify the access token.\",\n data: { error },\n })\n }\n },\n\n /**\n * Sends a request for getting access token data from refresh token.\n *\n * @throws Request payload is not valid\n * @throws Failed HTTP request\n */\n async refreshAccessToken() {\n try {\n if (!this.clientCredentials || !this.authenticationToken) {\n await authenticationErrorDialog()\n Log.error({\n message: \"Auth store has bad values for client credentials and authentication token.\",\n })\n\n return\n }\n this.authenticationToken = await refreshAccessToken(\n this.clientCredentials.client_id,\n this.authenticationToken.refresh_token\n )\n } catch (error) {\n if (error && typeof error === \"object\") {\n const errorObject = error as Record\n if (errorObject.error === \"invalid_grant\" || errorObject.error === \"invalid_client\") {\n // Cannot refresh token, so either revoked or someone screwed up\n this.authorizationCode = null\n this.authenticationToken = null\n this.clientCredentials = null\n }\n }\n Log.debug(\"An error occurred while trying to refresh the access token.\")\n throw error\n }\n },\n\n /**\n * Sends a request for revoking the token.\n */\n async revokeToken() {\n try {\n if (!this.clientCredentials || !this.authenticationToken) {\n Log.error({\n message: \"Auth store has bad values for client credentials and authentication token.\",\n })\n return\n }\n await revokeToken(this.clientCredentials.client_id, this.authenticationToken.refresh_token)\n } catch (error) {\n Log.debug({\n message: \"An error occurred while trying to revoke the token.\",\n data: { error },\n })\n }\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { isRxDocument, RxDocument } from \"rxdb\"\nimport { CorrectiveWorkOnItemDocument } from \"src/db/collectionDefinitions/csi/correctiveWork\"\nimport { WorkOrderRegularItemDocument } from \"src/db/collectionDefinitions/csi/workOrder\"\nimport { getCommonDB, getDB } from \"src/db/databases\"\nimport { Log } from \"src/util/classes/log\"\nimport { CACHE_AVATARS, CACHE_IMAGES } from \"src/util/constants/configurations\"\nimport {\n isAttributeChar,\n isAttributeNumeric,\n isAttributeSelect,\n} from \"src/util/functions/attributes\"\nimport { Attachment, AttachmentData } from \"src/util/types/dataModels/attachment\"\nimport {\n AttributeBaseExtensions,\n AttributeChar,\n AttributeNumeric,\n AttributeSelect,\n AttributeSelectOptions,\n AttributeTemporal,\n AttributeType,\n AttributeValueCharFull,\n AttributeValueNumericFull,\n AttributeValueSelectFull,\n AttributeValueTemporalFull,\n} from \"src/util/types/dataModels/attribute\"\nimport {\n IssueCardData,\n IssueEventCardCacheData,\n IssuesOnItem,\n IssuesOnItemAction,\n} from \"src/util/types/dataModels/issue\"\nimport { IssueComment } from \"src/util/types/dataModels/issueComment\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { Item, ItemCardData } from \"src/util/types/dataModels/item\"\nimport {\n ItemClass,\n ItemClassPromotedAttribute,\n ItemClassWithAttributes,\n} from \"src/util/types/dataModels/itemClass\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport {\n CorrectiveWorkOnItem,\n PerformedWorkComment,\n PerformedWorkOnItemCardData,\n RegularWorkOnItem,\n} from \"src/util/types/dataModels/performedWork\"\nimport { UserAvatar, UserBasic, UserRole } from \"src/util/types/dataModels/user\"\nimport { WorkDomainGlobal, WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport {\n WorkOrderCardData,\n WorkOrderCorrectiveItem,\n WorkOrderRegularItem,\n} from \"src/util/types/dataModels/workOrder\"\nimport {\n WorkOrderCorrectiveItemComment,\n WorkOrderRegularItemComment,\n} from \"src/util/types/dataModels/workOrderComment\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\nimport { WorkspaceDetail } from \"src/util/types/dataModels/workspace\"\n\nexport interface CacheStoreType {\n //region Items\n\n item: Map\n item_class: Map\n item_model: Map\n\n //endregion\n\n //region Attributes\n\n attribute_char: Map\n attribute_numeric: Map\n attribute_select: Map\n attribute_select_options: Map\n attribute_temporal: Map\n\n // The keys are attribute id + entity id\n attribute_char_value: Map\n attribute_numeric_value: Map\n attribute_select_value: Map\n attribute_temporal_value: Map\n\n //endregion\n\n //region Issues\n\n issue_priority: Map\n issues_on_item: Map\n issue_on_item_actions: Map\n issue_on_item_comments: Map\n\n //endregion\n\n //region Work\n\n corrective_work_on_item: Map\n regular_work_on_item: Map\n corrective_work_item_comments: Map\n regular_work_item_comments: Map\n\n work_domain_workspace: Map\n\n work_order_corrective_item: Map\n work_order_corrective_item_comments: Map\n work_order_regular_item: Map\n work_order_regular_item_comments: Map\n work_order_priority: Map\n\n //endregion\n\n //region Common\n\n work_domain_global: Map\n workspaces: Map\n user: Map\n user_avatar: Map\n user_roles: Map\n\n //endregion\n\n //region Others\n\n attachment: Map\n attachment_data: Map\n itemClassWithAttributes: Map\n itemClassPromotedAttribute: Map\n itemIssues: Map\n itemWorkOrders: Map\n issueWithOpenCorrectiveWork: Map\n\n // Identifiers\n\n //endregion\n\n //region Cards\n\n itemCard: Map\n issueCard: Map\n performedWorkCard: Map\n issueEventCards: Map\n workOrderCard: Map\n\n //endregion\n}\n\nexport const useCacheStore = defineStore(\"pinia-cacheStore\", {\n state: (): CacheStoreType => ({\n item: new Map(),\n item_class: new Map(),\n item_model: new Map(),\n issue_priority: new Map(),\n issues_on_item: new Map(),\n issue_on_item_actions: new Map(),\n issue_on_item_comments: new Map(),\n corrective_work_on_item: new Map(),\n regular_work_on_item: new Map(),\n corrective_work_item_comments: new Map(),\n regular_work_item_comments: new Map(),\n attachment: new Map(),\n attachment_data: new Map(),\n\n attribute_char: new Map(),\n attribute_numeric: new Map(),\n attribute_select: new Map(),\n attribute_select_options: new Map(),\n attribute_temporal: new Map(),\n\n attribute_char_value: new Map(),\n attribute_numeric_value: new Map(),\n attribute_select_value: new Map(),\n attribute_temporal_value: new Map(),\n\n itemCard: new Map(),\n issueCard: new Map(),\n performedWorkCard: new Map(),\n issueEventCards: new Map(),\n workOrderCard: new Map(),\n\n itemClassWithAttributes: new Map(),\n itemClassPromotedAttribute: new Map(),\n itemIssues: new Map(),\n itemWorkOrders: new Map(),\n issueWithOpenCorrectiveWork: new Map(),\n\n work_order_corrective_item: new Map(),\n work_order_corrective_item_comments: new Map(),\n work_order_regular_item: new Map(),\n work_order_regular_item_comments: new Map(),\n work_order_priority: new Map(),\n\n work_domain_workspace: new Map(),\n work_domain_global: new Map(),\n workspaces: new Map(),\n user: new Map(),\n user_avatar: new Map(),\n user_roles: new Map(),\n }),\n\n getters: {\n getCollection: (state) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return (collection: string): Map => state[collection]\n },\n },\n\n actions: {\n async rebuildCache() {\n console.debug(\"Building caches\")\n\n this.$reset()\n await caches.delete(CACHE_IMAGES)\n await caches.delete(CACHE_AVATARS)\n\n const timerText = \"Cache Build Time\"\n\n console.time(timerText)\n\n try {\n // TODO: Make generic function to deal with this mess\n const db = await getDB()\n\n const itemData = await db.item.find().exec()\n this.item = dbToMap(itemData)\n\n const itemClassData = await db.item_class.find().exec()\n this.item_class = dbToMap(itemClassData)\n\n const attributeCharData = await db.attribute_char.find().exec()\n this.attribute_char = dbToMap(attributeCharData)\n\n const attributeNumericData = await db.attribute_numeric.find().exec()\n this.attribute_numeric = dbToMap(attributeNumericData)\n\n const attributeSelectData = await db.attribute_select.find().exec()\n this.attribute_select = dbToMap(attributeSelectData)\n\n const attributeSelectOptionsData = await db.attribute_select_options.find().exec()\n this.attribute_select_options = dbToMap(attributeSelectOptionsData)\n\n const attributeTemporalData = await db.attribute_temporal.find().exec()\n this.attribute_temporal = dbToMap(attributeTemporalData)\n\n const attributeCharValueData = await db.attribute_char_value.find().exec()\n this.attribute_char_value =\n dbToMapAttributes(attributeCharValueData)\n\n const attributeNumericValueData = await db.attribute_numeric_value.find().exec()\n this.attribute_numeric_value =\n dbToMapAttributes(attributeNumericValueData)\n\n const attributeSelectValueData = await db.attribute_select_value.find().exec()\n this.attribute_select_value =\n dbToMapAttributes(attributeSelectValueData)\n\n const attributeTemporalValueData = await db.attribute_temporal_value.find().exec()\n this.attribute_temporal_value = dbToMapAttributes(\n attributeTemporalValueData\n )\n\n const issuePrioritiesData = await db.issue_priority.find().exec()\n this.issue_priority = dbToMap(issuePrioritiesData)\n\n const issueOnItemData = await db.issues_on_item.find().exec()\n this.issues_on_item = dbToMap(issueOnItemData)\n cacheItemWithIssues(issueOnItemData, this.itemIssues)\n\n const issueOnItemActionsData = await db.issue_on_item_actions.find().exec()\n this.issue_on_item_actions = dbToMap(issueOnItemActionsData)\n\n const issueOnItemCommentsData = await db.issue_on_item_comments.find().exec()\n this.issue_on_item_comments = dbToMap(issueOnItemCommentsData)\n\n const correctiveWorkOnItemData = await db.corrective_work_on_item.find().exec()\n this.corrective_work_on_item = dbToMap(correctiveWorkOnItemData)\n cacheInsertIssueWithOpenCorrectiveWork(\n correctiveWorkOnItemData,\n this.issueWithOpenCorrectiveWork\n )\n\n const regularWorkOnItemData = await db.regular_work_on_item.find().exec()\n this.regular_work_on_item = dbToMap(regularWorkOnItemData)\n\n const workOrderCorrectiveItemData = await db.work_order_corrective_item.find().exec()\n this.work_order_corrective_item = dbToMap(\n workOrderCorrectiveItemData\n )\n\n const workOrderCorrectiveItemCommentData = await db.work_order_corrective_comments\n .find()\n .exec()\n this.work_order_corrective_item_comments = dbToMap(\n workOrderCorrectiveItemCommentData\n )\n\n const workOrderRegularItemData = await db.work_order_regular_item.find().exec()\n this.work_order_regular_item = dbToMap(workOrderRegularItemData)\n cacheInsertItemWithWorkOrders(workOrderRegularItemData, this.itemWorkOrders)\n\n const workOrderRegularItemCommentData = await db.work_order_regular_comments.find().exec()\n this.work_order_regular_item_comments = dbToMap(\n workOrderRegularItemCommentData\n )\n\n const workOrderPriorityData = await db.work_order_priority.find().exec()\n this.work_order_priority = dbToMap(workOrderPriorityData)\n\n const attachmentsData = await db.attachment.find().exec()\n this.attachment = dbToMap(attachmentsData)\n\n const attachmentContentData = await db.attachment_data.find().exec()\n this.attachment_data = dbToMap(attachmentContentData)\n\n const workDomainsWorkspaceData = await db.work_domain_workspace.find().exec()\n this.work_domain_workspace = dbToMap(workDomainsWorkspaceData)\n\n const commonDb = await getCommonDB()\n\n const workDomainsGlobalData = await commonDb.work_domain_global.find().exec()\n this.work_domain_global = dbToMap(workDomainsGlobalData)\n\n const workspacesData = await commonDb.workspace.find().exec()\n this.workspaces = dbToMap(workspacesData)\n\n const userData = await commonDb.user.find().exec()\n this.user = dbToMap(userData)\n\n const userAvatarData = await commonDb.user_avatar.find().exec()\n this.user_avatar = dbToMap(userAvatarData)\n\n const userRolesData = await commonDb.user_role.find().exec()\n this.user_roles = dbToMap(userRolesData)\n\n await cachePromotedAttribute()\n } catch (error) {\n Log.error({ message: \"Couldn't rebuild caches\", error })\n }\n\n console.timeEnd(timerText)\n },\n },\n})\n\nfunction dbToMap(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n docs: RxDocument[]\n): Map {\n return new Map(docs.map<[string, ReturnType]>((element) => [element.id, element.toMutableJSON()]))\n}\n\ntype AttributeValueFull =\n | AttributeValueCharFull\n | AttributeValueNumericFull\n | AttributeValueSelectFull\n | AttributeValueTemporalFull\n\nfunction dbToMapAttributes(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n docs: RxDocument[]\n): Map {\n return new Map(\n docs.map<[string, ReturnType]>((element) => {\n const id = getAttributeValueIDFromValue(element)\n\n return [id, element.toMutableJSON()]\n })\n )\n}\n\nexport function cacheItemWithIssues(issueList: IssuesOnItem[], map: Map) {\n for (const doc of issueList) {\n const issues = map.get(doc.actionable_item)\n if (issues) {\n // Only if already not present\n if (!issues.some((issue) => issue.id === doc.id)) issues.push(doc)\n } else {\n map.set(doc.actionable_item, [doc])\n }\n }\n}\n\n// TODO: Those ItemWithWorkOrders caching functions are just TRASH. Find a way to improve them if possible.\n\nexport function cacheInsertItemWithWorkOrders(\n workOrderList: Array,\n itemWorkOrderMap: Map\n) {\n for (const workOrder of workOrderList) {\n if (workOrder.items.length === 0) continue\n\n const mutableWorkOrder = isRxDocument(workOrder)\n ? (workOrder as WorkOrderRegularItemDocument).toMutableJSON()\n : workOrder\n\n insertItemWithWorkOrderHelper(mutableWorkOrder.items, mutableWorkOrder, itemWorkOrderMap)\n }\n}\n\nexport function cacheUpdateItemWithWorkOrders(\n workOrderListOld: Array,\n workOrderListNew: Array,\n itemWorkOrderMap: Map\n) {\n if (workOrderListOld.length !== workOrderListNew.length) {\n Log.error({\n message: \"Mismatch between lists when trying to update item work order map\",\n data: {\n workOrderListOld,\n workOrderListNew,\n itemWorkOrderMap,\n },\n })\n return\n }\n\n for (const [i, workOrder] of workOrderListNew.entries()) {\n const oldItems = [...workOrderListOld[i].items].sort()\n const newItems = [...workOrderListNew[i].items].sort()\n\n if (oldItems.toString() === newItems.toString()) {\n // There are no changes in the item lists, so skip this one\n continue\n }\n\n const filteredOldItems = oldItems.filter((i) => !newItems.includes(i))\n const filteredNewItems = newItems.filter((i) => !oldItems.includes(i))\n\n deleteItemWithWorkOrderHelper(filteredOldItems, workOrder, itemWorkOrderMap)\n insertItemWithWorkOrderHelper(filteredNewItems, workOrder, itemWorkOrderMap)\n\n for (const filteredOldItem of filteredOldItems) {\n const cachedItem = itemWorkOrderMap.get(filteredOldItem)\n\n if (!cachedItem) continue\n\n const index = cachedItem.findIndex((wo) => wo.id === workOrder.id)\n if (index >= 0) {\n cachedItem.splice(index, 1)\n }\n }\n }\n}\n\nexport function cacheDeleteItemWithWorkOrders(\n workOrderList: Array,\n itemWorkOrderMap: Map\n) {\n for (const workOrder of workOrderList) {\n deleteItemWithWorkOrderHelper(workOrder.items, workOrder, itemWorkOrderMap)\n }\n}\n\nfunction insertItemWithWorkOrderHelper(\n items: string[],\n workOrder: WorkOrderRegularItem,\n itemWorkOrderMap: Map\n) {\n for (const item of items) {\n const cachedItemWorkOrders = itemWorkOrderMap.get(item)\n if (!cachedItemWorkOrders) {\n itemWorkOrderMap.set(item, [workOrder])\n } else if (!cachedItemWorkOrders.some((wo) => wo.id === workOrder.id)) {\n cachedItemWorkOrders.push(workOrder)\n }\n }\n}\n\nfunction deleteItemWithWorkOrderHelper(\n items: string[],\n workOrder: WorkOrderRegularItem,\n itemWorkOrderMap: Map\n) {\n for (const item of items) {\n const cachedItem = itemWorkOrderMap.get(item)\n\n if (!cachedItem) continue\n\n const index = cachedItem.findIndex((wo) => wo.id === workOrder.id)\n if (index >= 0) {\n cachedItem.splice(index, 1)\n }\n }\n}\n\nexport function getAttributeValueIDFromValue(attributeValue: AttributeValueFull) {\n return (\n attributeValue.attribute +\n (attributeValue.item ||\n attributeValue.item_model ||\n attributeValue.area ||\n attributeValue.location)\n )\n}\n\nexport function getAttributeValueIDFromEntity(entityId: string, attributeId: string) {\n return attributeId + entityId\n}\n\nexport function cacheInsertIssueWithOpenCorrectiveWork(\n correctiveWorkList: CorrectiveWorkOnItem[] | CorrectiveWorkOnItemDocument[],\n map: Map\n) {\n for (const work of correctiveWorkList) {\n if (work.conclusion) {\n // This shouldn't happen since open corrective work and issues should be 1 to 1, but it won't throw an error,\n // and it is better to be safe with caching.\n map.delete(work.issue)\n } else {\n const mutableWork = isRxDocument(work)\n ? (work as CorrectiveWorkOnItemDocument).toMutableJSON()\n : work\n map.set(work.issue, mutableWork)\n }\n }\n}\n\nexport function cacheUpdateIssueWithOpenCorrectiveWork(\n correctiveWorkListOld: CorrectiveWorkOnItem | CorrectiveWorkOnItemDocument,\n correctiveWorkListNew: CorrectiveWorkOnItem | CorrectiveWorkOnItemDocument,\n map: Map\n) {\n // This is the only change we really care about\n if (correctiveWorkListNew.conclusion !== correctiveWorkListOld.conclusion) {\n // We cannot ever set the conclusion back to null/undefined, so we know for certain that the work is concluded\n map.delete(correctiveWorkListNew.issue)\n }\n}\n\nexport function cacheDeleteIssueWithOpenCorrectiveWork(\n correctiveWorkList: CorrectiveWorkOnItem | CorrectiveWorkOnItemDocument,\n map: Map\n) {\n // Since the open corrective to issue ratio is 1 to 1, we need to only check work without a conclusions,\n // since those with conclusion wouldn't even be in the list.\n if (correctiveWorkList.conclusion === null) {\n map.delete(correctiveWorkList.issue)\n }\n}\n\nasync function cachePromotedAttribute() {\n const db = await getDB()\n const itemClassesList = await db.item_class.find().exec()\n\n for (const itemClass of itemClassesList) {\n const attributeChar = await db.attribute_char\n .findOne()\n .where({ id: { $in: itemClass.attributes_char_item } })\n .sort({ order: \"asc\" })\n .exec()\n\n const attributeNumeric = await db.attribute_numeric\n .findOne()\n .where({ id: { $in: itemClass.attributes_numeric_item } })\n .sort({ order: \"asc\" })\n .exec()\n\n const attributeSelect = await db.attribute_select\n .findOne()\n .where({ id: { $in: itemClass.attributes_select_item } })\n .sort({ order: \"asc\" })\n .exec()\n\n const attributeTemporal = await db.attribute_temporal\n .findOne()\n .where({ id: { $in: itemClass.attributes_temporal_item } })\n .sort({ order: \"asc\" })\n .exec()\n\n const data = [\n attributeChar?.toMutableJSON(),\n attributeNumeric?.toMutableJSON(),\n attributeSelect?.toMutableJSON(),\n attributeTemporal?.toMutableJSON(),\n ]\n\n const promotedAttribute = data.reduce((a, b) => reducePromotedAttribute(a, b))\n\n if (promotedAttribute) {\n useCacheStore().itemClassPromotedAttribute.set(\n itemClass.id,\n attributeToPromotedAttribute(promotedAttribute)\n )\n }\n }\n}\n\nfunction reducePromotedAttribute(\n a: AttributeBaseExtensions | undefined,\n b: AttributeBaseExtensions | undefined\n): AttributeBaseExtensions | undefined {\n if (a && b) {\n if (a.order === b.order) {\n return a.name.localeCompare(b.name) ? a : b\n } else {\n return a.order < b.order ? a : b\n }\n } else {\n return a\n }\n}\n\nfunction attributeToPromotedAttribute(\n attribute: AttributeBaseExtensions\n): ItemClassPromotedAttribute {\n let attributeType: AttributeType\n\n if (isAttributeChar(attribute)) {\n attributeType = \"char\"\n } else if (isAttributeNumeric(attribute)) {\n attributeType = \"numeric\"\n } else if (isAttributeSelect(attribute)) {\n attributeType = \"select\"\n } else {\n attributeType = \"temporal\"\n }\n\n return {\n attributeType,\n attributeData: attribute,\n }\n}\n","import { AppInfo, RestoredListenerEvent } from \"@src-capacitor/@capacitor/app\"\nimport { defineStore } from \"pinia\"\n\nexport interface CapacitorAppInfoStoreType {\n isAppActive: boolean\n hasInternet: boolean\n appInfo: AppInfo | null\n restoredEvent: RestoredListenerEvent | null\n}\n\nexport const useCapacitorAppInfoStore = defineStore(\"pinia-capacitorAppInfoStore\", {\n // We don't want to save unnecessary data. This store is only used for platform state detection.\n persist: false,\n\n state: (): CapacitorAppInfoStoreType => ({\n isAppActive: true,\n hasInternet: true,\n appInfo: null,\n restoredEvent: null,\n }),\n\n actions: {\n setAppState(isActive: boolean) {\n this.isAppActive = isActive\n },\n\n setAppInfo(appInfo: AppInfo) {\n this.appInfo = appInfo\n },\n\n setRestoredEvent(event: RestoredListenerEvent) {\n this.restoredEvent = event\n },\n },\n})\n","import {\n BatteryInfo,\n Device,\n DeviceId,\n DeviceInfo,\n GetLanguageCodeResult,\n} from \"@src-capacitor/@capacitor/device\"\nimport { defineStore } from \"pinia\"\n\nexport interface CapacitorDeviceInfoStoreType {\n deviceId: DeviceId | null\n deviceInfo: DeviceInfo | null\n languageCode: GetLanguageCodeResult | null\n}\n\nexport const useCapacitorDeviceInfoStore = defineStore(\"pinia-capacitorDeviceInfoStore\", {\n persist: true,\n\n state: (): CapacitorDeviceInfoStoreType => ({\n deviceId: null,\n deviceInfo: null,\n languageCode: null,\n }),\n\n getters: {\n getBattery: async (): Promise => {\n return await Device.getBatteryInfo()\n },\n },\n\n actions: {\n async setStaticState() {\n this.deviceId = await Device.getId()\n this.languageCode = await Device.getLanguageCode()\n },\n\n async updateDeviceInfo() {\n this.deviceInfo = await Device.getInfo()\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { ENTITY_PAGES } from \"src/util/constants/configurations\"\nimport { DarkModeOption, WorkActionOption } from \"src/util/enums/configuration\"\nimport {\n ConfigSortOrder,\n IssueClickOptions,\n IssueSortBy,\n NotPerformedEntityClickOptions,\n PerformedEntityClickOptions,\n PerformedWorkSortBy,\n WorkOrderClickOptions,\n WorkOrderIssueSortBy,\n WorkOrderItemSortBy,\n WorkOrderSortBy,\n} from \"src/util/enums/entityOverviewConfig\"\nimport { TableBookmarks } from \"src/util/types/components/sfxTable\"\nimport { EntityOverviewConfig } from \"src/util/types/dataModels/entityDefinition\"\n\nexport interface UserSettings {\n // Present on user configuration page\n workOrderDefaultAction: WorkActionOption\n issueDefaultAction: WorkActionOption\n autoCompleteWork: boolean\n skipListWithSingleItem: boolean\n locationSelectItem: boolean\n internetConnectivity: boolean\n prioritizeData: boolean\n animateNotification: boolean\n darkMode: DarkModeOption\n tutorial: boolean\n language: string\n easterEggs: boolean\n displayWorkspaceCards: boolean\n displayLayoutCards: boolean\n tableBookmarks: TableBookmarks\n showLocationSection: Record\n hideUnsubmittedWorkListDialog: Record\n shownStagnantWorkDialogDate?: number\n downloadDataOnStartUp: boolean\n}\n\nexport interface ConfigurationStoreType extends UserSettings {\n tutorialStatus: TutorialStatusType | Record\n easterEggStatus: EasterEggStatusType | Record\n entityOverviewConfig: EntityOverviewConfig\n}\n\n// Added junk typing so that interface is not empty\ninterface TutorialStatusType {\n loginShown: boolean\n}\n\ninterface EasterEggStatusType {\n sheepBurning: boolean\n konamiCodeActive: boolean\n snakeGameScores: Array\n}\n\ntype snakeHighScoreEntry = { player: string; score: number }\n\nexport const useConfigurationStore = defineStore(\"pinia-configurationStore\", {\n persist: true,\n\n state: (): ConfigurationStoreType => ({\n workOrderDefaultAction: WorkActionOption.CHOOSE,\n issueDefaultAction: WorkActionOption.CHOOSE,\n autoCompleteWork: false,\n skipListWithSingleItem: true,\n locationSelectItem: true,\n internetConnectivity: true,\n prioritizeData: true,\n animateNotification: false,\n darkMode: DarkModeOption.OFF,\n tutorial: true,\n language: \"English\",\n easterEggs: false,\n displayWorkspaceCards: true,\n displayLayoutCards: true,\n tableBookmarks: initBookmarks(),\n showLocationSection: {},\n hideUnsubmittedWorkListDialog: {},\n shownStagnantWorkDialogDate: undefined,\n downloadDataOnStartUp: true,\n\n tutorialStatus: {},\n easterEggStatus: {\n sheepBurning: false,\n konamiCodeActive: false,\n snakeGameScores: [],\n },\n entityOverviewConfig: {\n item: {\n issueSortBy: IssueSortBy.PRIORITY,\n issueSortOrder: ConfigSortOrder.DESCENDING,\n issueWhenClicked: IssueClickOptions.OPEN_OVERVIEW,\n workOrderSortBy: WorkOrderSortBy.DEADLINE,\n workOrderSortOrder: ConfigSortOrder.DESCENDING,\n workOrderWhenClicked: WorkOrderClickOptions.OPEN_OVERVIEW,\n },\n correctiveWork: {\n eventSortOrder: ConfigSortOrder.DESCENDING,\n commentSortOrder: ConfigSortOrder.DESCENDING,\n },\n regularWork: {\n issueSortBy: IssueSortBy.PRIORITY,\n issueSortOrder: ConfigSortOrder.DESCENDING,\n issueWhenClicked: IssueClickOptions.OPEN_OVERVIEW,\n eventSortOrder: ConfigSortOrder.DESCENDING,\n commentSortOrder: ConfigSortOrder.DESCENDING,\n },\n workOrderCorrective: {\n issueSortBy: WorkOrderIssueSortBy.DESIGNATION,\n issueSortOrder: ConfigSortOrder.DESCENDING,\n issueNotPerformedClicked: NotPerformedEntityClickOptions.OPEN_ENTITY_OVERVIEW,\n issuePerformedClicked: PerformedEntityClickOptions.OPEN_PERFORMED_WORK,\n issueHidePerformed: false,\n performedWorkSortBy: PerformedWorkSortBy.PERFORMED_DATE_TIME,\n performedWorkSortOrder: ConfigSortOrder.DESCENDING,\n commentSortOrder: ConfigSortOrder.DESCENDING,\n },\n workOrderRegular: {\n itemSortBy: WorkOrderItemSortBy.DESIGNATION,\n itemSortOrder: ConfigSortOrder.DESCENDING,\n itemNotPerformedClicked: NotPerformedEntityClickOptions.OPEN_ENTITY_OVERVIEW,\n itemPerformedClicked: PerformedEntityClickOptions.OPEN_PERFORMED_WORK,\n itemHidePerformed: false,\n performedWorkSortBy: PerformedWorkSortBy.PERFORMED_DATE_TIME,\n performedWorkSortOrder: ConfigSortOrder.DESCENDING,\n commentSortOrder: ConfigSortOrder.DESCENDING,\n },\n },\n }),\n\n getters: {\n // returns data applicable only to the user configuration page\n getCurrentConfiguration(): UserSettings {\n return {\n workOrderDefaultAction: this.workOrderDefaultAction,\n issueDefaultAction: this.issueDefaultAction,\n autoCompleteWork: this.autoCompleteWork,\n skipListWithSingleItem: this.skipListWithSingleItem,\n locationSelectItem: this.locationSelectItem,\n internetConnectivity: this.internetConnectivity,\n prioritizeData: this.prioritizeData,\n animateNotification: this.animateNotification,\n darkMode: this.darkMode,\n tutorial: this.tutorial,\n language: this.language,\n easterEggs: this.easterEggs,\n displayWorkspaceCards: this.displayWorkspaceCards,\n displayLayoutCards: this.displayLayoutCards,\n tableBookmarks: this.tableBookmarks,\n showLocationSection: this.showLocationSection,\n hideUnsubmittedWorkListDialog: this.hideUnsubmittedWorkListDialog,\n shownStagnantWorkDialogDate: this.shownStagnantWorkDialogDate,\n downloadDataOnStartUp: this.downloadDataOnStartUp,\n }\n },\n },\n\n actions: {\n updateConfigurations(configurations: UserSettings) {\n for (const [key, value] of Object.entries(configurations)) {\n ;(this[key as keyof ConfigurationStoreType] as keyof ConfigurationStoreType) = value\n }\n },\n },\n})\n\nfunction initBookmarks(): TableBookmarks {\n return Object.assign({}, ...ENTITY_PAGES.map((entity) => ({ [entity]: [] })))\n}\n","import { defineStore } from \"pinia\"\n\nexport interface LocalUserSettingsStoreType {\n skipConfirmCloseWorkOrder: boolean\n skipConfirmWorkOrderRemoveItem: boolean\n skipConfirmWorkOrderRemoveIssue: boolean\n skipConfirmRemoveItemFromWorkOrder: boolean\n skipConfirmRemoveIssueFromWorkOrder: boolean\n extendedMenuState: {\n openWorkRelated: boolean\n openRegistryEntities: boolean\n openArrangement: boolean\n openAdmin: boolean\n }\n}\n\nexport const useLocalUserSettingsStore = defineStore(\"pinia-localUserSettingsStore\", {\n persist: true,\n\n state: (): LocalUserSettingsStoreType => ({\n skipConfirmCloseWorkOrder: false,\n skipConfirmWorkOrderRemoveItem: false,\n skipConfirmWorkOrderRemoveIssue: false,\n skipConfirmRemoveItemFromWorkOrder: false,\n skipConfirmRemoveIssueFromWorkOrder: false,\n extendedMenuState: {\n openWorkRelated: false,\n openRegistryEntities: false,\n openArrangement: false,\n openAdmin: false,\n },\n }),\n})\n","import { defineStore } from \"pinia\"\nimport { Subject } from \"rxjs\"\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { ContextAction, MainMenuType } from \"src/util/enums/entityType\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { Breadcrumbs } from \"src/util/types/components/sfxBreadcrumb\"\nimport { MenuDataNames } from \"src/util/types/dataModels/entityDefinition\"\n\nexport interface ManagerTopNavigationStore {\n title: string\n titleReference?: string | null\n titleClass?: string\n titleReferenceClass?: string\n mainMenuContent?: MainMenuType[]\n disableMainMenuContent: MainMenuType[]\n hideExtendedMenu: boolean\n disableExtendedMenu: boolean\n quickActions?: ContextAction[]\n disableQuickActions?: ContextAction[]\n contextMenuContent: ContextAction[]\n disableContextMenuContent: ContextAction[]\n disableContextMenu: boolean\n hideContextMenu: boolean\n hideContextBar: boolean\n disableNotifications: boolean\n hideTodoIcon: boolean\n disableTodoIcon: boolean\n contextActionClicked: Subject\n breadcrumbs?: Breadcrumbs\n breadcrumbsContext?: string\n breadcrumbsNavigationAction?: NavigationAction\n activeTab?: MenuDataNames\n activeExtendedTab?: MenuDataNames\n}\n\nexport const useManagerTopNavigationStore = defineStore(\"pinia-managerTopNavigationStore\", {\n persist: false,\n\n state: (): ManagerTopNavigationStore => ({\n title: \"\",\n titleReference: undefined,\n titleClass: undefined,\n titleReferenceClass: undefined,\n mainMenuContent: undefined,\n disableMainMenuContent: [],\n hideExtendedMenu: false,\n disableExtendedMenu: false,\n quickActions: [],\n disableQuickActions: [],\n contextMenuContent: [],\n disableContextMenuContent: [],\n disableContextMenu: false,\n hideContextMenu: false,\n hideContextBar: false,\n disableNotifications: false,\n hideTodoIcon: false,\n disableTodoIcon: false,\n contextActionClicked: new Subject(),\n breadcrumbs: [],\n breadcrumbsContext: undefined,\n breadcrumbsNavigationAction: undefined,\n activeTab: undefined,\n activeExtendedTab: undefined,\n }),\n\n actions: {\n setContextAction(item: ContextMenuItem) {\n this.contextActionClicked.next(item)\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { SystemNotificationCardData } from \"src/util/types/notifications\"\n\nexport interface NotificationsStoreType {\n count: number // Number of total unread notifications\n sysNotifications: SystemNotificationCardData[] // List of system notifications\n}\n\nexport const useNotificationsStore = defineStore(\"pinia-notificationsStore\", {\n persist: true,\n\n state: (): NotificationsStoreType => {\n return {\n count: 0,\n sysNotifications: [],\n }\n },\n})\n","/**\n * Adds an item to a priority array.\n *\n * If the item is faulty, returns the list unchanged.\n * If the item is already in the list, then move its first occurrence to the front.\n * Otherwise, remove items from the front until the list is of maximum specified size - 1 and add the item to the front.\n *\n * @param item - Generic item that we want to insert in a list.\n * @param priorityList - List in which to insert the item.\n * @param [maxItemsInList = 5] - Maximum number of items allowed in the list.\n */\nexport function updatePriorityList(item: string, priorityList: Array, maxItemsInList = 5) {\n // Make a deep copy so that we don't affect the original array.\n let result = [...priorityList]\n\n // Faulty item. We just return the list without doing any changes.\n if (item === null || item === undefined) {\n return result\n }\n\n // Trim the item, so that there is no whitespace.\n item = item.trim()\n\n // Empty string. We just return the list without doing any changes.\n if (!item) {\n return result\n }\n\n // Check if the item was already searched.\n const searchItemIndex = result.findIndex((itemInList) => itemInList.trim() === item)\n\n // Item has been found.\n if (searchItemIndex >= 0) {\n // Item is in the list but not in the front, so we make it be in front.\n // If item is already in front we don't change the list.\n if (searchItemIndex !== result.length - 1) {\n const extractedItem = result.splice(searchItemIndex, 1)[0]\n result.push(extractedItem)\n }\n } else {\n // Remove items in the front until array is of max size - 1. Then add the search item to the front.\n // Values are negative so that it will do the slicing backwards - back to front.\n result = [...result.slice(-maxItemsInList + 1, priorityList.length), item]\n }\n\n return result\n}\n","import { defineStore } from \"pinia\"\nimport { i18n } from \"src/boot/i18n\"\nimport { updatePriorityList } from \"src/util/functions/lists\"\nimport { SearchDomainType } from \"src/util/types/dataModels/search\"\n\nexport interface SearchStoreType {\n term: string | null | undefined\n domain: SearchDomainType | undefined\n enabled: boolean\n recentSearches: Record> | Record\n}\n\nexport const useSearchStore = defineStore(\"pinia-searchStore\", {\n persist: true,\n\n state: (): SearchStoreType => ({\n term: null,\n domain: undefined,\n enabled: false,\n recentSearches: {},\n }),\n\n actions: {\n /**\n * Sets everything but the recentSearches data back to default values.\n */\n resetIntermediateData() {\n this.term = null\n this.domain = undefined\n this.enabled = false\n },\n\n resetAllRecentSearches() {\n this.recentSearches = {}\n },\n\n /**\n * Recent a specific recent store based on domain provided.\n * If no domain is given, it will reset the current one.\n *\n * @param searchDomain\n */\n resetSpecificRecentSearch(searchDomain?: SearchDomainType) {\n this.getRecentSearch(searchDomain).length = 0\n },\n\n /**\n * Returns the appropriate recent search list based on provided or currently selected search store domain.\n * Initialises the list if it is not.\n * If there is no valid domain, then returns an empty array.\n *\n * @param searchDomain\n */\n getRecentSearch(searchDomain?: SearchDomainType) {\n let result: string[]\n\n if (searchDomain) {\n result = this.recentSearches[searchDomain]\n } else if (this.domain) {\n result = this.recentSearches[this.domain]\n } else {\n result = []\n }\n\n // If the list is not initialised, then initialise it\n if (!result) {\n result = []\n }\n return result\n },\n\n /**\n * Adds an item to a recent searches list based on provided or currently active search domain.\n *\n * @param item\n * @param searchDomain\n * @param maxItemsInList\n * @throws {Error} - Unable to determine active domain\n */\n addItemToRecentSearches(item: string, searchDomain?: SearchDomainType, maxItemsInList = 5) {\n if (!searchDomain) {\n if (!this.domain) throw new Error(\"Unable to determine active domain\")\n\n searchDomain = this.domain\n }\n\n const listToUpdate = this.getRecentSearch(searchDomain)\n this.recentSearches[searchDomain] = updatePriorityList(item, listToUpdate, maxItemsInList)\n },\n\n /**\n * Removes an item from a recent searches list based on specified or currently active search domain.\n *\n * @param itemIndex\n * @param searchDomain\n * @throws {Error} Bad index.\n */\n removeItemFromRecentSearches(itemIndex: number, searchDomain?: SearchDomainType) {\n if (itemIndex < 0) {\n throw new Error(\"Bad index provided\")\n }\n\n this.getRecentSearch(searchDomain).splice(itemIndex, 1)\n },\n\n getPlaceholderEntity() {\n const { t } = i18n.global\n\n switch (this.domain) {\n case \"items\": {\n return t(\"item.title\")\n }\n case \"issues\": {\n return t(\"issue.title\")\n }\n case \"models\": {\n return t(\"model.title\")\n }\n case \"performedWork\": {\n return t(\"performedWork.title_performed_work\")\n }\n case \"areas\": {\n return t(\"area.title\")\n }\n case \"layouts\": {\n return t(\"layout.title\")\n }\n case \"workspaces\": {\n return t(\"workspace.title\")\n }\n case \"zones\": {\n return t(\"zone.title\")\n }\n case \"workOrders\": {\n return t(\"workOrder.title\")\n }\n case \"unsubmittedWork\": {\n return t(\"toDo.unsubmitted_work\")\n }\n }\n },\n\n getManagerPlaceholderEntity() {\n const { t } = i18n.global\n\n switch (this.domain) {\n case \"items\": {\n return t(\"items.title\")\n }\n case \"issues\": {\n return t(\"issues.title\")\n }\n case \"models\": {\n return t(\"models.title\")\n }\n case \"performedWork\": {\n return t(\"performedWork.title\")\n }\n case \"areas\": {\n return t(\"areas.title\")\n }\n case \"layouts\": {\n return t(\"layouts.title\")\n }\n case \"workspaces\": {\n return t(\"workspaces.title\")\n }\n case \"zones\": {\n return t(\"zones.title\")\n }\n case \"workOrders\": {\n return t(\"workOrder.title\")\n }\n case \"unsubmittedWork\": {\n return t(\"toDos.unsubmitted_work\")\n }\n }\n },\n },\n})\n","import { defineStore } from \"pinia\"\n\nexport interface SupportStoreType {\n feedback: FeedbackType\n}\n\nexport interface FeedbackType {\n context?: string\n designation?: string\n}\n\nexport const useSupportStore = defineStore(\"pinia-supportStore\", {\n persist: false,\n\n state: (): SupportStoreType => ({\n feedback: {},\n }),\n\n actions: {\n setFeedbackData(context?: string, designation?: string) {\n this.feedback = {}\n this.feedback.context = context\n this.feedback.designation = designation\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { ToDoItem } from \"src/util/types/components/sfxToDoItem\"\n\nexport interface ToDoItemsStoreType {\n toDoItems: ToDoItem[]\n}\n\nexport const useToDoItemsStore = defineStore(\"pinia-todoItemsStore\", {\n persist: true,\n\n state: (): ToDoItemsStoreType => {\n return {\n toDoItems: [],\n }\n },\n\n actions: {\n deleteDone() {\n this.toDoItems = this.toDoItems.filter((toDoItem: ToDoItem) => !toDoItem.isDone)\n },\n\n deleteAll() {\n this.$reset()\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { Subject } from \"rxjs\"\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { Counts } from \"src/util/types/misc\"\n\nexport interface TopNavigationStoreType {\n title: string\n titleReference?: string | null\n titleClass?: string\n subtitle?: string\n quickAction?: ContextAction\n disableQuickAction?: boolean\n menuContent: ContextAction[]\n disableMenuContent: ContextAction[]\n counts: Counts | Record\n contextActionClicked: Subject\n overlayContextActionClicked: Subject\n htmlAllowed?: boolean\n}\n\ninterface ContextItemSubscription {\n item: ContextMenuItem\n source: ContextSource | string\n}\n\nexport const useTopNavigationStore = defineStore(\"pinia-topNavigationStore\", {\n persist: false,\n\n state: (): TopNavigationStoreType => ({\n title: \"\",\n titleReference: undefined,\n titleClass: undefined,\n subtitle: undefined,\n quickAction: undefined,\n disableQuickAction: false,\n menuContent: [],\n disableMenuContent: [],\n counts: {},\n contextActionClicked: new Subject(),\n overlayContextActionClicked: new Subject(),\n htmlAllowed: false,\n }),\n\n actions: {\n setContextAction(item: ContextMenuItem) {\n this.contextActionClicked.next(item)\n },\n\n setOverlayContextAction(\n item: ContextMenuItem,\n source: ContextSource | string = ContextSource.GENERIC_OVERLAY\n ) {\n this.overlayContextActionClicked.next({ item, source })\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { getChangesDB } from \"src/db/databases\"\nimport { STAGNANT_WORK_DAYS } from \"src/util/constants/configurations\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { UnsubmittedWork } from \"src/util/types/dataModels/unsubmittedWork\"\n\nexport interface UnsubmittedWorkType {\n unsubmittedWork: UnsubmittedWork\n unsubmittedImages: AttachmentUpload[]\n oldestWorkInDays: number\n hasUnsubmittedWork: boolean\n}\n\nexport const useUnsubmittedWorkStore = defineStore(\"pinia-unsubmittedWorkStore\", {\n state: (): UnsubmittedWorkType => {\n return {\n unsubmittedWork: {},\n unsubmittedImages: [],\n oldestWorkInDays: 0,\n hasUnsubmittedWork: false,\n }\n },\n\n getters: {\n isWorkStagnant(state: UnsubmittedWorkType): boolean {\n return state.oldestWorkInDays >= STAGNANT_WORK_DAYS\n },\n },\n\n actions: {\n async updateStagnantWork() {\n const cdb = await getChangesDB()\n this.oldestWorkInDays = await cdb.unsubmitted_work.getOldestWorkDays()\n },\n\n async updateHasUnsubmittedWork() {\n const cdb = await getChangesDB()\n this.hasUnsubmittedWork = await cdb.unsubmitted_work.hasUnsubmittedWork()\n },\n },\n})\n","import { defineStore } from \"pinia\"\nimport { date } from \"quasar\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { getCurrentUser, patchCurrentUser } from \"src/util/http/springboard/user\"\nimport {\n UserCurrent,\n UserPermissionAccess,\n UserPermissionType,\n} from \"src/util/types/dataModels/user\"\n\nexport interface UserStoreType extends UserCurrent {\n profilePicture?: string\n helpDialogShown: boolean\n // Dedicated variable so that we can persist it, since apiCallStore is not persistent\n latestAPICall?: number\n}\n\nexport const useUserStore = defineStore(\"pinia-userStore\", {\n persist: true,\n\n state: (): UserStoreType => ({\n id: \"\",\n email: \"\",\n first_name: \"\",\n last_name: \"\",\n is_active: false,\n is_superuser: false,\n roles: [],\n settings: null,\n profilePicture: \"\",\n helpDialogShown: false,\n latestAPICall: undefined,\n permissions: {},\n }),\n\n getters: {\n getFullName(state: UserStoreType): string {\n return (state.first_name + \" \" + state.last_name).trim()\n },\n\n getLatestCallTime(state: UserStoreType): string {\n return date.formatDate(state.latestAPICall, DATE_TIME_FULL_MASK)\n },\n\n getUserData(state: UserStoreType): Omit {\n return {\n id: state.id,\n email: state.email,\n first_name: state.first_name,\n last_name: state.last_name,\n is_active: state.is_active,\n is_superuser: state.is_superuser,\n roles: state.roles,\n permissions: state.permissions,\n }\n },\n },\n\n actions: {\n updateUserData(user: UserCurrent) {\n this.id = user.id\n this.email = user.email\n this.first_name = user.first_name\n this.last_name = user.last_name\n this.is_active = user.is_active\n this.is_superuser = user.is_superuser\n this.roles = user.roles\n this.permissions = user.permissions\n\n const configurationStore = useConfigurationStore()\n\n user.settings\n ? configurationStore.updateConfigurations(user.settings.data)\n : configurationStore.$reset()\n },\n\n async fetchUserData() {\n try {\n // fetching user details from the server\n const user = await getCurrentUser()\n this.updateUserData(user)\n } catch (error) {\n Log.error({\n message: \"An error occurred while trying to get the user details\",\n error,\n })\n }\n },\n\n async uploadUserData(userData: Partial) {\n try {\n const updatedUser = await patchCurrentUser({}, userData)\n this.updateUserData(updatedUser)\n } catch (error) {\n Log.error({\n message: \"An error occurred while trying to upload the user details\",\n error,\n })\n }\n },\n\n checkUserPermission(\n permissionType: UserPermissionType,\n permissionAccess: UserPermissionAccess | UserPermissionAccess[],\n permissionSpecifics?: { workspaceUUID?: string; workDomainUUID?: string }\n ) {\n const workDomainKey = permissionSpecifics?.workDomainUUID\n let workspaceKey = permissionSpecifics?.workspaceUUID\n\n if (workspaceKey === undefined) {\n const authStore = useAuthStore()\n workspaceKey = authStore.selectedWorkspace?.id\n }\n\n let hasAccess = true\n\n for (const accessLevel of permissionAccess) {\n // Check to see if the permission access is available in the global permissions\n // If it is, no need to check further as that supersedes any workspace and work domain permissions\n if (\n this.permissions.global &&\n this.permissions.global[permissionType]?.includes(accessLevel)\n ) {\n continue\n }\n\n // Not possible to get permissions for a workspace without a valid workspace UUID, ergo, you don't have access\n if (workspaceKey === undefined || this.permissions[workspaceKey] === undefined) return false\n\n const workspaceData = this.permissions[workspaceKey]\n\n // Check to see if the permission access is available in the workspace permissions\n // If it is, no need to check further as that supersedes any work domain permissions\n if (workspaceData.workspace_permissions[permissionType]?.includes(accessLevel)) {\n continue\n }\n\n if (workDomainKey) {\n const workDomainPermissions = workspaceData.work_domain_permissions[workDomainKey]\n\n // Check if the work domain we specified has the appropriate permission access\n if (workDomainPermissions[permissionType]?.includes(accessLevel)) {\n continue\n }\n }\n\n // User doesn't have global, workspace or work domain specific permission\n hasAccess = false\n break\n }\n\n return hasAccess\n },\n /**\n * Returns \"allWorkspacePermissions\" if the user has global permissions\n * else\n * returns the list of work domains which the user have permissions\n *\n * @param permissionType\n * @param permissionAccess\n */\n getWorkDomainsWithPermission(\n permissionType: UserPermissionType,\n permissionAccess: UserPermissionAccess | UserPermissionAccess[]\n ): \"allWorkspacePermissions\" | string[] {\n const authStore = useAuthStore()\n const workspaceKey = authStore.selectedWorkspace?.id\n\n // Not possible to get permissions for a workspace without a valid workspace UUID, ergo, you don't have access\n if (workspaceKey === undefined || this.permissions[workspaceKey] === undefined) return []\n\n const workspaceData = this.permissions[workspaceKey]\n const workDomainsWithPermissions = []\n\n for (const accessLevel of permissionAccess) {\n // Check to see if the permission access is available in the global workspace permissions\n // If it is, no need to check further as that supersedes any work domain permissions\n if (workspaceData.workspace_permissions[permissionType]?.includes(accessLevel)) {\n return \"allWorkspacePermissions\"\n } else {\n const workDomainsInWorkSpace = Object.keys(workspaceData.work_domain_permissions)\n\n for (const workDomain of workDomainsInWorkSpace) {\n const workDomainPermissions = workspaceData.work_domain_permissions[workDomain]\n\n // Check if the work domain has the appropriate permission access\n if (workDomainPermissions[permissionType]?.includes(accessLevel)) {\n workDomainsWithPermissions.push(workDomain)\n }\n }\n }\n }\n return workDomainsWithPermissions\n },\n },\n})\n","import { i18n } from \"src/boot/i18n\"\nimport { DEFAULT_CONTEXT_ACTIONS } from \"src/util/constants/navigation\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\n\nexport class ContextMenuItem {\n private _icon = \"\"\n private _content = \"\"\n private _action = ContextAction.HELP\n private _disable = false\n\n private constructor(item: ContextAction) {\n const itemData = ContextMenuItem.getEnumData(item)\n this._action = item\n this._content = itemData.content\n this._icon = itemData.icon\n this._disable = itemData.disable\n }\n\n public get icon() {\n return this._icon\n }\n\n private set icon(icon: string) {\n this._icon = icon\n }\n\n public get content() {\n return this._content\n }\n\n private set content(content) {\n this._content = content\n }\n\n public get action() {\n return this._action\n }\n\n private set action(contextAction) {\n this._action = contextAction\n }\n\n public get disable() {\n return this._disable\n }\n\n public set disable(disabledStatus) {\n this._disable = disabledStatus\n }\n\n private static getEnumData(item: ContextAction): {\n icon: string\n content: string\n disable: boolean\n } {\n const { t } = i18n.global\n\n switch (item) {\n case ContextAction.ADD_ATTACHMENT:\n return {\n icon: Icons.ATTACHMENT_ADD,\n content: t(\"sfxContextMenu.add_attachment\"),\n disable: false,\n }\n\n case ContextAction.ADD_TO_WORKORDER:\n return {\n icon: Icons.WORKORDER_ADD_TO,\n content: t(\"sfxContextMenu.add_to_work_order\"),\n disable: false,\n }\n\n case ContextAction.ASSOCIATE_IDENTIFIER:\n return {\n icon: Icons.IDENTIFY,\n content: t(\"sfxContextMenu.associate_identifier\"),\n disable: false,\n }\n\n case ContextAction.CHANGE_REQUEST:\n return {\n icon: Icons.CHANGE_REQUEST,\n content: t(\"sfxContextMenu.change_requests\"),\n disable: false,\n }\n\n case ContextAction.CLONE_ITEM:\n return {\n icon: Icons.ITEM_CLONE,\n content: t(\"sfxContextMenu.clone_item\"),\n disable: false,\n }\n\n case ContextAction.CLOSE_ISSUE:\n return {\n icon: Icons.RETIRE,\n content: t(\"sfxContextMenu.close_issue\"),\n disable: false,\n }\n\n case ContextAction.CREATE_ITEM:\n return {\n icon: Icons.ITEM_CREATE,\n content: t(\"sfxContextMenu.create_item\"),\n disable: false,\n }\n\n case ContextAction.CREATE_LOCATION:\n return {\n icon: Icons.LOCATION_CREATE,\n content: t(\"sfxContextMenu.create_location\"),\n disable: false,\n }\n\n case ContextAction.CREATE_MODEL:\n return {\n icon: Icons.MODEL_CREATE,\n content: t(\"sfxContextMenu.create_model\"),\n disable: false,\n }\n\n case ContextAction.CREATE_WORK_ORDER:\n return {\n icon: Icons.WORKORDER_CREATE,\n content: t(\"sfxContextMenu.create_work_order\"),\n disable: false,\n }\n\n case ContextAction.CLOSE_WORK_ORDER:\n return {\n icon: Icons.RETIRE,\n content: t(\"sfxContextMenu.close_work_order\"),\n disable: false,\n }\n\n case ContextAction.DELETE:\n return {\n icon: Icons.DELETE,\n content: t(\"sfxContextMenu.delete\"),\n disable: false,\n }\n\n case ContextAction.DISCARD:\n return {\n icon: Icons.DELETE,\n content: t(\"sfxContextMenu.discard\"),\n disable: false,\n }\n\n case ContextAction.DISCARD_WORK:\n return {\n icon: Icons.DELETE,\n content: t(\"sfxContextMenu.discard_work\"),\n disable: false,\n }\n\n case ContextAction.EXPORT_RESULTS:\n return {\n icon: Icons.S_FILE_EXPORT,\n content: t(\"sfxContextMenu.export_results\"),\n disable: false,\n }\n\n case ContextAction.FEEDBACK:\n return {\n icon: Icons.FEEDBACK,\n content: t(\"sfxContextMenu.feedback\"),\n disable: false,\n }\n\n case ContextAction.HANDLE_IDENTIFIERS:\n return {\n icon: Icons.IDENTIFY,\n content: t(\"sfxContextMenu.handle_identifiers\"),\n disable: false,\n }\n\n case ContextAction.HISTORY:\n return {\n icon: Icons.HISTORY,\n content: t(\"sfxContextMenu.history\"),\n disable: true,\n }\n\n case ContextAction.ISSUES:\n return {\n icon: Icons.ISSUES,\n content: t(\"sfxContextMenu.issues\"),\n disable: false,\n }\n\n case ContextAction.MARK_ALL_READ:\n return {\n icon: Icons.MARK_AS_READ,\n content: t(\"sfxContextMenu.mark_all_read\"),\n disable: false,\n }\n\n case ContextAction.MARK_ALL_UNREAD:\n return {\n icon: Icons.MARK_AS_UNREAD,\n content: t(\"sfxContextMenu.mark_all_unread\"),\n disable: false,\n }\n\n case ContextAction.PERFORM_ADHOC_WORK:\n return {\n icon: Icons.WORK_REGULAR,\n content: t(\"sfxContextMenu.perform_adhoc_work\"),\n disable: false,\n }\n\n case ContextAction.PERFORM_CORRECTIVE_WORK:\n return {\n icon: Icons.WORK_CORRECTIVE,\n content: t(\"sfxContextMenu.perform_corrective_work\"),\n disable: false,\n }\n\n case ContextAction.RAISE_ISSUE:\n return {\n icon: Icons.ISSUE_CREATE,\n content: t(\"sfxContextMenu.raise_issue\"),\n disable: false,\n }\n\n case ContextAction.DELETE_ISSUE:\n return {\n icon: Icons.DELETE,\n content: t(\"sfxContextMenu.delete_issue\"),\n disable: false,\n }\n\n case ContextAction.REJECT_ISSUE:\n return {\n icon: Icons.WORK_REJECT,\n content: t(\"sfxContextMenu.reject_issue\"),\n disable: false,\n }\n\n case ContextAction.REMOVE_FROM_WORKORDER:\n return {\n icon: Icons.WORKORDER_REMOVE_FROM,\n content: t(\"sfxContextMenu.remove_from_work_order\"),\n disable: false,\n }\n\n case ContextAction.REMOVE_LOCATION:\n return {\n icon: Icons.NO_LOCATIONS,\n content: t(\"sfxContextMenu.remove_location\"),\n disable: false,\n }\n\n case ContextAction.REPLACE_ITEM:\n return {\n // TODO: Icon missing \"replace-item\"\n icon: \"replace-item\",\n content: t(\"sfxContextMenu.replace_item\"),\n disable: false,\n }\n\n case ContextAction.SUPERSEDE_ISSUE:\n return {\n icon: Icons.ISSUE_SUPERSEDE,\n content: t(\"sfxContextMenu.supersede_issue\"),\n disable: false,\n }\n\n case ContextAction.SUPPORT:\n return {\n icon: Icons.LOGIN_HELP,\n content: t(\"sfxContextMenu.support\"),\n disable: false,\n }\n\n case ContextAction.TAKE_PHOTO:\n return {\n icon: Icons.ADD_PHOTO,\n content: t(\"sfxContextMenu.take_photo\"),\n disable: false,\n }\n\n case ContextAction.TOGGLE_DISPLAY_PERFORMED_ON:\n return {\n icon: Icons.SHOW,\n content: t(\"sfxContextMenu.toggle_display_performed\"),\n disable: false,\n }\n\n case ContextAction.TOGGLE_DISPLAY_PERFORMED_OFF:\n return {\n icon: Icons.HIDE,\n content: t(\"sfxContextMenu.toggle_display_performed\"),\n disable: false,\n }\n\n case ContextAction.USER_SETTINGS:\n return {\n icon: Icons.SETTINGS,\n content: t(\"sfxContextMenu.user_settings\"),\n disable: false,\n }\n\n case ContextAction.IMAGE_ZOOM_OUT:\n return {\n icon: Icons.COMPRESS_GALLERY_IMAGE,\n content: t(\"sfxContextMenu.image_zoom_out\"),\n disable: false,\n }\n\n case ContextAction.IMAGE_ZOOM_IN:\n return {\n icon: Icons.EXPAND_GALLERY_IMAGE,\n content: t(\"sfxContextMenu.image_zoom_in\"),\n disable: false,\n }\n\n default:\n return {\n icon: Icons.HELP,\n content: t(\"sfxContextMenu.help\"),\n disable: false,\n }\n }\n }\n\n /**\n * Returns list of context menu items that correspond the items we have selected to show.\n * If no items are selected, it shows only the default items.\n * Items for disabling that do not have corresponding item to show are ignored.\n *\n * @param itemsToShow List of context menu items we want to get.\n * @param itemsToDisable List of context menu items we want to disable.\n * @param ignoreQuickActionDefault\n */\n public static getContextMenuItems(\n itemsToShow?: ContextAction[],\n itemsToDisable: ContextAction[] = [],\n ignoreQuickActionDefault = false\n ) {\n // If no data is added, add all defaults or empty\n if (!itemsToShow) {\n // Default\n itemsToShow = ignoreQuickActionDefault ? [] : DEFAULT_CONTEXT_ACTIONS\n } else if (!ignoreQuickActionDefault) {\n // Concat the default actions\n for (const defaultAction of DEFAULT_CONTEXT_ACTIONS) {\n if (!itemsToShow.includes(defaultAction)) {\n itemsToShow.push(defaultAction)\n }\n }\n }\n\n const menuItems: ContextMenuItem[] = []\n\n for (const item of itemsToShow) {\n const menuItem = new ContextMenuItem(Number(item))\n\n if (itemsToDisable && itemsToDisable.includes(Number(item))) {\n menuItem.disable = true\n }\n\n menuItems.push(menuItem)\n }\n\n return menuItems\n }\n}\n","import * as Sentry from \"@sentry/browser\"\nimport { Breadcrumb, SeverityLevel } from \"@sentry/vue\"\n\nexport type GenericLogObject = {\n message: string\n // Error Object\n error?: unknown\n // Extra Data\n data?: Record\n}\n\nclass Logger {\n private readonly _isProduction: boolean\n\n constructor() {\n this._isProduction = Boolean(process.env.PROD)\n }\n\n public info(message: string) {\n this._isProduction ? Sentry.captureMessage(message) : console.info(message)\n }\n\n public debug(breadcrumb: Breadcrumb | string) {\n const breadcrumbData = (\n typeof breadcrumb === \"string\" ? { data: breadcrumb } : breadcrumb\n ) as Breadcrumb\n\n if (this._isProduction) {\n Sentry.addBreadcrumb(breadcrumbData)\n } else {\n if (typeof breadcrumb === \"string\") {\n console.debug(breadcrumb)\n } else {\n console.debug(breadcrumb.message ?? \"DEBUG\", breadcrumb)\n }\n }\n }\n\n public warning(data: GenericLogObject) {\n this._isProduction ? this.genericSentryCapture(\"warning\", data) : console.warn(data)\n }\n\n public error(data: GenericLogObject) {\n this._isProduction ? this.genericSentryCapture(\"error\", data) : console.error(data)\n }\n\n private async genericSentryCapture(level: SeverityLevel, exception: GenericLogObject) {\n const { useConfigurationStore } = await import(\"src/stores/configurationStore\")\n const { useUserStore } = await import(\"src/stores/userStore\")\n const { useAuthStore } = await import(\"src/stores/authStore\")\n\n const userStore = useUserStore()\n const configStore = useConfigurationStore()\n const authStore = useAuthStore()\n\n const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)\n const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n const viewSize = { vw, vh }\n\n Sentry.withScope((scope) => {\n scope.setLevel(level)\n scope.setTransactionName(exception.message)\n\n const userObject = {\n ...userStore.getUserData,\n token: authStore.authenticationToken?.access_token.slice(0, 3),\n }\n\n scope.setUser(userObject)\n\n scope.setExtra(\"Screen Size\", viewSize)\n scope.setExtra(\"User Configurations\", configStore.getCurrentConfiguration)\n\n // Add extra data\n if (exception.data) {\n scope.setExtra(\"extraData\", exception.data)\n }\n\n if (exception.error && exception.error instanceof Error) {\n Sentry.captureException(exception.error)\n } else {\n if (exception.error) scope.setExtra(\"errorObject\", exception.error)\n Sentry.captureException(new Error(exception.message))\n }\n })\n }\n}\n\nexport const Log = new Logger()\n","export const COMMON_MESSAGES = {\n SUPPORT_LINK: \"https://hub.safeex.com/support/home\",\n STATUS_LINK: \"https://status.safeex.com/\",\n}\n","import { MainMenuType } from \"src/util/enums/entityType\"\n\nexport const GET_LOCATION_TIMEOUT = 1000 // 1 second\n\nexport const LANGUAGE_LIST = [\"English\", \"Danish\", \"Bulgarian\", \"Russian\", \"Spanish\"]\n\nexport const HEALTH_INDICATOR_COLORS = [\"#D21F34\", \"#F08227\", \"#00943B\"]\n\nexport const SMALL_SCREEN_WIDTH = 375\n\nexport const SFX_CARD_HEIGHT = 144\nexport const SFX_CARD_CONDENSED_HEIGHT = 104\nexport const SFX_CARD_ATTACHMENT_HEIGHT = 100\n\nexport const SFX_CARD_IMG_WIDTH = \"112px\"\n\nexport const SKELETON_ANIMATION = \"fade\"\n\nexport const DEBOUNCE_TIME_API_CALL = 300000\n\n// NOTE: Maybe not the best approach to use regex. Might be better to just let the user get \"entity not found\" page\n// UUIDs are exactly 36 characters long.\nexport const UUID_REGEX = \"([\\\\w|-]{36})\"\n\nexport const DATE_TIME_FULL_MASK = \"YYYY-MM-DD HH:mm\"\nexport const DATE_MASK = \"YYYY-MM-DD\"\n// The default date format the QDate accepts\nexport const DATE_MASK_FORWARD_SLASH_SEPARATOR = \"YYYY/MM/DD\"\nexport const TIME_MASK = \"HH:mm\"\n\nexport const STAGNANT_WORK_DAYS = 7\nexport const STAGNANT_WORK_INTERVAL = 3600000 // 1 hour in ms\n\nexport const CACHE_IMAGES = \"images\"\nexport const CACHE_AVATARS = \"avatars\"\n\nexport const MANAGER_MAIN_MENU =\n // NB! List order is important as this is how they are going to be shown\n [MainMenuType.WORK_ORDERS, MainMenuType.ITEMS, MainMenuType.ISSUES, MainMenuType.PERFORMED_WORK]\n\n// NB! List order is important as this is how they are going to be shown\n\nexport const ENTITY_PAGES = [\n \"area\",\n \"attachment\",\n \"workspace\",\n \"layout\",\n \"work_order\",\n \"zone\",\n \"item\",\n \"model\",\n \"location\",\n \"issue\",\n \"performed_work\",\n] as const\n","import { i18n } from \"src/boot/i18n\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { MissingEntityDefinition } from \"src/util/types/dataModels/entityDefinition\"\n\nexport const EmptyStates = new Map()\n\nconst { t } = i18n.global\n\nEmptyStates.set(MissingEntityType.AREA_NOT_FOUND, {\n entityName: t(\"entity.area\"),\n icon: Icons.AREA_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.area\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.area\") }),\n quote: t(\"sfxEmpty.quote_area_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.AREA_NO_MATCHES, {\n entityName: t(\"entity.area\"),\n icon: Icons.AREA_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.area\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_area_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.ATTACHMENT_DRAG_AND_DROP_ITEM, {\n entityName: t(\"entity.item\"),\n icon: Icons.ATTACHMENTS,\n title: t(\"sfxEmpty.title_attachment_drag_and_drop\", { entity: t(\"entity.item\") }),\n subtitle: t(\"sfxEmpty.subtitle_attachment_drag_and_drop\"),\n quote: t(\"sfxEmpty.quote_attachment_drag_and_drop\"),\n})\n\nEmptyStates.set(MissingEntityType.ATTACHMENT_DRAG_AND_DROP_WORK_ORDER, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.ATTACHMENTS,\n title: t(\"sfxEmpty.title_attachment_drag_and_drop\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_attachment_drag_and_drop\"),\n quote: t(\"sfxEmpty.quote_attachment_drag_and_drop\"),\n})\n\nEmptyStates.set(MissingEntityType.ATTACHMENT_NOT_FOUND, {\n entityName: t(\"entity.attachment\"),\n icon: Icons.ATTACHMENT_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.attachment\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.attachment\") }),\n quote: t(\"sfxEmpty.quote_attachment_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.ATTACHMENT_NO_MATCHES, {\n entityName: t(\"entity.attachment\"),\n icon: Icons.ATTACHMENT_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.attachment\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_attachment_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.ATTACHMENT_NOT_ADDED, {\n entityName: t(\"entity.attachment\"),\n icon: Icons.ATTACHMENT_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.attachment\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_added\", { entity: t(\"entity.attachment\") }),\n quote: t(\"sfxEmpty.quote_attachment_not_added\"),\n})\n\nEmptyStates.set(MissingEntityType.ITEM_NOT_FOUND, {\n entityName: t(\"entity.item\"),\n icon: Icons.ITEM_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.item\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.item\") }),\n quote: t(\"sfxEmpty.quote_item_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.ITEM_NO_MATCHES, {\n entityName: t(\"entity.item\"),\n icon: Icons.ITEM_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.item\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_item_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.ITEM_NO_RELATED_ACTIONS, {\n entityName: t(\"entity.item\"),\n title: t(\"sfxEmpty.title_no_related_actions\"),\n subtitle: t(\"sfxEmpty.subtitle_no_related_actions\"),\n quote: t(\"sfxEmpty.quote_no_related_actions\"),\n})\n\nEmptyStates.set(MissingEntityType.ISSUE_NOT_FOUND, {\n entityName: t(\"entity.issue\"),\n icon: Icons.ISSUE_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.issue\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found_exclamation\", { entity: t(\"entity.issue\") }),\n quote: t(\"sfxEmpty.quote_issue_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.ISSUE_NO_MATCHES, {\n entityName: t(\"entity.issue\"),\n icon: Icons.ISSUE_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.issue\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_issue_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.LAYOUT_NOT_FOUND, {\n entityName: t(\"entity.layout\"),\n icon: Icons.LAYOUT_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.layout\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.layout\") }),\n quote: t(\"sfxEmpty.quote_layout_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.LAYOUT_NO_MATCHES, {\n entityName: t(\"entity.layout\"),\n icon: Icons.LAYOUT_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.layout\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_layout_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.LOCATION_NOT_FOUND, {\n entityName: t(\"entity.location\"),\n icon: Icons.NO_LOCATIONS,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.location\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.location\") }),\n quote: t(\"sfxEmpty.quote_location_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.LOCATION_NO_MATCHES, {\n entityName: t(\"entity.location\"),\n icon: Icons.NO_LOCATIONS,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.location\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_location_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.MODEL_NOT_FOUND, {\n entityName: t(\"entity.model\"),\n icon: Icons.MODEL_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.model\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.model\") }),\n quote: t(\"sfxEmpty.quote_model_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.MODEL_NO_MATCHES, {\n entityName: t(\"entity.model\"),\n icon: Icons.MODEL_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.model\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_model_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.NOTIFICATION_NOT_FOUND, {\n entityName: t(\"entity.notification\"),\n icon: Icons.NOTIFICATIONS,\n title: t(\"sfxEmpty.title_notifications_not_found\"),\n subtitle: t(\"sfxEmpty.subtitle_notifications_not_found\"),\n quote: t(\"sfxEmpty.quote_notification_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_ATTRIBUTES, {\n entityName: t(\"entity.attributes\"),\n title: t(\"sfxEmpty.title_no_attributes\"),\n subtitle: t(\"sfxEmpty.subtitle_no_attributes\"),\n quote: t(\"sfxEmpty.quote_attributes\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_ISSUE_COMMENTS, {\n entityName: t(\"entity.issue\"),\n title: t(\"sfxEmpty.title_no_comments\"),\n subtitle: t(\"sfxEmpty.subtitle_no_comments\", { entity: t(\"entity.issue\") }),\n quote: t(\"sfxEmpty.quote_no_comments\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_PERFORMED_WORK_COMMENTS, {\n entityName: t(\"entity.performed_work\"),\n title: t(\"sfxEmpty.title_no_comments\"),\n subtitle: t(\"sfxEmpty.subtitle_no_comments\", { entity: t(\"entity.performed_work\") }),\n quote: t(\"sfxEmpty.quote_no_comments\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_WORK_ORDER_COMMENTS, {\n entityName: t(\"entity.work_order\"),\n title: t(\"sfxEmpty.title_no_comments\"),\n subtitle: t(\"sfxEmpty.subtitle_no_comments\", { entity: t(\"entity.work_order\") }),\n quote: t(\"sfxEmpty.quote_no_comments\"),\n})\n\nEmptyStates.set(MissingEntityType.PERFORMED_WORK_NOT_FOUND, {\n entityName: t(\"entity.performed_work\"),\n icon: Icons.PERFORMED_WORK_LIST_SLASH,\n title: t(\"sfxEmpty.title_no_entity\", { entity: t(\"entity.performed_work\") }),\n subtitle: t(\"sfxEmpty.subtitle_performed_work\"),\n quote: t(\"sfxEmpty.quote_performed_work_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.PERFORMED_WORK_NO_MATCHES, {\n entityName: t(\"entity.performed_work\"),\n icon: Icons.PERFORMED_WORK_LIST_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches_found\"),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_performed_work_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.PHOTO_NOT_FOUND, {\n entityName: t(\"entity.photo\"),\n icon: Icons.NO_PHOTOS,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.photo\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.photo\") }),\n})\n\nEmptyStates.set(MissingEntityType.TODO_NOT_FOUND, {\n entityName: t(\"entity.to_do\"),\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.to_do\") }),\n subtitle: t(\"sfxEmpty.subtitle_to_do\", { entity: t(\"entity.to_do\") }),\n quote: t(\"sfxEmpty.quote_to_do_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.UNSUBMITTED_WORK_NOT_FOUND, {\n entityName: t(\"entity.unsubmitted_work\"),\n title: t(\"sfxEmpty.title_unsubmitted_work_not_found\"),\n subtitle: t(\"sfxEmpty.subtitle_unsubmitted_work_not_found\"),\n quote: t(\"sfxEmpty.quote_unsubmitted_work_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.UNSUBMITTED_WORK_NO_MATCHES, {\n entityName: t(\"entity.unsubmitted_work\"),\n title: t(\"sfxEmpty.title_unsubmitted_work_no_matches\", { entity: t(\"entity.unsubmitted_work\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_unsubmitted_work_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NOT_ASSIGNED, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.WORKORDER_SLASH,\n title: t(\"sfxEmpty.title_entity_not_assigned\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_assigned\", { entity: t(\"entity.work_order\") }),\n quote: t(\"sfxEmpty.quote_work_order_not_assigned\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NOT_CREATED, {\n entityName: t(\"entity.work_order\"),\n title: t(\"sfxEmpty.title_entity_not_created\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_work_order_not_created\"),\n quote: t(\"sfxEmpty.quote_work_order_not_created\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NOT_FOUND, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.WORKORDER_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.work_order\") }),\n quote: t(\"sfxEmpty.quote_work_order_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NO_MATCHES, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.WORKORDER_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_work_order_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NO_SUITABLE_MATCHES, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.WORKORDER_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_no_suitable_work_orders\"),\n quote: t(\"sfxEmpty.quote_work_order_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.WORK_ORDER_NOT_OPEN, {\n entityName: t(\"entity.work_order\"),\n icon: Icons.WORKORDER_SLASH,\n title: t(\"sfxEmpty.title_entity_not_open\", { entity: t(\"entity.work_order\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_open\", { entity: t(\"entity.work_order\") }),\n quote: t(\"sfxEmpty.quote_work_order_not_open\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_WORK_ISSUES, {\n entityName: t(\"entity.work_order\"),\n title: t(\"sfxEmpty.title_no_work_issues\"),\n subtitle: t(\"sfxEmpty.subtitle_no_work_issues\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_WORK_ITEMS, {\n entityName: t(\"entity.work_order\"),\n title: t(\"sfxEmpty.title_no_work_items\"),\n subtitle: t(\"sfxEmpty.subtitle_no_work_items\"),\n})\n\nEmptyStates.set(MissingEntityType.WORKSPACE_NOT_FOUND, {\n entityName: t(\"entity.workspace\"),\n icon: Icons.WORKSPACES,\n title: t(\"sfxEmpty.title_workspaces_not_found\"),\n subtitle: t(\"sfxEmpty.subtitle_workspace_not_found\"),\n quote: t(\"sfxEmpty.quote_workspace_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.WORKSPACE_NOT_FOUND_HOME, {\n entityName: t(\"entity.workspace\"),\n icon: Icons.WORKSPACES,\n title: t(\"sfxEmpty.title_workspace_not_found\"),\n subtitle: t(\"sfxEmpty.subtitle_workspace_not_found\"),\n quote: t(\"sfxEmpty.quote_workspace_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.WORKSPACE_NO_MATCHES, {\n entityName: t(\"entity.workspace\"),\n icon: Icons.WORKSPACES,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.workspace\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_workspace_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.ZONE_NOT_FOUND, {\n entityName: t(\"entity.zone\"),\n icon: Icons.ZONES_SLASH,\n title: t(\"sfxEmpty.title_entity_not_found\", { entity: t(\"entity.zone\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_not_found\", { entity: t(\"entity.zone\") }),\n quote: t(\"sfxEmpty.quote_zone_not_found\"),\n})\n\nEmptyStates.set(MissingEntityType.ZONE_NO_MATCHES, {\n entityName: t(\"entity.zone\"),\n icon: Icons.ZONES_SLASH,\n title: t(\"sfxEmpty.title_entity_no_matches\", { entity: t(\"entity.zone\") }),\n subtitle: t(\"sfxEmpty.subtitle_entity_no_matches\"),\n quote: t(\"sfxEmpty.quote_zone_no_matches\"),\n})\n\nEmptyStates.set(MissingEntityType.NO_ISSUES_RAISED, {\n entityName: t(\"entity.issue\"),\n title: t(\"sfxEmpty.title_no_issues_raised\"),\n subtitle: t(\"sfxEmpty.subtitle_no_issues_raised\"),\n quote: t(\"sfxEmpty.quote_no_issues_raised\"),\n})\n","export const IMAGE_FILE_MAIN_MIME_TYPES = \"image/jpg, image/jpeg, image/png\"\n\nexport const IMAGE_FILE_MIME_TYPES = [\n \"image/bmp\",\n \"image/jpeg\",\n \"image/png\",\n \"image/tiff\",\n \"image/webp\",\n]\n\nexport const ATTACHMENT_IMAGE_EXTENSIONS = [\"jpg\", \"jpeg\", \"png\"]\n\nexport const ATTACHMENT_ALLOWED_EXTENSIONS = [\n ...ATTACHMENT_IMAGE_EXTENSIONS,\n \"dwg\",\n \"docx\",\n \"pdf\",\n \"xlsx\",\n \"csv\",\n \"txt\",\n \"tsv\",\n]\n\nexport const DIR_ATTACHMENTS = \"attachments\"\nexport const DIR_ATTACHMENTS_UPLOAD = \"uploads\"\n\n// At the time of the writing the POST and POST BATCH max file size is 100 MB\nexport const MAX_UPLOAD_FILE_SIZE = 100000000 // 100MB\nexport const MAX_UPLOAD_PROFILE_PIC_SIZE = 1000000 // 1MB\n\nexport const SFX_LOGO = \"img/sfx_logo.svg\"\nexport const SFX_WATERMARK = \"img/sfx_watermark.svg\"\nexport const SAMMY_BIG = \"img/sammy_big.svg\"\nexport const SAMMY_SMALL = \"img/sammy_small.svg\"\n\nexport const WORKSPACE_PLACEHOLDER_MANAGER = \"img/workspacePlaceholderManager.svg\"\nexport const WORKSPACE_PLACEHOLDER_MANAGER_BIG = \"img/workspacePlaceholderManagerBig.svg\"\nexport const WORKSPACE_PLACEHOLDER_TECHNICIAN = \"img/workspacePlaceholderTechnician.svg\"\nexport const WORKSPACE_PLACEHOLDER_TECHNICIAN_BIG = \"img/workspacePlaceholderTechnicianBig.svg\"\nexport const WORKSPACE_PLACEHOLDER_TABLE = \"img/workspacePlaceholderTable.svg\"\n\nexport const CORRECTIVE_WORK_IMG = \"img/icons/corrective_work.svg\"\nexport const REGULAR_WORK_IMG = \"img/icons/regular_work.svg\"\n\nexport const IMG_PLACEHOLDER = \"img/img-placeholder/imagePlaceholder.svg\"\nexport const IMG_PLACEHOLDER_SM = \"img/img-placeholder/imagePlaceholderSmall.svg\"\nexport const IMG_UPLOAD_IN_PROGRESS_PLACEHOLDER = \"img/img-placeholder/imageUploadInProgress.svg\"\nexport const IMG_UPLOAD_FAILED_PLACEHOLDER = \"img/img-placeholder/imageUploadFailed.svg\"\n\nexport const IMG_MASCOT_SHRUG = \"img/mascot/mascot-shrug.svg\"\nexport const IMG_MASCOT_STOP = \"img/mascot/mascot-stop.svg\"\nexport const IMG_MASCOT_SURPRISED = \"img/mascot/mascot-surprised.svg\"\nexport const IMG_MASCOT_TECHNICIAN = \"img/mascot/mascot-technician.svg\"\nexport const IMG_MASCOT_TIME = \"img/mascot/mascot-time.svg\"\nexport const IMG_MASCOT_UNPLUG = \"img/mascot/mascot-unplug.svg\"\n\nexport const MOCK_USER_AVATAR =\n \"https://img.freepik.com/free-vector/mysterious-mafia-man-smoking-cigarette_52683-34828.jpg?w=740&t=st=1690445741~exp=1690446341~hmac=28c40e626bb6c61c6c3a238dd3d4ca955a9fc5c287668be489dd89ede501129e\"\n\nexport const ATTACHMENT_CONTEXT_LIST = [\n \"item\",\n \"item_model\",\n \"corrective_work_area\",\n \"corrective_work_item\",\n \"corrective_work_item_comment\",\n \"regular_work_area\",\n \"regular_work_item\",\n \"regular_work_item_comment\",\n \"issue_area\",\n \"issue_item\",\n \"issue_item_comment\",\n \"work_order_corrective_item\",\n \"work_order_corrective_area\",\n \"work_order_corrective_item_comment\",\n \"work_order_corrective_area_comment\",\n \"work_order_regular_item\",\n \"work_order_regular_area\",\n \"work_order_regular_item_comment\",\n \"work_order_regular_area_comment\",\n \"area\",\n \"zone\",\n] as const\n","export const FILTER_COLUMN_SEARCH = \"search_column\"\nexport const FILTER_COLUMN_VALUE = \"column_value\"\nexport const FILTER_ENTITY_UUID = \"entity_uuid\"\n","import { ContextAction } from \"src/util/enums/entityType\"\n\nexport const DEFAULT_CONTEXT_ACTIONS: ContextAction[] = [ContextAction.HELP, ContextAction.FEEDBACK]\n\nexport const TAB_TO_DO_UNSUBMITTED_WORK = \"unsubmitted-work\"\n\nexport const TAB_WORK_ORDER_OVERVIEW = \"overview\"\nexport const TAB_WORK_ORDER_ISSUES = \"issues\"\nexport const TAB_WORK_ORDER_ITEMS = \"items\"\nexport const TAB_WORK_ORDER_ATTACHED = \"attached\"\nexport const TAB_WORK_ORDER_COMMENTS = \"comments\"\n","import { i18n } from \"src/boot/i18n\"\nimport { TableColumn } from \"src/util/types/components/sfxTable\"\n\nexport const TABLE_PAGING_VALUES = [10, 20, 40, 60, 80]\n\nexport const TABLE_COLUMN_IMAGE = \"image\"\nexport const TABLE_COLUMN_INDICATOR = \"indicator\"\nexport const TABLE_COLUMN_STATUS = \"status\"\nexport const TABLE_COLUMN_WORK_STATE = \"workState\"\nexport const TABLE_COLUMN_WORK_ORDER_STATE = \"workOrderState\"\nexport const TABLE_COLUMN_RIGHT_SIDE_ICON = \"rightSideIcon\"\n\nexport const TABLE_BODY_CELL = \"body-cell\"\nexport const TABLE_HEADER_CELL = \"header-cell\"\nexport const TABLE_SELECTION_SIZE = 56\nexport const TABLE_SELECTION_SIZE_PX = TABLE_SELECTION_SIZE + \"px\"\nexport const TABLE_SELECTION_ARROW_SIZE = \"16px\"\nexport const TABLE_STATUS_ICON_SIZE = 28 // 20 icon + 2 x 4 icon padding\nexport const TABLE_STATUS_PADDING = 20 // 2 x 10\nexport const TABLE_IMAGE_SIZE = 80 // Based on Figma designs\nexport const TABLE_BORDER_SPACING = 16 // 8 x 2\nexport const TABLE_RIGHT_SIDE_ICON_SLOT = \"right-side-icon\"\nexport const TABLE_WORK_STATE_COLUMN_SIZE = 120\nexport const TABLE_WORK_ORDER_STATE_COLUMN_SIZE = 120\n\nexport const STATUS_COLUMN: TableColumn = {\n name: TABLE_COLUMN_STATUS,\n label: \"Status\",\n field: TABLE_COLUMN_STATUS,\n sortable: true,\n required: true,\n switchable: false,\n} as const\n\nexport const WORK_STATE_COLUMN: TableColumn = {\n name: TABLE_COLUMN_WORK_STATE,\n label: \"State\",\n field: TABLE_COLUMN_WORK_STATE,\n sortable: true,\n required: true,\n switchable: false,\n} as const\n\nconst { t } = i18n.global\nconst stateTranslated = t(\"sfxTable.state_work_order\")\n\nexport const WORK_ORDER_STATE_COLUMN: TableColumn = {\n name: TABLE_COLUMN_WORK_ORDER_STATE,\n label: stateTranslated,\n field: TABLE_COLUMN_WORK_ORDER_STATE,\n sortable: true,\n required: true,\n switchable: false,\n} as const\n\nexport const RIGHT_SIDE_ICON_COLUMN: TableColumn = {\n name: TABLE_COLUMN_RIGHT_SIDE_ICON,\n label: \"rightSideIcon\",\n field: \"rightSideIcon\",\n sortable: false,\n required: false,\n switchable: false,\n} as const\n\nexport const WORK_ORDER_STATE_SORT = new Map([\n [\"overdue\", 10],\n [\"behind\", 20],\n [\"resource\", 30],\n [\"draft\", 40],\n [\"in_progress\", 50],\n [\"open\", 60],\n [\"complete\", 70],\n [\"planned\", 80],\n [\"complete_closed\", 90],\n [\"closed\", 100],\n [\"unknown\", 110],\n])\n","export const CALCULATIONS = {\n EARTH_RADIUS_METERS: 6371e3,\n}\n\nexport const SUGGESTED_DEFAULTS = {\n MAX_SUGGESTION_DISTANCE_IN_METERS: 2 * 1000, // 2 kms\n}\n\nexport const MILLISECONDS_PER_DAY = 86400000\n","export enum WorkActionOption {\n PERFORM = \"perform\",\n OPEN = \"open\",\n CHOOSE = \"choose\",\n}\n\nexport enum DarkModeOption {\n OFF = \"off\",\n ON = \"on\",\n SYSTEM = \"system\",\n}\n","export enum ContextSource {\n CHANGE_PASSWORD = \"ChangePasswordOverlay\",\n CHANGE_UNLOCK_KEY = \"ChangeUnlockKeyOverlay\",\n CONFIGURATIONS = \"ConfigurationOverlay\",\n GENERIC_OVERLAY = \"GenericOverlay\",\n IDENTIFY = \"IdentifyOverlay\",\n NOTIFICATIONS = \"NotificationsOverlay\", // Currently not used\n IMAGE_VIEW = \"ImageViewOverlay\",\n ISSUE = \"IssueCreateOverlay\",\n}\n","export enum IssueSortBy {\n PRIORITY,\n RAISED,\n}\n\nexport enum IssueClickOptions {\n OPEN_OVERVIEW,\n OPEN_CORRECTIVE_WORK,\n OPEN_ADD_TO_WORK_ORDER,\n}\n\nexport enum WorkOrderSortBy {\n DEADLINE,\n PRIORITY,\n}\n\nexport enum WorkOrderClickOptions {\n OPEN_OVERVIEW,\n PERFORM_WORK,\n}\n\nexport enum WorkOrderIssueSortBy {\n DESIGNATION,\n ISSUE_PRIORITY,\n}\n\nexport enum WorkOrderItemSortBy {\n DESIGNATION,\n ITEM_ID,\n}\n\nexport enum PerformedWorkSortBy {\n PERFORMED_DATE_TIME,\n ISSUE_RAISED,\n}\n\nexport enum NotPerformedEntityClickOptions {\n OPEN_ENTITY_OVERVIEW,\n PERFORM_WORK,\n}\n\nexport enum PerformedEntityClickOptions {\n OPEN_PERFORMED_WORK,\n OPEN_ENTITY_OVERVIEW,\n}\n\nexport enum ItemSortBy {\n ISSUE_WORK_ORDER_PRIORITY,\n DESIGNATION,\n}\n\nexport enum ItemClickOptions {\n OPEN_OVERVIEW,\n DISPLAY_ON_LAYOUT,\n}\n\nexport enum LayoutWithZoneSortBy {\n LAYOUT_DESIGNATION,\n ISSUE_WORK_ORDER_PRIORITY,\n}\n\nexport enum LayoutWithZoneClickOptions {\n OPEN_OVERVIEW,\n DISPLAY_ON_LAYOUT,\n}\n\nexport enum ModelSortBy {\n LAYOUT_DESIGNATION,\n AREA_DESIGNATION,\n}\n\nexport enum ModelClickOptions {\n OPEN_ITEM_LIST_FOR_AREA,\n OPEN_AREA_OVERVIEW,\n}\n\nexport enum StatisticalMethod {\n MEAN,\n MEDIAN,\n MODE,\n}\n\nexport enum ConfigSortOrder {\n ASCENDING = 1,\n DESCENDING = -1,\n}\n","export enum MissingEntityType {\n AREA_NOT_FOUND,\n AREA_NO_MATCHES,\n ATTACHMENT_DRAG_AND_DROP_ITEM,\n ATTACHMENT_DRAG_AND_DROP_WORK_ORDER,\n ATTACHMENT_NOT_FOUND,\n ATTACHMENT_NO_MATCHES,\n ATTACHMENT_NOT_ADDED,\n ITEM_NOT_FOUND,\n ITEM_NO_MATCHES,\n ITEM_NO_RELATED_ACTIONS,\n ISSUE_NOT_FOUND,\n ISSUE_NO_MATCHES,\n LAYOUT_NOT_FOUND,\n LAYOUT_NO_MATCHES,\n LOCATION_NOT_FOUND,\n LOCATION_NO_MATCHES,\n MODEL_NOT_FOUND,\n MODEL_NO_MATCHES,\n NO_ATTRIBUTES,\n NO_ISSUES_RAISED,\n NO_ISSUE_COMMENTS,\n NO_PERFORMED_WORK_COMMENTS,\n NO_WORK_ORDER_COMMENTS,\n NO_WORK_ISSUES,\n NO_WORK_ITEMS,\n NOTIFICATION_NOT_FOUND,\n PERFORMED_WORK_NOT_FOUND,\n PERFORMED_WORK_NO_MATCHES,\n PHOTO_NOT_FOUND,\n TODO_NOT_FOUND,\n UNSUBMITTED_WORK_NOT_FOUND,\n UNSUBMITTED_WORK_NO_MATCHES,\n WORK_ORDER_NOT_ASSIGNED,\n WORK_ORDER_NOT_CREATED,\n WORK_ORDER_NOT_FOUND,\n WORK_ORDER_NO_MATCHES,\n WORK_ORDER_NO_SUITABLE_MATCHES,\n WORK_ORDER_NOT_OPEN,\n WORKSPACE_NOT_FOUND,\n WORKSPACE_NOT_FOUND_HOME,\n WORKSPACE_NO_MATCHES,\n ZONE_NOT_FOUND,\n ZONE_NO_MATCHES,\n}\n\nexport enum ContextAction {\n ADD_ATTACHMENT,\n ADD_TO_WORKORDER,\n ASSOCIATE_IDENTIFIER,\n CHANGE_REQUEST,\n CLONE_ITEM,\n CLOSE_ISSUE,\n CREATE_ITEM,\n CREATE_LOCATION,\n CREATE_MODEL,\n CREATE_WORK_ORDER,\n CLOSE_WORK_ORDER,\n DELETE,\n DISCARD,\n DISCARD_WORK,\n EXPORT_RESULTS,\n FEEDBACK,\n HANDLE_IDENTIFIERS,\n HELP,\n HISTORY,\n ISSUES,\n MARK_ALL_READ,\n MARK_ALL_UNREAD,\n PERFORM_ADHOC_WORK,\n PERFORM_CORRECTIVE_WORK,\n RAISE_ISSUE,\n DELETE_ISSUE,\n REJECT_ISSUE,\n REMOVE_FROM_WORKORDER,\n REMOVE_LOCATION,\n REPLACE_ITEM,\n SUPERSEDE_ISSUE,\n SUPPORT,\n TAKE_PHOTO,\n TOGGLE_DISPLAY_PERFORMED_ON,\n TOGGLE_DISPLAY_PERFORMED_OFF,\n USER_SETTINGS,\n IMAGE_ZOOM_IN,\n IMAGE_ZOOM_OUT,\n}\n\nexport enum MainMenuType {\n WORKSPACES,\n SETTINGS,\n ATTACHMENTS,\n ZONES,\n LAYOUTS,\n AREAS,\n LOCATIONS,\n MODELS,\n ITEMS,\n PERFORMED_WORK,\n ISSUES,\n HOME,\n ANALYTICS,\n WORK_ORDERS,\n ADMINISTRATION,\n AUDIT,\n IDENTIFY,\n CHANGE_REQUESTS,\n WORK_DOMAINS,\n}\n","/**\n * THIS FILE IS GENERATED AUTOMATICALLY.\n * DO NOT EDIT.\n *\n * Convenience enum for custom icons.\n */\nexport enum CustomIconName {\n AREA_CREATE = \"fak fa-area-create\",\n AREA_SLASH = \"fak fa-area-slash\",\n ASSIGNMENT_REJECT = \"fak fa-assignment-reject\",\n ATTACHMENT_ADD = \"fak fa-attachment-add\",\n ATTACHMENT_SLASH = \"fak fa-attachment-slash\",\n AUDIT_ACCEPTED = \"fak fa-audit-accepted\",\n AUDIT_REJECTED = \"fak fa-audit-rejected\",\n FEEDBACK = \"fak fa-feedback\",\n HAS_IDENTIFIER = \"fak fa-has-identifier\",\n IDENTIFY = \"fak fa-identify\",\n IMAGE_ERROR = \"fak fa-image-error\",\n ISSUE_CREATE = \"fak fa-issue-create\",\n ISSUE_SLASH = \"fak fa-issue-slash\",\n ISSUES = \"fak fa-issues\",\n ITEM_CLONE = \"fak fa-item-clone\",\n ITEM_CREATE = \"fak fa-item-create\",\n ITEM_SLASH = \"fak fa-item-slash\",\n ITEMS = \"fak fa-items\",\n LAYOUT_CREATE = \"fak fa-layout-create\",\n LAYOUT_SLASH = \"fak fa-layout-slash\",\n LOCATION_CREATE = \"fak fa-location-create\",\n LOCATIONS = \"fak fa-locations\",\n MODEL_CLONE = \"fak fa-model-clone\",\n MODEL_CREATE = \"fak fa-model-create\",\n MODEL_SLASH = \"fak fa-model-slash\",\n MODELS = \"fak fa-models\",\n PERFORMED_WORK_LIST = \"fak fa-performed-work-list\",\n PERFORMED_WORK_LIST_SLASH = \"fak fa-performed-work-list-slash\",\n S_FILE_EXPORT = \"fak fa-s-file-export\",\n TIMED_UNDO = \"fak fa-timed-undo\",\n WORK_CORRECTIVE = \"fak fa-work-corrective\",\n WORK_CORRECTIVE_SLASH = \"fak fa-work-corrective-slash\",\n WORK_REGULAR = \"fak fa-work-regular\",\n WORK_REGULAR_SLASH = \"fak fa-work-regular-slash\",\n WORKDOMAIN = \"fak fa-workdomain\",\n WORKDOMAINS = \"fak fa-workdomains\",\n WORKORDER_ADD_TO = \"fak fa-workorder-add-to\",\n WORKORDER_CLONE = \"fak fa-workorder-clone\",\n WORKORDER_CREATE = \"fak fa-workorder-create\",\n WORKORDER_REMOVE_FROM = \"fak fa-workorder-remove-from\",\n WORKORDER_SLASH = \"fak fa-workorder-slash\",\n WORKSPACES = \"fak fa-workspaces\",\n ZONES = \"fak fa-zones\",\n ZONES_SLASH = \"fak fa-zones-slash\",\n}\n","/**\n * Enum class for easy handling of local icons (/public/img), such as SVGs and similar,\n * that cannot come from figma due to colour restrictions or others.\n */\nexport enum CustomLocalIconName {\n SFX_LOGO = \"sfx-logo\",\n SAMMY_BIG = \"sammy-big\",\n SAMMY_SMALL = \"sammy-small\",\n GOOGLE_LOGO = \"google-logo\",\n MICROSOFT_LOGO = \"microsoft-logo\",\n ISSUE_SUPERSEDE = \"supersede-issue\",\n WIZARD = \"wizard\",\n WIZARD_WHITE = \"wizard-white\",\n RADIO_ON = \"radio-on\",\n RADIO_OFF = \"radio-off\",\n}\n","import { CustomIconName } from \"./customIconName\"\nimport { CustomLocalIconName } from \"./customLocalIconName\"\n\n// Purposeful design choice to have duplicates, since icons can change often until final production release\n/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\n\n/**\n * This enum contains all the needed font awesome icons which are readily available.\n *\n * This list is compiled based on the list of icons in Figma.\n * https://www.figma.com/file/8XOze4uCISh4YozT6y2sTB/SafeEx-APP?node-id=9755%3A82890&t=oeAs1emDc8OwXf7i-4\n *\n * The following list is missing the custom icons. You can find them in customIconName.ts\n */\nenum FontAwesomeIconName {\n // General User Interface\n ARROW_ROTATE_RIGHT = \"arrow-rotate-right\",\n EXPAND = \"angle-down\",\n COLLAPSE = \"angle-up\",\n INTERNAL_LINK = \"arrow-right-to-arc\",\n EXTERNAL_LINK = \"up-right-from-square\",\n BACK = \"angle-left\",\n SUCCEEDED = \"circle-check\",\n INFORMATION = \"circle-info\",\n ISSUE = \"circle\",\n ISSUE_SOLID = \"fa-solid fa-circle\",\n MANDATORY = \"asterisk\",\n OPEN_CALENDAR = \"calendar\",\n ADD = \"plus\",\n REMOVE = \"minus\",\n EXPAND_IMAGE = \"arrows-maximize\",\n EXPAND_GALLERY_IMAGE = \"expand\",\n COMPRESS_GALLERY_IMAGE = \"compress\",\n EARTH = \"earth-europe\",\n REJECT = \"xmark\",\n REJECT_CIRCLE = \"circle-x\",\n ACCEPT = \"check\",\n TICK = \"check\",\n RESET = \"rotate-left\",\n BLUETOOTH = \"bluetooth\",\n CHANGE_REQUEST = \"pen-to-square\",\n IMAGE_PLACEHOLDER = \"image\",\n CLOSE = \"xmark\",\n CLOSE_LARGE = \"xmark-large\",\n SEARCH = \"magnifying-glass\",\n HIDE = \"eye-slash\",\n SHOW = \"eye\",\n LINK_ICON_FORWARD = \"angle-right\",\n ERROR = \"triangle-exclamation\",\n CONTEXT_MENU = \"ellipsis-vertical\",\n CHECKBOX_CHECKED = \"square-check\",\n CHECKBOX_NOT_CHECKED = \"square\",\n ARROW_RIGHT = \"arrow-right\",\n CERTIFICATE_REQUIRED = \"file-certificate\",\n CLICKABLE = \"hand-pointer\",\n WARNING = \"triangle-exclamation\",\n DOWNLOAD = \"download\",\n UPLOAD = \"upload\",\n ADD_TO_CALENDAR = \"calendar-plus\",\n CUSTOMIZE = \"sliders-simple\",\n SELECT_FROM_LIST = \"list-dropdown\",\n SORT = \"sort\",\n SORT_UP = \"sort-up\",\n SORT_DOWN = \"sort-down\",\n LIST_DISPLAY = \"list-check\",\n DRAW_TETRAGON = \"draw-square\",\n DRAW_POLYGON = \"draw-polygon\",\n EDIT = \"pencil\",\n CLEAR = \"circle-x\",\n EMAIL = \"at\",\n NOTIFICATION_FROM_SUPPORT = \"trumpet\",\n CLOCK = \"clock\",\n CLOCK_ROTATE_LEFT = \"clock-rotate-left\",\n BEHIND = \"turtle\",\n SHEEP = \"sheep\",\n ARROW_DOWN = \"arrow-down\",\n UNDO = \"undo\",\n NFC = \"nfc-symbol\",\n WRENCH = \"screwdriver-wrench\",\n SAVED_CONFIGURATIONS = \"bookmark\",\n NOT_FAVOURITE = \"star\",\n FAVOURITE = \"fa-solid fa-star\",\n SAVE = \"floppy-disk\",\n TABLE_VIEW = \"list-ul\",\n CARD_VIEW = \"grid-2\",\n OFFLINE = \"cloud-slash\",\n ONLINE = \"cloud\",\n MANAGED_WORKSPACE = \"people-roof\",\n LESS_THAN = \"less-than\",\n LESS_THAN_EQUAL = \"less-than-equal\",\n GREATER_THAN = \"greater-than\",\n GREATER_THAN_EQUAL = \"greater-than-equal\",\n WORK_ORDER_RESOURCE = \"person-circle-exclamation\",\n WORK_ORDER_CLOSED_UNCOMPLETED = \"clipboard-list-check\",\n WORK_ORDER_COMPLETED = \"clipboard-check\",\n FILTER = \"filter\",\n USER_WITH_HELMET_REGULAR = \"fa-regular fa-user-helmet-safety\",\n USER_WITH_HELMET_SOLID = \"fa-solid fa-user-helmet-safety\",\n GANTT_CHART = \"chart-gantt\",\n\n // Main Menu Icons\n HOME = \"house\",\n TODO = \"list-ul\",\n WORK_ORDERS = \"clipboard-list\",\n MORE = \"triangle\",\n LESS = \"triangle fa-rotate-180\",\n ITEM = \"tag\",\n AREAS = \"map\",\n LAYOUTS = \"layer-group\",\n MODEL = \"cube\",\n LOCATION = \"location-pin\",\n ATTACHMENTS = \"paperclip\",\n SETTINGS = \"user-gear\",\n USER_PROFILE = \"user\",\n USER_CIRCLE = \"user-circle\",\n ANALYTICS = \"chart-column\",\n CHEVRON_RIGHT = \"chevron-right\",\n CHEVRON_LEFT = \"chevron-left\",\n CHEVRON_UP = \"chevron-up\",\n CHEVRON_DOWN = \"chevron-down\",\n CHEVRONS_DOWN = \"chevrons-down\",\n ADMINISTRATION = \"users-gear\",\n CHANGE_REQUESTS = \"right-left\",\n\n // Context Menu Icons\n LOGIN_HELP = \"life-ring\",\n // TODO: Missing icon css in Figma\n REPLACE_ITEM = \"svg\",\n MARK_AS_READ = \"envelope-open\",\n MARK_AS_UNREAD = \"envelope\",\n ADD_PHOTO = \"camera\",\n DELETE = \"trash\",\n HISTORY = \"scroll-old\",\n NOTIFICATIONS = \"bell\",\n NOTIFICATIONS_NEW = \"bell-on\",\n HELP = \"circle-question\",\n RETIRE = \"box-archive\",\n WORK_OBSTRUCTED = \"ban fa-rotate-45\",\n // TODO: Wrong css in Figma\n WORK_REJECT = \"ban\",\n\n // Entity Not Found Icons\n NO_PHOTOS = \"image-slash\",\n NO_LOCATIONS = \"location-pin-slash\",\n ATTRIBUTES = \"chart-radar\",\n\n // Following icons are not from Figma, but related to Quasar components\n SQUARE_MINUS = \"square-minus\",\n SQUARE_PLUS = \"square-plus\",\n}\n\n/**\n * IMPORTANT:\n *\n * Use only the following constant when you want to call an icon in the UI\n */\nexport const Icons = { ...CustomIconName, ...FontAwesomeIconName, ...CustomLocalIconName }\n","export enum NamedPath {\n ADHOC_CORRECTIVE_WORK = \"AdhocCorrectiveWork\",\n ADHOC_REGULAR_WORK = \"AdhocRegularWork\",\n PLANNED_CORRECTIVE_WORK = \"PlannedCorrectiveWork\",\n PLANNED_REGULAR_WORK = \"PlannedRegularWork\",\n AREA = \"Area\",\n INDEX = \"Index\",\n INITIATE_APP = \"InitiateApp\",\n ISSUE = \"Issue\",\n ITEM = \"Item\",\n ITEM_MODEL = \"ItemModel\",\n LOCATION = \"Location\",\n LOCK = \"Lock\",\n LOGIN = \"Login\",\n NOT_FOUND = \"404NotFound\",\n PERFORMED_CORRECTIVE_WORK = \"PerformedCorrectiveWork\",\n PERFORMED_REGULAR_WORK = \"PerformedRegularWork\",\n SELECT_AREA = \"SelectArea\",\n SELECT_ISSUE = \"SelectIssue\",\n SELECT_ISSUE_FOR_ITEM = \"SelectIssueForItem\",\n SELECT_ITEM = \"SelectItem\",\n SELECT_LAYOUT = \"SelectLayout\",\n SELECT_MODEL = \"SelectModel\",\n SELECT_PERFORMED_WORK = \"SelectPerformedWork\",\n SELECT_WORK_ORDER = \"SelectWorkOrder\",\n SELECT_WORKSPACE = \"SelectWorkspace\",\n SELECT_ZONE = \"SelectZone\",\n TO_DO = \"ToDo\",\n USER_SETTINGS = \"UserSettings\",\n WORK_ORDER_CORRECTIVE = \"WorkOrderCorrective\",\n WORK_ORDER_REGULAR = \"WorkOrderRegular\",\n WORKSPACE = \"Workspace\",\n ZONE = \"Zone\",\n}\n\nexport enum NamedManagerPath {\n ADHOC_CORRECTIVE_WORK = \"AdhocCorrectiveWork\",\n ADHOC_REGULAR_WORK = \"AdhocRegularWork\",\n AREA = \"Area\",\n CREATE_ISSUE = \"CreateIssue\",\n INDEX = \"Index\",\n INITIATE_APP = \"InitiateApp\",\n ISSUE = \"Issue\",\n ITEM = \"Item\",\n ITEM_MODEL = \"ItemModel\",\n LOCATION = \"Location\",\n LOCK = \"Lock\",\n LOGIN = \"Login\",\n NOT_FOUND = \"404NotFound\",\n PERFORMED_CORRECTIVE_WORK = \"PerformedCorrectiveWork\",\n PERFORMED_REGULAR_WORK = \"PerformedRegularWork\",\n SELECT_AREA = \"SelectArea\",\n SELECT_ITEM = \"SelectItem\",\n CREATE_ITEM = \"CreateItem\",\n SELECT_ISSUE = \"SelectIssue\",\n SELECT_LAYOUT = \"SelectLayout\",\n SELECT_MODEL = \"SelectModel\",\n SELECT_PERFORMED_WORK = \"SelectPerformedWork\",\n SELECT_WORK_ORDER = \"SelectWorkOrder\",\n SELECT_WORKSPACE = \"SelectWorkspace\",\n SELECT_ZONE = \"SelectZone\",\n TO_DO = \"ToDo\",\n USER_SETTINGS = \"UserSettings\",\n WORKSPACE = \"Workspace\",\n WORK_ORDER_CORRECTIVE = \"WorkOrderCorrective\",\n WORK_ORDER_REGULAR = \"WorkOrderRegular\",\n CREATE_WORK_ORDER = \"CreateWorkOrder\",\n ZONE = \"Zone\",\n}\n\nexport enum DemoNamedPath {\n API_CALLS = \"functionality/ApiCalls\",\n BARCODE_READER = \"functionality/BarcodeReader\",\n BUTTONS = \"elements/Buttons\",\n CARDS = \"elements/Cards\",\n CHARTS = \"elements/Charts\",\n CHIPS = \"elements/Chips\",\n CUSTOM_DIRECTIVES = \"functionality/Directives\",\n CUSTOM_ICONS = \"elements/CustomIcons\",\n DATA_POINT = \"elements/DataPoint\",\n DATABASE = \"functionality/Database\",\n DEMO_INDEX = \"DemoIndex\",\n DIALOGS_AND_OVERLAYS = \"elements/DialogsAndOverlays\",\n EMPTY_STATES = \"elements/EmptyStates\",\n EXAMPLE_STORE = \"functionality/ExampleStore\",\n GENERAL_DIRECTIVES = \"elements/GeneralDirectives\",\n HEALTH_INDICATOR = \"elements/HealthIndicator\",\n IMAGE_GALLERY = \"elements/ImageGallery\",\n INPUTS = \"elements/Inputs\",\n ISSUES = \"elements/Issues\",\n KEYBOARD_READER = \"functionality/KeyboardReader\",\n MAIN_MENU = \"elements/MainMenu\",\n NFC_READER = \"functionality/NfcReader\",\n NOTIFICATIONS = \"elements/Notifications\",\n PRIORITY_LABELS = \"elements/PriorityLabels\",\n FILTERING_ELEMENTS = \"elements/filtering\",\n PROCEDURE_STEP = \"elements/ProcedureStep\",\n PROGRESS_INDICATOR = \"elements/ProgressIndicator\",\n RADIO_BUTTONS = \"elements/RadioButtons\",\n SEARCH_BAR = \"functionality/SearchBar\",\n SELECTS = \"elements/Selects\",\n SPECIAL_PURPOSE = \"elements/SpecialPurpose\",\n TABLE = \"elements/Table\",\n TABS = \"elements/Tabs\",\n TO_DO = \"elements/ToDo\",\n TOGGLE = \"elements/Toggle\",\n TOOLTIPS = \"elements/Tooltips\",\n TOP_NAVIGATION = \"elements/TopNavigation\",\n TYPOGRAPHY = \"elements/Typography\",\n UI_DEMO = \"UIDemo\",\n}\n","// Used for the notifications, which use Quasar Notify plugin\n\nexport enum NotificationActionMessage {\n PERFORMED_WORK,\n ISSUES_RAISED,\n ALL_RAISED,\n UNSUBMITTED_WORK,\n}\n\n// Used for SfxCardNotification\n\nexport enum CardNotificationEvent {\n ASSIGNED_WORK_ORDER,\n COMMENTED_WORK_ORDER,\n COMMENTED_PERFORMED_WORK,\n REJECTED_ISSUE,\n REJECTED_WORK,\n ACCEPTED_WORK,\n CORRECTED_ISSUE,\n ADDED_ISSUE,\n}\n","export enum NavigationAction {\n CLOSE,\n HISTORY_BACK,\n}\n","export enum AuthURL {\n AUTH_REGISTER_DEVICE = \"/sso/oauth/app/\",\n AUTH_REQUEST_ACCESS_TOKEN = \"/sso/oauth/token/\",\n AUTH_REQUEST_AUTHORIZATION_CODE = \"/sso/oauth/authorize/\",\n AUTH_REVOKE_TOKEN = \"/sso/oauth/revoke_token/\",\n AUTH_VERIFY_ACCESS_TOKEN = \"/sso/verify/\",\n}\n\nexport enum SpringboardURL {\n //region Users\n\n USER_ID = \"/v1/users/{id}/\",\n USER_ID_IMAGE = \"/v1/users/{id}/image/\",\n USER_ME = \"/v1/users/me/\",\n USER_ME_IMAGE = \"/v1/users/me/image/\",\n USER_ME_PASSWORD = \"/v1/users/me/password/\",\n USER_ROLES = \"/v1/users/roles/\",\n\n //endregion\n\n //region Workspaces\n\n WORKSPACES_LIST = \"/v1/workspaces/\",\n WORKSPACES_ID = \"/v1/workspaces/{id}/\",\n WORKSPACES_ID_USERS = \"/v1/workspaces/{id}/users/\",\n\n //endregion\n\n //region Work Domains\n\n WORK_DOMAINS = \"/v1/workdomains/\",\n WORK_DOMAINS_ID = \"/v1/workdomains/{id}/\",\n\n //endregion\n}\n\nexport enum CSIurl {\n //region Attachments\n\n ATTACHMENTS_LIST = \"/v1/attachments/\",\n ATTACHMENTS_ID = \"/v1/attachments/{id}/\",\n ATTACHMENTS_ID_CONTENT = \"/v1/attachments/{id}/content/\",\n ATTACHMENTS_BATCH = \"/v1/attachments/batch/\",\n\n //endregion\n\n //region Attributes\n\n ATTRIBUTES_CHAR_LIST = \"/v1/attributes/char/\",\n ATTRIBUTES_NUMERIC_LIST = \"/v1/attributes/numeric/\",\n ATTRIBUTES_SELECT_LIST = \"/v1/attributes/select/\",\n ATTRIBUTES_TEMPORAL_LIST = \"/v1/attributes/temporal/\",\n ATTRIBUTES_CHAR = \"/v1/attributes/char/{id}/\",\n ATTRIBUTES_NUMERIC = \"/v1/attributes/numeric/{id}/\",\n ATTRIBUTES_SELECT = \"/v1/attributes/select/{id}/\",\n ATTRIBUTES_TEMPORAL = \"/v1/attributes/temporal/{id}/\",\n ATTRIBUTES_CHAR_VALUES_BATCH = \"/v1/attributes/char/values/batch/\",\n ATTRIBUTES_NUMERIC_VALUES_BATCH = \"/v1/attributes/numeric/values/batch/\",\n ATTRIBUTES_SELECT_VALUES_BATCH = \"/v1/attributes/select/values/batch/\",\n ATTRIBUTES_TEMPORAL_VALUES_BATCH = \"/v1/attributes/temporal/values/batch/\",\n ATTRIBUTES_SELECT_OPTIONS_LIST = \"/v1/attributes/select/options/\",\n ATTRIBUTES_SELECT_OPTIONS = \"/v1/attributes/select/options/{id}/\",\n ATTRIBUTES_SELECT_OPTIONS_ATTR_ID = \"/v1/attributes/select/{attr_id}/options/\",\n\n //endregion\n\n //region Identifiers\n\n IDENTIFIERS_LIST = \"/v1/identifiers/\",\n IDENTIFIERS_BATCH = \"/v1/identifiers/batch/\",\n IDENTIFIERS_TYPE = \"/v1/identifiers/{iden_type}/\",\n IDENTIFIERS_TYPE_ID = \"/v1/identifiers/{iden_type}/{iden_id}/\",\n\n //endregion\n\n //region Issue Priorities\n\n ISSUE_PRIORITIES = \"/v1/issuepriorities/\",\n ISSUE_PRIORITIES_ID = \"/v1/issuepriorities/{id}/\",\n\n //endregion\n\n //region Issues\n\n ISSUE_ON_ITEM_ACTIONS = \"/v1/issues/onitem/actions/\",\n ISSUE_ON_ITEM_ACTIONS_ID = \"/v1/issues/onitem/actions/{id}/\",\n ISSUE_ON_ITEM_ACTIONS_BATCH = \"/v1/issues/onitem/actions/batch/\",\n\n ISSUES_ON_ITEM = \"/v1/issues/onitem/\",\n ISSUES_ON_ITEM_ID = \"/v1/issues/onitem/{id}/\",\n ISSUES_ON_ITEM_BATCH = \"/v1/issues/onitem/batch/\",\n\n ISSUES_ON_ITEM_ATTACHMENTS_LIST = \"/v1/issues/onitem/{issue_id}/attachments/\",\n ISSUES_ON_ITEM_ATTACHMENTS_ID = \"/v1/issues/onitem/{issue_id}/attachments/{id}/\",\n ISSUES_ON_ITEM_ATTACHMENTS_ID_CONTENT = \"/v1/issues/onitem/{issue_id}/attachments/{id}/content/\",\n ISSUES_ON_ITEM_ATTACHMENTS_BATCH = \"/v1/issues/onitem/{issue_id}/attachments/batch/\",\n\n ISSUES_ON_ITEM_COMMENTS = \"/v1/issues/onitem/comments/\",\n ISSUES_ON_ITEM_COMMENTS_ID = \"/v1/issues/onitem/comments/{id}/\",\n ISSUES_ON_ITEM_COMMENTS_BATCH = \"/v1/issues/onitem/comments/batch/\",\n\n ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS = \"/v1/issues/onitem/comments/{comment_id}/attachments/\",\n ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID = \"/v1/issues/onitem/comments/{comment_id}/attachments/{id}/\",\n ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/issues/onitem/comments/{comment_id}/attachments/{id}/content/\",\n ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH = \"/v1/issues/onitem/comments/{comment_id}/attachments/batch/\",\n\n //endregion\n\n //region Items\n\n ITEMS = \"/v1/items/\",\n ITEMS_BATCH = \"/v1/items/batch/\",\n ITEMS_SEARCH = \"/v1/items/search/\",\n ITEMS_ID = \"/v1/items/{id}/\",\n ITEMS_ID_ATTACHMENTS_LIST = \"/v1/items/{item_id}/attachments/\",\n ITEMS_ID_ATTACHMENTS_ID = \"/v1/items/{item_id}/attachments/{id}/\",\n ITEMS_ID_ATTACHMENTS_ID_CONTENT = \"/v1/items/{item_id}/attachments/{id}/content/\",\n ITEMS_ID_ATTACHMENTS_BATCH = \"/v1/items/{item_id}/attachments/batch/\",\n ITEMS_ATTRIBUTES_CHAR_VALUES_LIST = \"/v1/items/attributes/char/values/\",\n ITEMS_ATTRIBUTES_NUMERIC_VALUES_LIST = \"/v1/items/attributes/numeric/values/\",\n ITEMS_ATTRIBUTES_SELECT_VALUES_LIST = \"/v1/items/attributes/select/values/\",\n ITEMS_ATTRIBUTES_TEMPORAL_VALUES_LIST = \"/v1/items/attributes/temporal/values/\",\n ITEMS_ATTRIBUTES_CHAR_VALUES = \"/v1/items/{item_id}/attributes/char/values/\",\n ITEMS_ATTRIBUTES_NUMERIC_VALUES = \"/v1/items/{item_id}/attributes/numeric/values/\",\n ITEMS_ATTRIBUTES_SELECT_VALUES = \"/v1/items/{item_id}/attributes/select/values/\",\n ITEMS_ATTRIBUTES_TEMPORAL_VALUES = \"/v1/items/{item_id}/attributes/temporal/values/\",\n ITEMS_ATTRIBUTES_CHAR_VALUE = \"/v1/items/{item_id}/attributes/char/{attr_id}/value/\",\n ITEMS_ATTRIBUTES_NUMERIC_VALUE = \"/v1/items/{item_id}/attributes/numeric/{attr_id}/value/\",\n ITEMS_ATTRIBUTES_SELECT_VALUE = \"/v1/items/{item_id}/attributes/select/{attr_id}/value/\",\n ITEMS_ATTRIBUTES_TEMPORAL_VALUE = \"/v1/items/{item_id}/attributes/temporal/{attr_id}/value/\",\n ITEMS_WORK_ORDER_REGULAR = \"/v1/items/{item_id}/workorders/regular/\",\n\n //endregion\n\n //region Item Classes\n\n ITEM_CLASSES_LIST = \"/v1/itemclasses/\",\n ITEM_CLASSES_ID = \"/v1/itemclasses/{id}/\",\n\n //endregion\n\n //region Item Models\n\n ITEM_MODELS = \"/v1/itemmodels/\",\n ITEM_MODELS_ID = \"/v1/itemmodels/{id}/\",\n ITEM_MODELS_ID_ATTACHMENTS_LIST = \"/v1/itemmodels/{model_id}/attachments/\",\n ITEM_MODELS_ID_ATTACHMENTS_ID = \"/v1/itemmodels/{model_id}/attachments/{id}/\",\n ITEM_MODELS_ID_ATTACHMENTS_ID_CONTENT = \"/v1/itemmodels/{model_id}/attachments/{id}/content/\",\n ITEM_MODELS_ID_ATTACHMENTS_BATCH = \"/v1/itemmodels/{model_id}/attachments/batch/\",\n ITEM_MODELS_ATTRIBUTES_CHAR_VALUES_LIST = \"/v1/itemmodels/attributes/char/values/\",\n ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES_LIST = \"/v1/itemmodels/attributes/numeric/values/\",\n ITEM_MODELS_ATTRIBUTES_SELECT_VALUES_LIST = \"/v1/itemmodels/attributes/select/values/\",\n ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES_LIST = \"/v1/itemmodels/attributes/temporal/values/\",\n ITEM_MODELS_ATTRIBUTES_CHAR_VALUES = \"/v1/itemmodels/{item_model_id}/attributes/char/values/\",\n ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES = \"/v1/itemmodels/{item_model_id}/attributes/numeric/values/\",\n ITEM_MODELS_ATTRIBUTES_SELECT_VALUES = \"/v1/itemmodels/{item_model_id}/attributes/select/values/\",\n ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES = \"/v1/itemmodels/{item_model_id}/attributes/temporal/values/\",\n ITEM_MODELS_ATTRIBUTES_CHAR_VALUE = \"/v1/itemmodels/{item_model_id}/attributes/char/{attr_id}/value/\",\n ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUE = \"/v1/itemmodels/{item_model_id}/attributes/numeric/{attr_id}/value/\",\n ITEM_MODELS_ATTRIBUTES_SELECT_VALUE = \"/v1/itemmodels/{item_model_id}/attributes/select/{attr_id}/value/\",\n ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUE = \"/v1/itemmodels/{item_model_id}/attributes/temporal/{attr_id}/value/\",\n\n //endregion\n\n //region Performed Work\n\n // TODO: Uncomment when we have areas\n // PERFORMED_WORK_CORRECTIVE_AREA_LIST = \"/v1/performedwork/corrective/onarea/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_ID = \"/v1/performedwork/corrective/onarea/{id}/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_BATCH = \"/v1/performedwork/corrective/onarea/batch/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_ATTACHMENTS_LIST = \"/v1/performedwork/corrective/onarea/{work_id}/attachments/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_ATTACHMENTS_ID = \"/v1/performedwork/corrective/onarea/{work_id}/attachments/{id}/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/corrective/onarea/{work_id}/attachments/{id}/content/\",\n // PERFORMED_WORK_CORRECTIVE_AREA_ATTACHMENTS_BATCH = \"/v1/performedwork/corrective/onarea/{work_id}/attachments/batch/\",\n\n PERFORMED_WORK_CORRECTIVE_ITEM_LIST = \"/v1/performedwork/corrective/onitem/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_ID = \"/v1/performedwork/corrective/onitem/{id}/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_BATCH = \"/v1/performedwork/corrective/onitem/batch/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_LIST = \"/v1/performedwork/corrective/onitem/{work_id}/attachments/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID = \"/v1/performedwork/corrective/onitem/{work_id}/attachments/{id}/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/corrective/onitem/{work_id}/attachments/{id}/content/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_BATCH = \"/v1/performedwork/corrective/onitem/{work_id}/attachments/batch/\",\n\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS = \"/v1/performedwork/corrective/onitem/comments/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ID = \"/v1/performedwork/corrective/onitem/comments/{id}/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_BATCH = \"/v1/performedwork/corrective/onitem/comments/batch/\",\n\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS = \"/v1/performedwork/corrective/onitem/comments/{comment_id}/attachments/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID = \"/v1/performedwork/corrective/onitem/comments/{comment_id}/attachments/{id}/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/corrective/onitem/comments/{comment_id}/attachments/{id}/content/\",\n PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_BATCH = \"/v1/performedwork/corrective/onitem/comments/{comment_id}/attachments/batch/\",\n\n // TODO: Uncomment when we have areas\n // PERFORMED_WORK_REGULAR_AREA_LIST = \"/v1/performedwork/regular/onarea/\",\n // PERFORMED_WORK_REGULAR_AREA_ID = \"/v1/performedwork/regular/onarea/{id}/\",\n // PERFORMED_WORK_REGULAR_AREA_BATCH = \"/v1/performedwork/regular/onarea/batch/\",\n // PERFORMED_WORK_REGULAR_AREA_ATTACHMENTS_LIST = \"/v1/performedwork/regular/onarea/{work_id}/attachments/\",\n // PERFORMED_WORK_REGULAR_AREA_ATTACHMENTS_ID = \"/v1/performedwork/regular/onarea/{work_id}/attachments/{id}/\",\n // PERFORMED_WORK_REGULAR_AREA_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/regular/onarea/{work_id}/attachments/{id}/content/\",\n // PERFORMED_WORK_REGULAR_AREA_ATTACHMENTS_BATCH = \"/v1/performedwork/regular/onarea/{work_id}/attachments/batch/\",\n\n PERFORMED_WORK_REGULAR_ITEM_LIST = \"/v1/performedwork/regular/onitem/\",\n PERFORMED_WORK_REGULAR_ITEM_ID = \"/v1/performedwork/regular/onitem/{id}/\",\n PERFORMED_WORK_REGULAR_ITEM_BATCH = \"/v1/performedwork/regular/onitem/batch/\",\n PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_LIST = \"/v1/performedwork/regular/onitem/{work_id}/attachments/\",\n PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID = \"/v1/performedwork/regular/onitem/{work_id}/attachments/{id}/\",\n PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/regular/onitem/{work_id}/attachments/{id}/content/\",\n PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_BATCH = \"/v1/performedwork/regular/onitem/{work_id}/attachments/batch/\",\n\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS = \"/v1/performedwork/regular/onitem/comments/\",\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ID = \"/v1/performedwork/regular/onitem/comments/{id}/\",\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_BATCH = \"/v1/performedwork/regular/onitem/comments/batch/\",\n\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS = \"/v1/performedwork/regular/onitem/comments/{comment_id}/attachments/\",\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID = \"/v1/performedwork/regular/onitem/comments/{comment_id}/attachments/{id}/\",\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/performedwork/regular/onitem/comments/{comment_id}/attachments/{id}/content/\",\n PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_BATCH = \"/v1/performedwork/regular/onitem/comments/{comment_id}/attachments/batch/\",\n\n //endregion\n\n //region History\n\n HISTORY_ENTITY = \"/v1/history/{entity_url_name}/{entity_id}/\",\n HISTORY_USER = \"/v1/history/users/{user_id}/\",\n\n //endregion\n\n //region Work Domains\n\n WORK_DOMAINS = \"/v1/workdomains/\",\n WORK_DOMAINS_ID = \"/v1/workdomains/{id}/\",\n\n //endregion\n\n //region Work Order Priorities\n\n WORK_ORDER_PRIORITIES = \"/v1/workorderpriorities/\",\n WORK_ORDER_PRIORITIES_ID = \"/v1/workorderpriorities/{id}/\",\n\n //endregion\n\n //region Work Orders\n\n // WORK_ORDER_CORRECTIVE_ON_AREA = \"/v1/workorders/corrective/onarea/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_ID = \"/v1/workorders/corrective/onarea/{id}/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_BATCH = \"/v1/workorders/corrective/onarea/batch/\",\n\n // WORK_ORDER_CORRECTIVE_ON_AREA_ATTACHMENTS = \"/v1/workorders/corrective/onarea/{wo_id}/attachments/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_ATTACHMENTS_ID = \"/v1/workorders/corrective/onarea/{wo_id}/attachments/{id}/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/corrective/onarea/{wo_id}/attachments/{id}/content/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_ATTACHMENTS_BATCH = \"/v1/workorders/corrective/onarea/{wo_id}/attachments/batch/\",\n\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS = \"/v1/workorders/corrective/onarea/comments/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_ID = \"/v1/workorders/corrective/onarea/comments/{id}/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_BATCH = \"/v1/workorders/corrective/onarea/comments/batch/\",\n\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_ATTACHMENTS = \"/v1/workorders/corrective/onarea/comments/{comment_id}/attachments/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_ATTACHMENTS_ID = \"/v1/workorders/corrective/onarea/comments/{comment_id}/attachments/{id}/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/corrective/onarea/comments/{comment_id}/attachments/{id}/content/\",\n // WORK_ORDER_CORRECTIVE_ON_AREA_COMMENTS_ATTACHMENTS_BATCH = \"/v1/workorders/corrective/onarea/comments/{comment_id}/attachments/batch/\",\n\n WORK_ORDER_CORRECTIVE_ON_ITEM = \"/v1/workorders/corrective/onitem/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_ID = \"/v1/workorders/corrective/onitem/{id}/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_BATCH = \"/v1/workorders/corrective/onitem/batch/\",\n\n WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS = \"/v1/workorders/corrective/onitem/{wo_id}/attachments/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID = \"/v1/workorders/corrective/onitem/{wo_id}/attachments/{id}/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/corrective/onitem/{wo_id}/attachments/{id}/content/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_BATCH = \"/v1/workorders/corrective/onitem/{wo_id}/attachments/batch/\",\n\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS = \"/v1/workorders/corrective/onitem/comments/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ID = \"/v1/workorders/corrective/onitem/comments/{id}/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_BATCH = \"/v1/workorders/corrective/onitem/comments/batch/\",\n\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS = \"/v1/workorders/corrective/onitem/comments/{comment_id}/attachments/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID = \"/v1/workorders/corrective/onitem/comments/{comment_id}/attachments/{id}/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/corrective/onitem/comments/{comment_id}/attachments/{id}/content/\",\n WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH = \"/v1/workorders/corrective/onitem/comments/{comment_id}/attachments/batch/\",\n\n // WORK_ORDER_REGULAR_ON_AREA = \"/v1/workorders/regular/onarea/\",\n // WORK_ORDER_REGULAR_ON_AREA_ID = \"/v1/workorders/regular/onarea/{id}/\",\n // WORK_ORDER_REGULAR_ON_AREA_BATCH = \"/v1/workorders/regular/onarea/batch/\",\n\n // WORK_ORDER_REGULAR_ON_AREA_ATTACHMENTS = \"/v1/workorders/regular/onarea/{wo_id}/attachments/\",\n // WORK_ORDER_REGULAR_ON_AREA_ATTACHMENTS_ID = \"/v1/workorders/regular/onarea/{wo_id}/attachments/{id}/\",\n // WORK_ORDER_REGULAR_ON_AREA_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/regular/onarea/{wo_id}/attachments/{id}/content/\",\n // WORK_ORDER_REGULAR_ON_AREA_ATTACHMENTS_BATCH = \"/v1/workorders/regular/onarea/{wo_id}/attachments/batch/\",\n\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS = \"/v1/workorders/regular/onarea/comments/\",\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_ID = \"/v1/workorders/regular/onarea/comments/{id}/\",\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_BATCH = \"/v1/workorders/regular/onarea/comments/batch/\",\n\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_ATTACHMENTS = \"/v1/workorders/regular/onarea/comments/{comment_id}/attachments/\",\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_ATTACHMENTS_ID = \"/v1/workorders/regular/onarea/comments/{comment_id}/attachments/{id}/\",\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/regular/onarea/comments/{comment_id}/attachments/{id}/content/\",\n // WORK_ORDER_REGULAR_ON_AREA_COMMENTS_ATTACHMENTS_BATCH = \"/v1/workorders/regular/onarea/comments/{comment_id}/attachments/batch/\",\n\n WORK_ORDER_REGULAR_ON_ITEM = \"/v1/workorders/regular/onitem/\",\n WORK_ORDER_REGULAR_ON_ITEM_ID = \"/v1/workorders/regular/onitem/{id}/\",\n WORK_ORDER_REGULAR_ON_ITEM_BATCH = \"/v1/workorders/regular/onitem/batch/\",\n\n WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS = \"/v1/workorders/regular/onitem/{wo_id}/attachments/\",\n WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID = \"/v1/workorders/regular/onitem/{wo_id}/attachments/{id}/\",\n WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/regular/onitem/{wo_id}/attachments/{id}/content/\",\n WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_BATCH = \"/v1/workorders/regular/onitem/{wo_id}/attachments/batch/\",\n\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS = \"/v1/workorders/regular/onitem/comments/\",\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ID = \"/v1/workorders/regular/onitem/comments/{id}/\",\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_BATCH = \"/v1/workorders/regular/onitem/comments/batch/\",\n\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS = \"/v1/workorders/regular/onitem/comments/{comment_id}/attachments/\",\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID = \"/v1/workorders/regular/onitem/comments/{comment_id}/attachments/{id}/\",\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT = \"/v1/workorders/regular/onitem/comments/{comment_id}/attachments/{id}/content/\",\n WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH = \"/v1/workorders/regular/onitem/comments/{comment_id}/attachments/batch/\",\n\n //endregion\n}\n","import { Camera, CameraResultType } from \"@src-capacitor/@capacitor/camera\"\nimport { i18n } from \"src/boot/i18n\"\nimport { Log } from \"src/util/classes/log\"\nimport { showWarningNotification } from \"src/util/functions/notifications\"\n\nexport async function uploadImagesInApp() {\n try {\n const hasPermission = await getCameraPermission()\n\n if (!hasPermission) {\n const { t } = i18n.global\n const msg = t(\"notifications.need_camera_permission\")\n showWarningNotification(msg)\n return\n }\n\n const image = await Camera.getPhoto({\n quality: 100,\n allowEditing: false,\n resultType: CameraResultType.Uri,\n })\n const webPath = image.webPath\n\n if (webPath) {\n //Get the file name\n const imageName = webPath.split(\"/\").pop() || new Date().toJSON() + \".\" + image.format\n\n //Get the `File` from the `Photo`\n const urlResponse = await fetch(webPath)\n const blob = await urlResponse.blob()\n const file = new File([blob], imageName, { type: image.format })\n\n return {\n name: imageName,\n data: file,\n blob: blob,\n }\n }\n } catch (error) {\n Log.error({ message: \"Failed to fetch images in android\", error })\n }\n}\n\nasync function getCameraPermission() {\n try {\n let permissions = await Camera.checkPermissions()\n if (permissions.camera !== \"granted\") {\n permissions = await Camera.requestPermissions()\n }\n return permissions.camera === \"granted\"\n } catch (error) {\n Log.error({ message: \"Failed to get camera permission in android\", error })\n }\n}\n","import { FileOpener } from \"@src-capacitor/@capacitor-community/file-opener\"\nimport { Filesystem } from \"@src-capacitor/@capacitor/filesystem\"\nimport axios, { CanceledError } from \"axios\"\nimport { Platform } from \"quasar\"\nimport { csiAPI } from \"src/boot/axios\"\nimport { i18n } from \"src/boot/i18n\"\nimport {\n AttachmentDataCollection,\n AttachmentDocument,\n} from \"src/db/collectionDefinitions/csi/attachment\"\nimport { getDB } from \"src/db/databases\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { CACHE_IMAGES } from \"src/util/constants/configurations\"\nimport {\n ATTACHMENT_ALLOWED_EXTENSIONS,\n ATTACHMENT_IMAGE_EXTENSIONS,\n DIR_ATTACHMENTS,\n IMG_UPLOAD_FAILED_PLACEHOLDER,\n IMG_UPLOAD_IN_PROGRESS_PLACEHOLDER,\n} from \"src/util/constants/files\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { postAttachmentForEntityBatch } from \"src/util/functions/entityData\"\nimport { showBatchErrors, showErrorNotification } from \"src/util/functions/notifications\"\nimport { showImageView } from \"src/util/functions/overlays\"\nimport { deleteIssueOnItemAttachment, getIssuesOnItem } from \"src/util/http/csi/issues\"\nimport { deleteItemAttachment, getItem } from \"src/util/http/csi/items\"\nimport {\n deleteWorkOrderCorrectiveItemAttachment,\n deleteWorkOrderRegularItemAttachment,\n getWorkOrderCorrectiveItem,\n getWorkOrderRegularItem,\n} from \"src/util/http/csi/workOrders\"\nimport { ImageGalleryItem, ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport {\n Attachment,\n AttachmentCard,\n AttachmentContext,\n AttachmentData,\n AttachmentUpload,\n} from \"src/util/types/dataModels/attachment\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { BatchErrors, ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { IssueTableData } from \"src/util/types/dataModels/issue\"\nimport {\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_GIS,\n PERMISSION_ISSUES,\n PERMISSION_ITEMS,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_WORK_ORDERS,\n} from \"src/util/types/dataModels/user\"\n\n/**\n * Simple check to see if the file is an image. It gets the file extension and compares it to allowed values.\n *\n * @example png\n * @param attachment\n */\nexport function attachmentIsImage(attachment: Attachment): boolean {\n return ATTACHMENT_IMAGE_EXTENSIONS.includes(attachment.extension)\n}\n\n/**\n * Check whether the file type is allowed for uploading\n *\n * @param extension File extension\n */\nexport function fileTypeIsAllowed(extension: string) {\n return ATTACHMENT_ALLOWED_EXTENSIONS.includes(extension)\n}\n\n/**\n * Splits the attachments for an entity into images and non images, and inserts them into the provided arrays.\n *\n * **CAUTION:** This mutates the original arrays provided.\n * @param entity\n * @param imageList\n * @param attachmentList\n */\nexport async function splitAttachments(\n entity: Entity,\n imageList: Attachment[],\n attachmentList: Attachment[]\n) {\n try {\n const ids = entity.attachments\n\n if (ids && ids.length > 0) {\n const attachments = await getAttachments(ids)\n\n if (attachments.length > 0) {\n for (const attachment of attachments) {\n if (attachmentIsImage(attachment)) {\n imageList.push(attachment)\n } else {\n attachmentList.push(attachment)\n }\n }\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching the Attachment data\",\n error,\n })\n }\n}\n\nexport async function getAttachments(ids: string[]) {\n const db = await getDB()\n const cacheStore = useCacheStore()\n const attachments: Attachment[] = []\n\n for (const id of ids) {\n const attachmentInCache = cacheStore.attachment.get(id)\n if (attachmentInCache) {\n attachments.push(attachmentInCache)\n } else {\n const attachmentInDb = await db.attachment.findOne(id).exec()\n if (attachmentInDb) {\n const attachment = attachmentInDb.toMutableJSON()\n attachments.push(attachment)\n cacheStore.attachment.set(attachment.id, attachment)\n }\n }\n }\n return attachments\n}\n\nexport async function getAttachmentData(attachmentID: string): Promise {\n try {\n const cacheStore = useCacheStore()\n const attachmentInCache = cacheStore.attachment.get(attachmentID)\n\n if (attachmentInCache) {\n return attachmentInCache\n } else {\n const db = await getDB()\n const attachmentInDB = await db.attachment.findOne(attachmentID).exec()\n\n if (attachmentInDB) {\n const mutableAttachment = attachmentInDB.toMutableJSON()\n cacheStore.attachment.set(mutableAttachment.id, mutableAttachment)\n return mutableAttachment\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Item Attachment data\",\n error,\n })\n }\n}\n\nexport async function getAttachmentContent(\n doc: Attachment,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n switch (doc.state) {\n // No point of fetching attachment content if the attachment is not in 'ready' state\n case 2: {\n return await getReadyAttachmentContent(doc, entity, entityID)\n }\n case -1: {\n return IMG_UPLOAD_FAILED_PLACEHOLDER\n }\n case 1:\n case 0: {\n return IMG_UPLOAD_IN_PROGRESS_PLACEHOLDER\n }\n // Default is the placeholder image set in the SfxCard.vue\n }\n}\n\nasync function getReadyAttachmentContent(\n doc: Attachment,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n const cacheStore = useCacheStore()\n const attachmentInCache = cacheStore.attachment_data.get(doc.id)\n const db = await getDB()\n let content: AttachmentData | null\n\n if (attachmentInCache) {\n content = attachmentInCache\n } else {\n content = await db.attachment_data.findOne(doc.id).exec()\n if (content) cacheStore.attachment_data.set(content?.id, content)\n }\n\n if (process.env.MODE === \"capacitor\") {\n return getAttachmentContentCapacitor(doc, content, entity, entityID)\n } else {\n const blobData = await getAttachmentContentWeb(doc, content, entity, entityID)\n if (blobData) return URL.createObjectURL(blobData)\n }\n}\n\nasync function getAttachmentContentCapacitor(\n doc: Attachment,\n content: AttachmentData | null,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n const { Capacitor } = await import(\"@src-capacitor/@capacitor/core\")\n const db = await getDB()\n\n if (content?.path) {\n return Capacitor.convertFileSrc(content.path)\n }\n\n const updatedDoc = await saveAttachmentData(doc, db.attachment_data, entity, entityID)\n if (updatedDoc) return Capacitor.convertFileSrc(updatedDoc.path)\n}\n\nasync function getAttachmentContentWeb(\n doc: Attachment,\n content: AttachmentData | null,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n const db = await getDB()\n\n const cache = await caches.open(CACHE_IMAGES)\n\n if (content?.path) {\n const foundImage = await cache.match(content.path)\n if (foundImage) {\n return await foundImage.blob()\n }\n }\n\n const updatedDoc = await saveAttachmentData(doc, db.attachment_data, entity, entityID)\n if (updatedDoc) {\n const foundImage = await cache.match(updatedDoc.path)\n if (foundImage) {\n return await foundImage.blob()\n }\n }\n}\n\n/**\n * Returns a list of AttachmentUpload type images for a given list of Attachment type images\n *\n * Note: This function only works in web (Manager mode)\n *\n * @param docs\n * @param entity\n * @param entityID\n */\nexport async function mapAttachmentToAttachmentUpload(\n docs: Attachment[],\n entity: AttachmentContext,\n entityID: string\n): Promise {\n const cacheStore = useCacheStore()\n const db = await getDB()\n const images: AttachmentUpload[] = []\n\n for (const doc of docs) {\n const attachmentInCache = cacheStore.attachment_data.get(doc.id)\n let content: AttachmentData | null\n\n if (attachmentInCache) {\n content = attachmentInCache\n } else {\n content = await db.attachment_data.findOne(doc.id).exec()\n if (content) cacheStore.attachment_data.set(content?.id, content)\n }\n\n const blob = await getAttachmentContentWeb(doc, content, entity, entityID)\n\n if (blob) {\n const image: AttachmentUpload = {\n name: doc.name,\n data: new File([blob], doc.name, { type: blob?.type }),\n }\n images.push(image)\n }\n }\n return images\n}\n\nasync function saveAttachmentData(\n doc: Attachment,\n collection: AttachmentDataCollection,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n try {\n const { getAttachmentContentForEntity } = await import(\"src/util/functions/entityData\")\n\n const fileData = await getAttachmentContentForEntity(entity, entityID, doc.id)\n\n if (!fileData) return\n\n const type = fileData.type\n\n if (process.env.MODE === \"capacitor\") {\n const { Directory } = await import(\n \"@src-capacitor/@capacitor/filesystem/dist/esm/definitions\"\n )\n const write_blob = await import(\"@src-capacitor/capacitor-blob-writer\")\n const path = constructAttachmentFolderPath(doc)\n\n const fileDir = await write_blob.default({\n path: path,\n blob: fileData,\n directory: Directory.Data,\n recursive: true,\n })\n\n return await collection.upsert({ id: doc.id, type, path: fileDir })\n } else {\n const path = getWebAttachmentURL(doc.id)\n const cache = await caches.open(CACHE_IMAGES)\n await cache.put(path, new Response(fileData))\n return await collection.upsert({ id: doc.id, type, path })\n }\n } catch (error) {\n if (error instanceof CanceledError) return\n\n Log.error({ message: \"Could not download file content\", error, data: { fileName: doc.name } })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nasync function attachmentExists(\n doc: AttachmentDocument,\n mainFolder = DIR_ATTACHMENTS\n): Promise {\n try {\n const { Filesystem } = await import(\"@src-capacitor/@capacitor/filesystem\")\n const { Directory } = await import(\"@src-capacitor/@capacitor/filesystem/dist/esm/definitions\")\n\n const attachmentPath = constructAttachmentFolderPath(doc, mainFolder)\n\n const { uri } = await Filesystem.stat({ path: attachmentPath, directory: Directory.Data })\n return uri\n } catch (error) {\n if (error instanceof Error && error?.message === \"File does not exist\") {\n return false\n } else {\n throw error\n }\n }\n}\n\nexport function getWebAttachmentURL(attachmentId: string) {\n const base = csiAPI.defaults.baseURL\n const url = CSIurl.ATTACHMENTS_ID_CONTENT.replace(\"{id}\", attachmentId)\n return base + url\n}\n\nexport function constructAttachmentFolderPath(\n attachment: AttachmentDocument | Attachment,\n mainFolder = DIR_ATTACHMENTS\n) {\n // Any OS and disk format would struggle handling more than 10k files in a directory.\n // Android 11+ has changes to their system and if we have more than 3k files, it would struggle a lot.\n // This is why we split this into several folders, to lower the # of files per dir.\n // All the files should be distributed equally amongst the folders.\n // The folders should be max 256 for the first and second prefixes.\n\n const authStore = useAuthStore()\n const currentWorkspaceUUID = authStore.selectedWorkspace?.id\n\n const firstPrefix = attachment.id.slice(0, 2)\n const secondPrefix = attachment.id.slice(0, 4)\n\n // Split the files per workspace, so we can easily handle them\n const csiDir = currentWorkspaceUUID ? `${mainFolder}/${currentWorkspaceUUID}` : mainFolder\n\n return `${csiDir}/${firstPrefix}/${secondPrefix}/${attachment.id}.${attachment.extension}`\n}\n\n/**\n * Save newly added attachments in the internal app storage\n *\n * @param attachmentDocument\n * @param fileData\n */\nexport async function copyNewAttachmentsToAppFolder(\n attachmentDocument: AttachmentDocument[],\n fileData: Blob[]\n) {\n try {\n //Should not happen, but just in case\n if (attachmentDocument.length !== fileData.length) return\n\n const { Directory } = await import(\"@src-capacitor/@capacitor/filesystem/dist/esm/definitions\")\n const write_blob = await import(\"@src-capacitor/capacitor-blob-writer\")\n let index = 0\n\n for (const attachment of attachmentDocument) {\n const path = constructAttachmentFolderPath(attachment)\n\n await write_blob.default({\n path: path,\n blob: fileData[index],\n directory: Directory.Data,\n recursive: true,\n })\n index++\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while copying new attachments to app folder\", error })\n }\n}\n\nexport async function uploadImages(\n entity: AttachmentContext,\n entityId: string,\n uploadedImages: AttachmentUpload[] | undefined\n): Promise {\n if (uploadedImages === undefined || uploadedImages.length === 0) return\n\n try {\n const imagesOnServer = await postAttachmentForEntityBatch(entity, entityId, uploadedImages)\n\n if (!imagesOnServer) return\n\n const successfulImages = removeBatchErrorsAndPrint(partitionBatchErrors(imagesOnServer))\n\n const db = await getDB()\n await db.attachment.bulkInsert(successfulImages)\n\n return successfulImages.map((image) => image.id)\n } catch (error) {\n const { t } = i18n.global\n const message = t(\"performedWork.error_saving_images\")\n showErrorNotification(message)\n\n Log.error({\n message: \"An error occurred while trying to save the images\",\n error,\n })\n }\n}\n\nexport async function getImageAttachmentsFromAttachmentIds(idList: string[]) {\n try {\n const attachments = await getAttachments(idList)\n const imageList: Attachment[] = []\n\n if (attachments.length > 0) {\n for (const attachment of attachments) {\n if (attachmentIsImage(attachment)) {\n imageList.push(attachment)\n }\n }\n }\n return imageList\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching the Attachment data\",\n error,\n })\n\n throw error\n }\n}\n\nexport async function getImages(\n attachments: Attachment[],\n entity: AttachmentContext,\n entityID: string\n) {\n if (attachments.length === 0) return []\n\n try {\n return await Promise.all(\n attachments\n .sort((a, b) => a.created_dt.localeCompare(b.created_dt))\n .map<\n Promise\n >(async (doc) => await getAttachmentCardData(doc, entity, entityID))\n )\n } catch (error) {\n Log.error({\n message: \"An error occurred while getting the image data.\",\n error,\n })\n\n throw error\n }\n}\n\nexport async function getImageViewerItems(\n entity: AttachmentContext,\n entityId: string,\n attachments?: Attachment[]\n): Promise {\n if (!attachments) return []\n\n try {\n return await Promise.all(\n attachments\n .sort((a, b) => a.created_dt.localeCompare(b.created_dt))\n .map<\n Promise\n >(async (doc) => await getAttachmentCardData(doc, entity, entityId))\n )\n } catch (error) {\n Log.error({\n message: \"An error occurred while getting the image viewer items data.\",\n error,\n })\n }\n}\n\nexport async function getAttachmentCardData(\n attachment: Attachment,\n entity: AttachmentContext,\n entityID: string\n): Promise {\n return {\n attachmentData: attachment,\n src: (await getAttachmentContent(attachment, entity, entityID)) || \"\",\n }\n}\n\nexport async function getFilesystemPermission() {\n try {\n let permissions = await Filesystem.checkPermissions()\n if (permissions.publicStorage !== \"granted\") {\n permissions = await Filesystem.requestPermissions()\n }\n return permissions.publicStorage === \"granted\"\n } catch (error) {\n Log.error({ message: \"Failed to get the file system permission in android\", error })\n }\n}\n\nexport async function getEntityCardImage(\n attachmentIdList: string[],\n entity: AttachmentContext,\n entityID: string\n) {\n try {\n const attachments = await getAttachments(attachmentIdList)\n\n if (attachments.length > 0) {\n for (const attachment of attachments) {\n if (attachmentIsImage(attachment)) {\n return await getAttachmentContent(attachment, entity, entityID)\n }\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching the Entity image data\",\n error,\n })\n }\n}\n\nexport async function getFirstImageAttachment(attachmentIdList: string[]) {\n try {\n const attachments = await getAttachments(attachmentIdList)\n\n if (attachments.length > 0) {\n for (const attachment of attachments) {\n if (attachmentIsImage(attachment)) {\n return attachment\n }\n }\n }\n } catch (error) {\n if (error instanceof CanceledError) return\n\n Log.error({\n message: \"An error occurred while fetching the first image attachment\",\n error,\n })\n }\n}\n\n/**\n * Return an image attachment for a given image attachmentId\n *\n * @param attachmentId image attachmentId\n */\nexport async function getImageAttachment(attachmentId: string): Promise {\n try {\n const attachment = await getAttachmentData(attachmentId)\n\n if (attachment) return attachment\n } catch (error) {\n if (error instanceof CanceledError) return\n\n Log.error({\n message: \"An error occurred while fetching the image attachment\",\n error,\n })\n }\n}\n\n/**\n * The selected attachment will be handled based on the type and/or environment\n * if (image) -> shown in the image view dialog\n * else if (other file types and capacitor env) -> shown in the FileOpener in capacitor\n * else (in a web browser) -> download the file\n *\n * @param attachment\n * @param entity\n * @param entityID\n */\nexport async function showOrDownloadAttachment(\n attachment: Attachment,\n entity: AttachmentContext,\n entityID: string\n) {\n try {\n const attachmentCard = await getAttachmentCardData(attachment, entity, entityID)\n\n if (attachmentIsImage(attachment)) {\n showImageView(attachmentCard, [attachmentCard])\n } else if (Platform.is.capacitor) {\n const absolutePath = new URL(attachmentCard?.src).pathname\n const filePath = absolutePath.split(\"_capacitor_file_\")[1]\n\n return await FileOpener.open({ filePath: filePath })\n } else {\n //Download the file in the browser\n return axios\n .get(attachmentCard?.src, { responseType: \"blob\" })\n .then((response: { data: BlobPart }) => {\n const blob = new Blob([response.data])\n const link = document.createElement(\"a\")\n link.href = URL.createObjectURL(blob)\n link.download = attachmentCard.attachmentData.name\n link.click()\n URL.revokeObjectURL(link.href)\n })\n }\n } catch (error) {\n Log.error({ message: \"Failed to fetch the file in SfxCardAttachment\", error })\n }\n}\n\nexport function partitionBatchErrors(\n list: ObjectList\n): [SuccessEntity[], BatchErrors[]] {\n return list.results.reduce(\n (array, element) => {\n \"error\" in element ? array[1].push(element) : array[0].push(element)\n return array\n },\n [[], []] as [SuccessEntity[], BatchErrors[]]\n )\n}\n\nexport function removeBatchErrorsAndPrint(\n list: [SuccessEntity[], BatchErrors[]]\n): SuccessEntity[] {\n if (list[1].length > 0) {\n showBatchErrors(list[1], list[0].length > 0)\n }\n return list[0]\n}\n\n/**\n * Returns the correct attachment context based on the provided entity.\n * Returns null in case it cannot determine the context.\n *\n * @param entityPage\n * @param entity\n */\nexport function getAttachmentContextFromEntityPage(\n entityPage: EntityPages,\n entity: Record\n): AttachmentContext | null {\n // TODO: Think of some better way to deal with this in the SfxTable attachment content fetch. This is just sad.\n switch (entityPage) {\n case \"area\":\n return null\n case \"attachment\":\n return null\n case \"workspace\":\n return null\n case \"layout\":\n return null\n case \"work_order\":\n // TODO: 😭\n // Work orders don't have image attachments, they have graphs\n return null\n case \"zone\":\n return null\n case \"item\":\n return \"item\"\n case \"model\":\n return \"item_model\"\n case \"location\":\n return null\n case \"issue\":\n return \"actionable_item\" in (entity as IssueTableData).issueData ? \"issue_item\" : \"issue_area\"\n case \"performed_work\": {\n if (!(\"isCorrectiveWork\" in entity)) {\n throw new Error(\"Schema for performed work is incorrect\")\n }\n\n if (entity.isCorrectiveWork) {\n return \"corrective_work_item\"\n } else {\n return \"performedWorkOnItemData\" in entity ? \"regular_work_item\" : \"regular_work_area\"\n }\n }\n }\n}\n\n/**\n * Returns the attachment id list for an entity\n *\n * @param entity\n * @param entityId\n */\nexport async function getEntityAttachmentIdList(\n entity: AttachmentContext,\n entityId: string\n): Promise {\n try {\n const db = await getDB()\n\n switch (entity) {\n case \"item\": {\n const itemInDb = await db.item.findOne(entityId).exec()\n return itemInDb?.attachments\n }\n\n case \"item_model\": {\n const itemModelInDb = await db.item_model.findOne(entityId).exec()\n return itemModelInDb?.attachments\n }\n\n case \"issue_item\": {\n const issueInDb = await db.issues_on_item.findOne(entityId).exec()\n return issueInDb?.attachments\n }\n\n case \"issue_item_comment\": {\n const issueItemCommentInDb = await db.issue_on_item_comments.findOne(entityId).exec()\n return issueItemCommentInDb?.attachments\n }\n\n case \"corrective_work_item\": {\n const correctiveWorkItemInDb = await db.corrective_work_on_item.findOne(entityId).exec()\n return correctiveWorkItemInDb?.attachments\n }\n\n case \"regular_work_item\": {\n const regularWorkItemInDb = await db.regular_work_on_item.findOne(entityId).exec()\n return regularWorkItemInDb?.attachments\n }\n\n case \"work_order_corrective_item\": {\n const workOrderCorrectiveItemInDb = await db.work_order_corrective_item\n .findOne(entityId)\n .exec()\n return workOrderCorrectiveItemInDb?.attachments\n }\n\n case \"work_order_regular_item\": {\n const workOrderRegularItemInDb = await db.work_order_regular_item.findOne(entityId).exec()\n return workOrderRegularItemInDb?.attachments\n }\n\n case \"work_order_corrective_item_comment\": {\n const workOrderCorrectiveItemCommentInDb = await db.work_order_corrective_comments\n .findOne(entityId)\n .exec()\n return workOrderCorrectiveItemCommentInDb?.attachments\n }\n\n case \"work_order_regular_item_comment\": {\n const workOrderRegularItemCommentInDb = await db.work_order_regular_comments\n .findOne(entityId)\n .exec()\n return workOrderRegularItemCommentInDb?.attachments\n }\n\n case \"corrective_work_area\":\n case \"regular_work_area\":\n case \"issue_area\":\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"area\":\n case \"zone\":\n return\n }\n } catch (error) {\n Log.error({ message: \"Failed to get the entity attachment id list\", error })\n }\n}\n\n/**\n * Update the entity in the UI\n *\n * @param entity\n * @param entityId\n */\nexport async function updateEntityInUI(entity: AttachmentContext, entityId: string) {\n try {\n const db = await getDB()\n\n switch (entity) {\n case \"item\": {\n const updatedItemInServer = await getItem({}, entityId)\n await db.item.upsert(updatedItemInServer)\n\n break\n }\n case \"issue_item\": {\n const updatedIssueInServer = await getIssuesOnItem({}, entityId)\n await db.issues_on_item.upsert(updatedIssueInServer)\n\n break\n }\n case \"work_order_corrective_item\": {\n const updatedWorkOrderInServer = await getWorkOrderCorrectiveItem({}, entityId)\n await db.work_order_corrective_item.upsert(updatedWorkOrderInServer)\n\n break\n }\n case \"work_order_regular_item\": {\n const updatedWorkOrderInServer = await getWorkOrderRegularItem({}, entityId)\n await db.work_order_regular_item.upsert(updatedWorkOrderInServer)\n\n break\n }\n }\n } catch (error) {\n Log.error({ message: \"Failed to update the entity attachment id list\", error })\n }\n}\n\n/**\n * Delete the attachment IDs from the given entity and return the response statuses from axios\n *\n * @param attachmentIds\n * @param entity\n * @param entityId\n */\nexport async function deleteEntityAttachments(\n attachmentIds: string[],\n entity: AttachmentContext,\n entityId: string\n) {\n try {\n // Note: There is no need to handle the comments of entities, as they cannot be edited\n\n const deleteAPICalls = []\n\n switch (entity) {\n case \"item\": {\n for (const attachmentId of attachmentIds) {\n deleteAPICalls.push(deleteItemAttachment({}, entityId, attachmentId))\n }\n break\n }\n\n case \"issue_item\": {\n for (const attachmentId of attachmentIds) {\n deleteAPICalls.push(deleteIssueOnItemAttachment({}, entityId, attachmentId))\n }\n break\n }\n\n case \"work_order_corrective_item\": {\n for (const attachmentId of attachmentIds) {\n deleteAPICalls.push(deleteWorkOrderCorrectiveItemAttachment({}, entityId, attachmentId))\n }\n break\n }\n\n case \"work_order_regular_item\": {\n for (const attachmentId of attachmentIds) {\n deleteAPICalls.push(deleteWorkOrderRegularItemAttachment({}, entityId, attachmentId))\n }\n break\n }\n }\n\n const APIResponses = await Promise.all(deleteAPICalls)\n await updateEntityInUI(entity, entityId)\n\n return APIResponses.map((response, index) => {\n return { attachmentId: attachmentIds[index], status: response.status }\n })\n } catch (error) {\n Log.error({ message: \"Failed to delete the attachments from the entity\", error })\n }\n}\n\nexport function canUpdateEntityAttachments(entity: AttachmentContext): boolean {\n const userStore = useUserStore()\n let canEdit = true\n\n switch (entity) {\n case \"item\":\n case \"item_model\": {\n canEdit = userStore.checkUserPermission(PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n break\n }\n\n case \"issue_item\":\n case \"issue_area\":\n case \"issue_item_comment\": {\n canEdit = userStore.checkUserPermission(PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n break\n }\n\n case \"corrective_work_area\":\n case \"corrective_work_item\":\n case \"corrective_work_item_comment\":\n case \"regular_work_area\":\n case \"regular_work_item\":\n case \"regular_work_item_comment\": {\n canEdit = userStore.checkUserPermission(PERMISSION_PERFORMED_WORK, PERMISSION_ACCESS_UPDATE)\n break\n }\n\n case \"area\":\n case \"zone\": {\n canEdit = userStore.checkUserPermission(PERMISSION_GIS, PERMISSION_ACCESS_UPDATE)\n break\n }\n\n case \"work_order_corrective_item\":\n case \"work_order_corrective_area\":\n case \"work_order_corrective_item_comment\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_item\":\n case \"work_order_regular_area\":\n case \"work_order_regular_item_comment\":\n case \"work_order_regular_area_comment\": {\n canEdit = userStore.checkUserPermission(PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_UPDATE)\n break\n }\n }\n\n return canEdit\n}\n","import { useCacheStore } from \"src/stores/cacheStore\"\nimport {\n AttributeBase,\n AttributeChar,\n AttributeNumeric,\n AttributeSelect,\n AttributeSelectOptions,\n AttributeTemporal,\n} from \"src/util/types/dataModels/attribute\"\n\nexport function isAttributeChar(attribute: AttributeBase): attribute is AttributeChar {\n return (\n (attribute as AttributeChar).autocomplete !== undefined &&\n (attribute as AttributeChar).allow_blank !== undefined\n )\n}\n\nexport function isAttributeNumeric(attribute: AttributeBase): attribute is AttributeNumeric {\n return (attribute as AttributeNumeric).decimals !== undefined\n}\n\nexport function isAttributeTemporal(attribute: AttributeBase): attribute is AttributeTemporal {\n return (\n (attribute as AttributeTemporal).enable_date !== undefined &&\n (attribute as AttributeTemporal).enable_time !== undefined\n )\n}\n\nexport function isAttributeSelect(attribute: AttributeBase): attribute is AttributeSelect {\n return (attribute as AttributeSelect).allow_multiple_selections !== undefined\n}\n\nexport function isAttributeSelectOption(attribute: unknown): attribute is AttributeSelectOptions {\n return (attribute as AttributeSelectOptions).value !== undefined\n}\n\nexport function attributeSelectToString(options: string[]) {\n if (options.length === 0) return null\n\n const values = []\n\n const cacheStore = useCacheStore()\n\n for (const opt of options) {\n const cachedOption = cacheStore.attribute_select_options.get(opt)\n if (cachedOption) values.push(cachedOption.value)\n }\n\n return values.join(\", \")\n}\n\nexport function attributeTemporalToString(date: string | null, time: string | null): string | null {\n if (date && time) {\n return date + \" \" + time\n } else if (date) {\n return date\n } else if (time) {\n return time\n } else {\n return null\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-error--title\" }\nconst _hoisted_2 = { class: \"text-bold\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-italic\"\n}\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { computed } from \"vue\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogAuthenticationError',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\nconst configurationStore = useConfigurationStore()\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\n//endregion\n\n//region Functions\n\nasync function onDialogClose() {\n onDialogOK()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-center\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogAuthentication.title\")), 1),\n _createVNode(_component_q_card_section, { class: \"text-error--content text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxDialogAuthentication.text1\")), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxDialogAuthentication.text2\")), 1),\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogAuthentication.text3\")) + \" \", 1),\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).STATUS_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogAuthentication.here\")), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogAuthentication.text4\")) + \" \", 1),\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).SUPPORT_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogAuthentication.contact_support\", { support: _unref(LABELS).SUPPORT })) + \". \", 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogAuthentication.text5\")), 1),\n (easterEggsEnabled.value)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxDialogAuthentication.quote\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n label: _ctx.$t('sfxButtons.btn_understood'),\n class: \"col-grow\",\n onClick: onDialogClose\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogAuthenticationError.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogAuthenticationError.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogNoWorkspaces',\n props: {\n cancelButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_proceed\"))\n },\n },\n\n confirmButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_log_me_out\"))\n },\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createVNode(SfxEmptyPage, {\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).WORKSPACE_NOT_FOUND),\n error: \"\",\n \"icon-color\": \"error\"\n }, null, 8, [\"missingEntity\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"row justify-evenly q-pt-none q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"col q-mr-sm\",\n onClick: _unref(onDialogCancel),\n label: props.cancelButtonText\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n class: \"col q-ml-sm\",\n onClick: _unref(onDialogOK),\n label: props.confirmButtonText\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogNoWorkspaces.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogNoWorkspaces.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-error--title\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"text-italic\"\n}\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { computed } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogOffline',\n props: {\n confirmButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_got_it\"))\n },\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\nconst configurationStore = useConfigurationStore()\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-center\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogOffline.title\")), 1),\n _createVNode(_component_q_card_section, { class: \"text-error--content text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxDialogOffline.text1\")), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxDialogOffline.text2\")), 1),\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogOffline.text3\")) + \" \", 1),\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).SUPPORT_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogOffline.contact_support\", { support: _unref(LABELS).SUPPORT })), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n (easterEggsEnabled.value)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogOffline.quote\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: props.confirmButtonText,\n class: \"col-grow\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogOffline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogOffline.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-ma-none text-error--title\" }\n\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { computed } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttpBase',\n props: {\n title: {\n type: String,\n required: true,\n },\n\n imgSrc: {\n type: String,\n required: true,\n },\n\n httpCode: {\n type: String,\n required: true,\n },\n\n btnText: {\n type: String,\n },\n},\n emits: [\"click\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst configurationStore = useConfigurationStore()\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\nconst { t } = useI18n()\n\nconst buttonLabel = computed(() => props.btnText || t(\"sfxButtons.btn_close\"))\nconst cardStyle = { width: \"400px\" }\n\n//endregion\n\n//region Functions\n\nfunction btnClick() {\n emit(\"click\")\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n\n return (_openBlock(), _createBlock(_component_q_card, {\n class: \"q-dialog-plugin text-quote-text text-center text-body1\",\n style: cardStyle\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-center\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_1, _toDisplayString(props.title), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-mt-md\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_img, {\n src: props.imgSrc,\n height: \"150px\",\n fit: \"contain\"\n }, null, 8, [\"src\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-mt-md\" }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"body\")\n ]),\n _: 3\n }),\n _createVNode(_component_q_card_section, { class: \"text-bold q-mt-md\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, \" HTTP \" + _toDisplayString(props.httpCode), 1)\n ]),\n _: 1\n }),\n (easterEggsEnabled.value)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: \"text-italic text-body2 q-mt-md\"\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"quote\")\n ]),\n _: 3\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n label: buttonLabel.value,\n class: \"col-grow\",\n onClick: btnClick\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 3\n }))\n}\n}\n\n})","import script from \"./SfxDialogHttpBase.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttpBase.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCard,QDialog,QCardSection,QImg,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { IMG_MASCOT_SURPRISED } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp400',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_400'),\n \"http-code\": \"400\",\n \"img-src\": _unref(IMG_MASCOT_SURPRISED),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_400_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_400_2\")), 1),\n _createVNode(_component_i18n_t, {\n keypath: \"sfxDialogHttp.body_400_3\",\n tag: \"div\"\n }, {\n url: _withCtx(() => [\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).SUPPORT_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.url_support\")), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _: 1\n })\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_400\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp400.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp400.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { IMG_MASCOT_STOP } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp401',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_401'),\n \"http-code\": \"401\",\n \"img-src\": _unref(IMG_MASCOT_STOP),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_401_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_401_2\")), 1),\n _createVNode(_component_i18n_t, {\n keypath: \"sfxDialogHttp.body_401_3\",\n tag: \"div\",\n class: \"text-bold\"\n }, {\n url: _withCtx(() => [\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).SUPPORT_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.url_support\")), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _: 1\n })\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_401\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp401.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp401.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\nconst _hoisted_3 = { class: \"q-pb-md\" }\nconst _hoisted_4 = { class: \"text-bold\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport { IMG_MASCOT_STOP } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp403',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_403'),\n \"http-code\": \"403\",\n \"img-src\": _unref(IMG_MASCOT_STOP),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_403_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_403_2\")), 1),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_403_3\")), 1),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_403_4\")), 1)\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_403\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp403.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp403.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport { IMG_MASCOT_SHRUG } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp404',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_404'),\n \"http-code\": \"404\",\n \"img-src\": _unref(IMG_MASCOT_SHRUG),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_404_1\")), 1),\n _createElementVNode(\"div\", null, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_404_2\")), 1)\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_404\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp404.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp404.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { IMG_MASCOT_TIME } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp408',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_408'),\n \"http-code\": \"408\",\n \"img-src\": _unref(IMG_MASCOT_TIME),\n \"btn-text\": _ctx.$t('sfxButtons.btn_try_again'),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_408_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_408_2\")), 1),\n _createVNode(_component_i18n_t, {\n keypath: \"sfxDialogHttp.body_408_3\",\n tag: \"div\"\n }, {\n url: _withCtx(() => [\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).STATUS_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.url_here\")), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _: 1\n })\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_408\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"btn-text\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp408.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp408.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { IMG_MASCOT_UNPLUG } from \"src/util/constants/files\"\n\n//region Variables\n\nconst link = \"\"\n\n//endregion\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp500',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//TODO: ADD ME\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_500'),\n \"http-code\": \"500\",\n \"img-src\": _unref(IMG_MASCOT_UNPLUG),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_500_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_500_2\")), 1),\n _createVNode(_component_i18n_t, {\n keypath: \"sfxDialogHttp.body_500_3\",\n tag: \"div\",\n class: \"text-bold\"\n }, {\n url: _withCtx(() => [\n _createVNode(SfxExternal, { href: link }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.url_here\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_500\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp500.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp500.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport { IMG_MASCOT_TECHNICIAN } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp501',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_501'),\n \"http-code\": \"501\",\n \"img-src\": _unref(IMG_MASCOT_TECHNICIAN),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_501_1\")), 1),\n _createElementVNode(\"div\", null, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_501_2\")), 1)\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_501\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp501.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp501.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport { IMG_MASCOT_UNPLUG } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp502',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_502'),\n \"http-code\": \"502\",\n \"img-src\": _unref(IMG_MASCOT_UNPLUG),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_502_1\")), 1),\n _createElementVNode(\"div\", null, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_502_2\")), 1)\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_502\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp502.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp502.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\nconst _hoisted_2 = { class: \"q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport SfxExternal from \"src/components/special/SfxExternal.vue\"\nimport { COMMON_MESSAGES } from \"src/util/constants/commonMessages\"\nimport { IMG_MASCOT_UNPLUG } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp503',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_503'),\n \"http-code\": \"503\",\n \"img-src\": _unref(IMG_MASCOT_UNPLUG),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_503_1\")), 1),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_503_2\")), 1),\n _createVNode(_component_i18n_t, {\n keypath: \"sfxDialogHttp.body_503_3\",\n tag: \"div\",\n class: \"text-bold\"\n }, {\n url: _withCtx(() => [\n _createVNode(SfxExternal, {\n href: _unref(COMMON_MESSAGES).STATUS_LINK\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.url_here\")), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]),\n _: 1\n })\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_503\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp503.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp503.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxDialogHttpBase from \"src/components/dialogs/http/SfxDialogHttpBase.vue\"\nimport { IMG_MASCOT_TIME } from \"src/util/constants/files\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogHttp504',\n setup(__props) {\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxDialogHttpBase, {\n title: _ctx.$t('sfxDialogHttp.title_504'),\n \"http-code\": \"504\",\n \"img-src\": _unref(IMG_MASCOT_TIME),\n onClick: _unref(onDialogOK)\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_504_1\")), 1),\n _createElementVNode(\"div\", null, _toDisplayString(_ctx.$t(\"sfxDialogHttp.body_504_2\")), 1)\n ]),\n quote: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogHttp.quote_504\")), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"img-src\", \"onClick\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogHttp504.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogHttp504.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardAttachment from \"src/components/card/SfxCardAttachment.vue\"\nimport { Attachment } from \"src/util/types/dataModels/attachment\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListAttachmentDelete',\n props: {\n entity: {\n type: String,\n required: true,\n },\n\n attachments: {\n type: Array as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst title = t(\"sfxDialogListAttachmentDelete.title\")\nconst body_warning = t(\"sfxDialogListAttachmentDelete.body_warning\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnRemove = t(\"sfxButtons.btn_remove\")\n\nconst body_description = computed(() =>\n props.attachments?.length === 1\n ? t(\"sfxDialogListAttachmentDelete.body_description\", { entity: props.entity }, 1)\n : t(\"sfxDialogListAttachmentDelete.body_description\", { entity: props.entity }, 2)\n)\n\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-border-warning\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 text-negative q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: body_description.value }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-h5 text-negative q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(body_warning)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-manager-elements q-pb-none\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.attachments, (attachment, index) => {\n return (_openBlock(), _createBlock(SfxCardAttachment, {\n key: index,\n attachment: attachment,\n entity: props.entity\n }, null, 8, [\"attachment\", \"entity\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(btnRemove),\n class: \"col bg-negative\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListAttachmentDelete.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListAttachmentDelete.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxCardAttachment from \"src/components/card/SfxCardAttachment.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport SfxSearchBar from \"src/components/search/SfxSearchBar.vue\"\nimport SfxSkeleton from \"src/components/special/SfxSkeleton.vue\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { SFX_CARD_ATTACHMENT_HEIGHT } from \"src/util/constants/configurations\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { ContextAction, MissingEntityType } from \"src/util/enums/entityType\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { SearchMap } from \"src/util/search/searchMap\"\nimport { Attachment } from \"src/util/types/dataModels/attachment\"\nimport { computed, onMounted, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListAttachmentSelect',\n props: {\n entity: {\n type: String,\n required: true,\n },\n\n entityDesignation: {\n type: String,\n required: true,\n },\n\n attachmentList: {\n type: Array as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst searchStore = useSearchStore()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst subtitle = t(\"sfxDialogAddAttachments.subtitle\", { entity: props.entity })\n\nconst searchMap = computed(() => {\n return new SearchMap(\n (attachment) => [{ term: attachment.name, value: attachment }],\n {},\n props.attachmentList\n )\n})\n\nconst filteredAttachments = computed(() => {\n return searchStore.term\n ? searchMap.value.getPartialMatches(searchStore.term)\n : props.attachmentList\n})\n\nconst searchBarDisabled = computed(\n () => !searchStore.enabled || (props.attachmentList && props.attachmentList.length === 0)\n)\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n searchStore.enabled = true\n searchStore.domain = \"attachments\"\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-list-manager\",\n onHide: _cache[1] || (_cache[1] = ($event: any) => (_unref(searchStore).term = null))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(SfxTopNavigation, {\n title: props.entityDesignation,\n \"title-class\": \"text-h4\",\n \"subtitle-class\": \"text-subtitle2\",\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"quick-action\": _unref(ContextAction).ADD_ATTACHMENT,\n onClose: _unref(onDialogCancel),\n onContextSelect: _cache[0] || (_cache[0] = ($event: any) => (_unref(onDialogOK)(undefined))),\n class: \"shadow\",\n \"hide-notifications\": \"\",\n \"hide-separator\": \"\",\n \"hide-context-menu\": \"\"\n }, {\n subtitle: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(subtitle) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }, 8, [\"title\", \"navigation-action\", \"quick-action\", \"onClose\"]),\n _createVNode(SfxSearchBar, {\n class: \"q-toolbar\",\n disable: searchBarDisabled.value\n }, null, 8, [\"disable\"]),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-manager-elements\" }, {\n default: _withCtx(() => [\n (!filteredAttachments.value)\n ? (_openBlock(), _createBlock(SfxSkeleton, {\n key: 0,\n height: _unref(SFX_CARD_ATTACHMENT_HEIGHT),\n \"no-of-cards\": 3\n }, null, 8, [\"height\"]))\n : (filteredAttachments.value.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"q-py-xl\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).ATTACHMENT_NO_MATCHES)\n }, null, 8, [\"missingEntity\"]))\n : (_openBlock(true), _createElementBlock(_Fragment, { key: 2 }, _renderList(filteredAttachments.value, (attachment, index) => {\n return (_openBlock(), _createBlock(SfxCardAttachment, {\n key: index,\n attachment: attachment,\n entity: props.entity,\n onClick: ($event: any) => (_unref(onDialogOK)(attachment))\n }, null, 8, [\"attachment\", \"entity\", \"onClick\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListAttachmentSelect.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListAttachmentSelect.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QToolbar from 'quasar/src/components/toolbar/QToolbar.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QToolbar,QCardSection});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardObject from \"src/components/card/SfxCardObject.vue\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport { showIdentify } from \"src/util/functions/overlays\"\nimport {\n Identifier,\n IdentifierAddTarget,\n IdentifierAssociationType,\n IdentifierRemove,\n} from \"src/util/types/dataModels/identifier\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListIdentifier',\n props: {\n entityName: {\n type: String,\n required: true,\n },\n\n entityId: {\n type: String,\n required: true,\n },\n\n associationType: {\n type: String as PropType,\n required: true,\n },\n\n list: {\n type: Array as PropType,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst elementsSelected = ref([])\n\nconst leftButtonText = computed(() =>\n elementsSelected.value.length === 0\n ? t(\"sfxButtons.btn_add_identifier\")\n : t(\"sfxButtons.btn_cancel\")\n)\nconst leftButtonFunction = computed(() =>\n elementsSelected.value.length === 0 ? clickAddIdentifier : dialogClose\n)\n\nconst rightButtonText = computed(() =>\n elementsSelected.value.length === 0\n ? t(\"sfxButtons.btn_got_it\")\n : t(\"sfxButtons.btn_disassociate\")\n)\nconst rightButtonFunction = computed(() =>\n elementsSelected.value.length === 0 ? dialogClose : clickDisassociate\n)\n\n//endregion\n\n//region Functions\n\nfunction dialogClose() {\n onDialogCancel()\n}\n\nfunction clickAddIdentifier() {\n if (process.env.IS_MANAGER_MODE) {\n // TODO: Handle Add identifier for manager mode\n showNotImplementedNotification()\n return\n }\n\n // TODO: Handle PROPOSE new identifier case (adding another one to the list) when we have change requests\n\n const newProposition = props.list && props.list.length > 0\n\n const title = newProposition\n ? t(\"identifyOverlay.title_propose\")\n : t(\"identifyOverlay.title_associate\")\n\n const identifierAddSource: IdentifierAddTarget = {\n associationType: props.associationType,\n entityName: props.entityName,\n entityId: props.entityId,\n identifierAddType: newProposition ? \"PROPOSE\" : \"ASSOCIATE\",\n }\n\n showIdentify(title, identifierAddSource).onOk(onDialogOK)\n}\n\nfunction clickDisassociate() {\n const action: IdentifierRemove = \"DISASSOCIATE\"\n const data = elementsSelected.value\n onDialogOK({ action, data })\n}\n\nfunction itemClick(itemClicked: Identifier) {\n const indexOfItem = elementsSelected.value.findIndex((item) => item.id === itemClicked.id)\n\n if (indexOfItem === -1) {\n elementsSelected.value.push(itemClicked)\n } else {\n const lastIndex = elementsSelected.value.length - 1\n elementsSelected.value[indexOfItem] = elementsSelected.value[lastIndex]\n elementsSelected.value.pop()\n }\n}\n\nfunction determineClass(item: Identifier) {\n return elementsSelected.value.includes(item) ? \"sfx-card--selected\" : undefined\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"sfxDialogListIdentifier.title\")), 1)\n ]),\n _: 1\n }),\n (props.list?.length === 0)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _unref(t)('sfxDialogListIdentifier.identifier_none')\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: dialogClose,\n label: _ctx.$t('sfxButtons.btn_got_it'),\n class: \"col\"\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtn, {\n onClick: clickAddIdentifier,\n label: _ctx.$t('sfxButtons.btn_add_identifier'),\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ], 64))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _unref(t)('sfxDialogListIdentifier.identifier_all')\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-caption text-fun-label-and-icon q-pb-none\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _unref(t)('sfxDialogListIdentifier.hint')\n }, null, 8, _hoisted_3)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-elements\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.list, (item, index) => {\n return (_openBlock(), _createBlock(SfxCardObject, {\n key: index,\n \"object-type\": item.type,\n title: item.data,\n user: \"\",\n \"date-time\": item.updated_dt,\n onClick: ($event: any) => (itemClick(item)),\n class: _normalizeClass(determineClass(item))\n }, null, 8, [\"object-type\", \"title\", \"date-time\", \"onClick\", \"class\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: leftButtonFunction.value,\n label: leftButtonText.value,\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: rightButtonFunction.value,\n label: rightButtonText.value,\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ], 64))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListIdentifier.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListIdentifier.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardIssueCondensed from \"src/components/card/SfxCardIssueCondensed.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxSkeleton from \"src/components/special/SfxSkeleton.vue\"\nimport { getChangesDB } from \"src/db/databases\"\nimport router from \"src/router\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useUnsubmittedWorkStore } from \"src/stores/unsubmittedWork\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport {\n fetchIssuePriorityListData,\n fetchWorkDomainWorkspaceListData,\n} from \"src/util/functions/entityData\"\nimport {\n getIssueCardData,\n getOpenCorrectiveWorkOnItemForIssue,\n setOverdueTime,\n sortOpenIssuesData,\n} from \"src/util/functions/issues\"\nimport { showWarningNotification } from \"src/util/functions/notifications\"\nimport { getUnsubmittedAttachments, getUnsubmittedWork } from \"src/util/functions/unsubmittedData\"\nimport { IssueAssociationType, IssueCardData, IssuesOnItem } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { UnsubmittedWork } from \"src/util/types/dataModels/unsubmittedWork\"\nimport { computed, onMounted, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListIssue',\n props: {\n associationType: {\n type: String as PropType,\n required: true,\n },\n\n // The list should be an ordered list\n list: {\n type: Array as PropType,\n required: true,\n },\n\n areUnsavedChanges: {\n type: Boolean,\n required: false,\n },\n\n onDismiss: {\n type: Function,\n required: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\nconst elementSelected = ref(undefined)\nconst issuesList = ref()\nconst correctiveWorkOnItem = ref()\nconst loadingData = ref(true)\nconst unsubmittedWorkOnIssue = ref()\n\nconst subtitle = t(\"sfxDialogListIssue.text_more_than_one_issue\")\n\nconst leftButtonText = computed(() =>\n elementSelected.value ? t(\"sfxButtons.btn_open_issue\") : t(\"sfxButtons.btn_cancel\")\n)\nconst rightButtonText = ref(t(\"sfxButtons.btn_to_issues\"))\n\nconst leftButtonFunction = computed(() => (elementSelected.value ? goToIssue : clickCancel))\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n await fetchWorkDomainWorkspaceListData()\n await fetchIssuePriorityListData()\n const issueData = await Promise.all(\n props.list.map(async (issue) => {\n let issueData = cacheStore.issueCard.get(issue.id)\n\n if (!issueData) {\n issueData = await getIssueCardData(issue)\n cacheStore.issueCard.set(issue.id, issueData)\n }\n\n setOverdueTime(issueData)\n\n return issueData\n })\n )\n\n issuesList.value = issueData.sort(sortOpenIssuesData)\n\n loadingData.value = false\n})\n\n//endregion\n\n//region Functions\n\nasync function determineRightButtonText(issueClicked: IssueCardData) {\n const changesDb = await getChangesDB()\n const unsubmittedWork = await changesDb.unsubmitted_work\n .findOne({\n selector: { entity_id: issueClicked.issueData.id },\n })\n .exec()\n\n unsubmittedWork\n ? (rightButtonText.value = t(\"sfxButtons.btn_resume\"))\n : (rightButtonText.value = t(\"sfxButtons.btn_correct_issue\"))\n\n unsubmittedWorkOnIssue.value = unsubmittedWork?.toMutableJSON()\n}\n\nfunction clickCancel() {\n onDialogCancel()\n}\n\nfunction checkUnsavedChanges(action: () => void) {\n if (props.areUnsavedChanges) {\n onDialogCancel()\n if (typeof props.onDismiss === \"function\") {\n props.onDismiss(action)\n }\n } else {\n action()\n }\n}\n\nasync function goToIssue() {\n checkUnsavedChanges(goToIssueRoutePush)\n}\n\nasync function goToIssueRoutePush() {\n const issueId = elementSelected.value?.issueData.id\n await router.push({ name: NamedPath.ISSUE, params: { issueId } })\n}\n\nfunction goToIssueList() {\n checkUnsavedChanges(goToIssuesListRoutePush)\n}\n\nfunction goToIssuesListRoutePush() {\n router.push({\n name: NamedPath.SELECT_ISSUE_FOR_ITEM,\n params: { itemId: props.list[0].actionable_item },\n })\n}\n\nasync function clickCorrectIssue() {\n if (correctiveWorkOnItem.value) {\n const msg = t(\"notifications.corrective_work_already_exists\", {\n correctiveWorkTitle: correctiveWorkOnItem.value?.title,\n })\n showWarningNotification(msg)\n } else {\n await router.push({\n name: NamedPath.ADHOC_CORRECTIVE_WORK,\n params: { issueId: elementSelected.value?.issueData.id },\n })\n }\n}\n\nasync function handleUnsubmittedWork() {\n const issueId = elementSelected.value?.issueData.id\n\n // Redirect to the prefilled Perform Corrective Work page\n if (issueId && unsubmittedWorkOnIssue.value) {\n const unsubmittedWorkStore = useUnsubmittedWorkStore()\n const unsubmittedWork = await getUnsubmittedWork(unsubmittedWorkOnIssue.value.id)\n\n // Set the values in the store, so the page form fields are filled at the page load\n if (unsubmittedWork) {\n unsubmittedWorkStore.unsubmittedWork = unsubmittedWork\n unsubmittedWorkStore.unsubmittedImages =\n (await getUnsubmittedAttachments(unsubmittedWork.attachments)) || []\n\n return await router.push({\n name: NamedPath.ADHOC_CORRECTIVE_WORK,\n params: { issueId: issueId },\n })\n } else return\n }\n}\n\nasync function rightButtonFunction() {\n if (rightButtonText.value === t(\"sfxButtons.btn_to_issues\")) {\n goToIssueList()\n } else if (rightButtonText.value === t(\"sfxButtons.btn_correct_issue\")) {\n checkUnsavedChanges(clickCorrectIssue)\n } else {\n await handleUnsubmittedWork()\n }\n}\n\nasync function issueClick(issueClicked: IssueCardData) {\n elementSelected.value =\n elementSelected.value?.issueData.id === issueClicked.issueData.id ? undefined : issueClicked\n\n await determineRightButtonText(issueClicked)\n}\n\nfunction determineClass(issue: IssueCardData) {\n return elementSelected.value?.issueData.id === issue.issueData.id\n ? \"sfx-card--selected\"\n : undefined\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => elementSelected.value,\n async () => {\n const issueId = elementSelected.value?.issueData.id\n if (issueId) correctiveWorkOnItem.value = await getOpenCorrectiveWorkOnItemForIssue(issueId)\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"sfxDialogListIssue.title_open_issues_on_item\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(subtitle) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-elements\" }, {\n default: _withCtx(() => [\n (loadingData.value)\n ? (_openBlock(), _createBlock(SfxSkeleton, {\n key: 0,\n height: _unref(SFX_CARD_CONDENSED_HEIGHT),\n \"no-of-cards\": 3\n }, null, 8, [\"height\"]))\n : (issuesList.value?.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"q-py-xl\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).ISSUE_NOT_FOUND)\n }, null, 8, [\"missingEntity\"]))\n : (issuesList.value?.length > 0)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 2 }, _renderList(issuesList.value, (issue, index) => {\n return (_openBlock(), _createBlock(SfxCardIssueCondensed, {\n key: index,\n issue: issue,\n onClick: ($event: any) => (issueClick(issue)),\n class: _normalizeClass(determineClass(issue))\n }, null, 8, [\"issue\", \"onClick\", \"class\"]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: leftButtonFunction.value,\n label: leftButtonText.value,\n class: \"col q-mr-sm\",\n disable: loadingData.value\n }, null, 8, [\"onClick\", \"label\", \"disable\"]),\n _createVNode(SfxBtn, {\n onClick: rightButtonFunction,\n label: rightButtonText.value,\n class: \"col\",\n disable: loadingData.value\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListIssue.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListIssue.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardIssueCondensed from \"src/components/card/SfxCardIssueCondensed.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxSkeleton from \"src/components/special/SfxSkeleton.vue\"\nimport router from \"src/router\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport {\n FILTER_COLUMN_SEARCH,\n FILTER_COLUMN_VALUE,\n FILTER_ENTITY_UUID,\n} from \"src/util/constants/filters\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport {\n fetchIssuePriorityListData,\n fetchWorkDomainWorkspaceListData,\n} from \"src/util/functions/entityData\"\nimport {\n getIssueCardData,\n getOpenCorrectiveWorkOnItemForIssue,\n setOverdueTime,\n sortOpenIssuesData,\n} from \"src/util/functions/issues\"\nimport {\n showNotImplementedNotification,\n showWarningNotification,\n} from \"src/util/functions/notifications\"\nimport { IssueCardData, IssuesOnItem } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { computed, onMounted, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListIssueManager',\n props: {\n // The list should be an ordered list\n list: {\n type: Array as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\nconst elementsSelected = ref(undefined)\nconst issuesList = ref([])\nconst correctiveWorkOnItem = ref()\nconst loadingData = ref(true)\n\nconst leftButtonText = computed(() =>\n elementsSelected.value ? t(\"sfxButtons.btn_open_issue\") : t(\"sfxButtons.btn_cancel\")\n)\n\nconst leftButtonFunction = computed(() => (elementsSelected.value ? goToIssue : onDialogCancel))\n\nconst rightButtonText = computed(() =>\n elementsSelected.value ? t(\"sfxButtons.btn_correct_issue\") : t(\"sfxButtons.btn_to_issues\")\n)\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n await fetchWorkDomainWorkspaceListData()\n await fetchIssuePriorityListData()\n\n const issueData = await Promise.all(\n props.list.map(async (issue) => {\n let issueData = cacheStore.issueCard.get(issue.id)\n\n if (!issueData) {\n issueData = await getIssueCardData(issue)\n cacheStore.issueCard.set(issue.id, issueData)\n }\n setOverdueTime(issueData)\n\n return issueData\n })\n )\n issuesList.value = issueData.sort(sortOpenIssuesData)\n\n loadingData.value = false\n})\n\n//endregion\n\n//region Functions\n\nasync function goToIssue() {\n const issueId = elementsSelected.value?.issueData.id\n await router.push({ name: NamedManagerPath.ISSUE, params: { issueId } })\n}\n\nfunction goToIssueList() {\n router.push({\n name: NamedManagerPath.SELECT_ISSUE,\n // TODO: Filters needs to be updated\n // Non closed issues for the given item\n query: {\n [FILTER_COLUMN_SEARCH]: \"item_area\",\n [FILTER_ENTITY_UUID]: props.list[0].actionable_item,\n [FILTER_COLUMN_VALUE]: \"\",\n },\n })\n}\n\nasync function clickCorrectIssue() {\n if (correctiveWorkOnItem.value) {\n const msg = t(\"notifications.corrective_work_already_exists\", {\n correctiveWorkTitle: correctiveWorkOnItem.value?.title,\n })\n showWarningNotification(msg)\n } else {\n showNotImplementedNotification()\n // TODO: Add when we have manager mode corrective work\n // await router.push({\n // name: NamedManagerPath.ADHOC_CORRECTIVE_WORK,\n // params: { issueId: elementsSelected.value?.issueData.id },\n // })\n }\n}\n\nasync function rightButtonFunction() {\n elementsSelected.value ? await clickCorrectIssue() : goToIssueList()\n}\n\nfunction issueClick(issueClicked: IssueCardData) {\n elementsSelected.value =\n elementsSelected.value?.issueData.id === issueClicked.issueData.id ? undefined : issueClicked\n}\n\nfunction determineClass(issue: IssueCardData) {\n return elementsSelected.value?.issueData.id === issue.issueData.id\n ? \"sfx-card--selected\"\n : undefined\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => elementsSelected.value,\n async () => {\n const issueId = elementsSelected.value?.issueData.id\n if (issueId) correctiveWorkOnItem.value = await getOpenCorrectiveWorkOnItemForIssue(issueId)\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"sfxDialogListIssue.title_open_issues_on_item\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sfxDialogListIssue.text_more_than_one_issue')\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-elements\" }, {\n default: _withCtx(() => [\n (loadingData.value)\n ? (_openBlock(), _createBlock(SfxSkeleton, {\n key: 0,\n height: _unref(SFX_CARD_CONDENSED_HEIGHT),\n \"no-of-cards\": 3\n }, null, 8, [\"height\"]))\n : (issuesList.value?.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"q-py-xl\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).ISSUE_NOT_FOUND)\n }, null, 8, [\"missingEntity\"]))\n : (issuesList.value?.length > 0)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 2 }, _renderList(issuesList.value, (issue, index) => {\n return (_openBlock(), _createBlock(SfxCardIssueCondensed, {\n key: index,\n issue: issue,\n onClick: ($event: any) => (issueClick(issue)),\n class: _normalizeClass(determineClass(issue))\n }, null, 8, [\"issue\", \"onClick\", \"class\"]))\n }), 128))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: leftButtonFunction.value,\n label: leftButtonText.value,\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: rightButtonFunction,\n label: rightButtonText.value,\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListIssueManager.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListIssueManager.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardObject from \"src/components/card/SfxCardObject.vue\"\nimport router from \"src/router\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useUnsubmittedWorkStore } from \"src/stores/unsubmittedWork\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { getUnsubmittedAttachments } from \"src/util/functions/unsubmittedData\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport {\n UnsubmittedWork,\n UnsubmittedWorkEntity,\n UnsubmittedWorkWithEntity,\n} from \"src/util/types/dataModels/unsubmittedWork\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListUnsubmittedWork',\n props: {\n unsubmittedWorkList: {\n type: Array as PropType[]>,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst configurationStore = useConfigurationStore()\nconst { dialogRef, onDialogHide } = useDialogPluginComponent()\n\nconst entity = computed(() => {\n let result\n if (props.entity === \"issue\") {\n result = t(\"issue.label_issue\")\n } else if (props.entity === \"item\") {\n result = t(\"item.item\")\n } else {\n result = t(\"area.area\")\n }\n\n return result\n})\n\nconst title = t(\"sfxDialogListUnsubmittedWork.title\")\nconst bodyText = t(\"sfxDialogListUnsubmittedWork.text_body\", { entity: entity.value })\nconst btnDontShow = t(\"sfxButtons.btn_dont_show\")\nconst btnGotIt = t(\"sfxButtons.btn_got_it\")\nconst untitledWorkLabel = t(\"toDo.untitled_work\")\n\n//endregion\n\n//region Functions\n\nasync function goToUnsubmittedWork(unsubmittedWork: UnsubmittedWork) {\n const unsubmittedWorkStore = useUnsubmittedWorkStore()\n unsubmittedWorkStore.unsubmittedWork = unsubmittedWork\n\n if (unsubmittedWork.attachments.length > 0) {\n const unsubmittedWorkAttachments = await getUnsubmittedAttachments(unsubmittedWork.attachments)\n if (unsubmittedWorkAttachments) {\n unsubmittedWorkStore.unsubmittedImages = unsubmittedWorkAttachments\n }\n }\n\n if (unsubmittedWork.work_type === \"adhocCorrective\") {\n await router.push({\n name: NamedPath.ADHOC_CORRECTIVE_WORK,\n params: { issueId: unsubmittedWork.entity_id },\n })\n } else if (unsubmittedWork.work_type === \"adhocRegular\") {\n await router.push({\n name: NamedPath.ADHOC_REGULAR_WORK,\n params: { itemId: unsubmittedWork.entity_id },\n })\n }\n}\n\nfunction doNotShowAgain() {\n configurationStore.hideUnsubmittedWorkListDialog[\n props.unsubmittedWorkList[0].unsubmittedWork.entity_id\n ] = true\n onDialogHide()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-sm\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(bodyText) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.unsubmittedWorkList, (unsubmittedWorkCardData, index) => {\n return (_openBlock(), _createBlock(SfxCardObject, {\n key: index,\n class: \"q-my-md\",\n \"object-type\": unsubmittedWorkCardData.unsubmittedWork.work_type,\n title: unsubmittedWorkCardData.unsubmittedWork?.title,\n \"title-placeholder\": _unref(untitledWorkLabel),\n \"date-time\": unsubmittedWorkCardData.unsubmittedWork.declared_dt,\n \"entity-type\": unsubmittedWorkCardData.unsubmittedWork.entity_type,\n \"entity-data\": unsubmittedWorkCardData.entityData,\n onClick: ($event: any) => (goToUnsubmittedWork(unsubmittedWorkCardData.unsubmittedWork))\n }, null, 8, [\"object-type\", \"title\", \"title-placeholder\", \"date-time\", \"entity-type\", \"entity-data\", \"onClick\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-pa-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(btnDontShow),\n class: \"col\",\n onClick: doNotShowAgain\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtn, {\n label: _unref(btnGotIt),\n class: \"col\",\n onClick: _unref(onDialogHide)\n }, null, 8, [\"label\", \"onClick\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListUnsubmittedWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListUnsubmittedWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_2 = { class: \"text-h4\" }\nconst _hoisted_3 = { class: \"text-italic\" }\n\nimport { DeepReadonlyObject } from \"rxdb\"\nimport SfxCardCondensed from \"src/components/card/SfxCardCondensed.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { getChangesDB, getDB } from \"src/db/databases\"\nimport { Log } from \"src/util/classes/log\"\nimport { fetchIssuePriorityListData } from \"src/util/functions/entityData\"\nimport { getIssueCardIcons } from \"src/util/functions/issues\"\nimport { getWorkOrderCorrectiveItemData } from \"src/util/functions/workOrder\"\nimport { getWorkOrderPriorityData } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { Issue } from \"src/util/types/dataModels/issue\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport { WorkOrderCorrectiveItem } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onBeforeMount, onMounted, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardIssueUnsubmittedWork',\n props: {\n issue: {\n type: Object as PropType>,\n required: true,\n },\n\n workOrderId: {\n type: String,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst issueImage = ref()\nconst issuePriority = ref()\nconst workDomain = ref>()\nconst workOrder = ref()\nconst iconRowRaw = ref([])\nconst iconRow = computed(() => iconRowRaw.value)\n\nconst labelProcedureSteps = t(\"sfxCard.issue_label_procedure_steps\")\nconst labelNone = t(\"sfxCard.issue_no_procedure_steps\")\n\nconst countTotalProcedures = computed(\n () =>\n (props.issue?.related_procedure_steps_select?.length || 0) +\n (props.issue?.related_procedure_steps_bool?.length || 0) +\n (props.issue?.related_procedure_steps_verify?.length || 0) +\n (props.issue?.related_procedure_steps_photo?.length || 0) +\n (props.issue?.related_procedure_steps_numeric?.length || 0)\n)\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n await fetchIssuePriorityListData()\n issuePriority.value = await getIssuePriority()\n workDomain.value = await getWorkDomain()\n if (props.workOrderId) {\n workOrder.value = await getWorkOrderCorrectiveItemData(props.workOrderId)\n }\n\n iconRowRaw.value = await getIconRow()\n})\n\nonMounted(async () => {\n if (props.issue?.attachments?.length > 0) {\n issueImage.value = await getUnsubmittedImage(props.issue?.attachments[0])\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function getIconRow(): Promise {\n let workOrderPriority\n\n if (workOrder.value) {\n workOrderPriority = await getWorkOrderPriorityData(workOrder.value?.priority)\n }\n\n return getIssueCardIcons(issuePriority.value, workOrderPriority)\n}\n\nasync function getIssuePriority() {\n try {\n const db = await getDB()\n\n const priorityInDb = await db.issue_priority\n .findOne({ selector: { id: props.issue?.priority } })\n .exec()\n\n return priorityInDb?.toJSON()\n } catch (error) {\n Log.error({ message: \"Failed to get the Issue Priority.\", error })\n }\n}\n\nasync function getWorkDomain() {\n try {\n const db = await getDB()\n\n const workDomainInDb = await db.work_domain_workspace\n .findOne({ selector: { id: props.issue?.work_domain } })\n .exec()\n\n return workDomainInDb?.toJSON()\n } catch (error) {\n Log.error({ message: \"Failed to get the Work Domain.\", error })\n }\n}\n\nasync function getUnsubmittedImage(unsubmittedImageId: string): Promise {\n try {\n const db = await getChangesDB()\n const unsubmittedImage = await db.unsubmitted_attachment.findOne(unsubmittedImageId).exec()\n\n if (unsubmittedImage) {\n const blob = await fetch(unsubmittedImage.fileData).then((response) => response.blob())\n\n return URL.createObjectURL(blob)\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while trying to fetch the unsubmitted image\",\n error,\n })\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCardCondensed, {\n \"img-src\": issueImage.value,\n \"icon-row\": iconRow.value,\n hasImg: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(workDomain.value?.designation), 1),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_truncate_middle, props.issue?.title]\n ]),\n (countTotalProcedures.value > 0)\n ? (_openBlock(), _createBlock(SfxDataPoint, {\n key: 0,\n label: _unref(labelProcedureSteps),\n \"card-field\": \"\"\n }, null, 8, [\"label\"]))\n : (_openBlock(), _createBlock(SfxDataPoint, {\n key: 1,\n label: _unref(labelProcedureSteps),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_unref(labelNone)), 1)\n ]),\n _: 1\n }, 8, [\"label\"]))\n ]),\n _: 1\n }, 8, [\"img-src\", \"icon-row\"]))\n}\n}\n\n})","import script from \"./SfxCardIssueUnsubmittedWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardIssueUnsubmittedWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardIssueUnsubmittedWork from \"src/components/card/SfxCardIssueUnsubmittedWork.vue\"\nimport router from \"src/router\"\nimport { TAB_TO_DO_UNSUBMITTED_WORK } from \"src/util/constants/navigation\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { Issue } from \"src/util/types/dataModels/issue\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListUnsubmittedWorkIssues',\n props: {\n entityId: {\n type: String,\n required: true,\n },\n\n issueList: {\n type: Array as PropType[]>,\n required: true,\n },\n\n workOrderId: {\n type: String,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef } = useDialogPluginComponent()\n\nconst countTotalIssues = computed(() => props.issueList?.length)\n\nconst title = t(\"sfxDialogListIssue.title_unsubmitted_work_issues\")\n\n// TODO: When procedures are implemented, count the total number of required issues and change the text accordingly\nconst textRaisedIssues = t(\"sfxDialogListIssue.text_raised_issues\", {\n count: countTotalIssues.value,\n})\n\nconst textHowToProceed = t(\"sfxDialogListIssue.text_proceed\")\nconst labelReviewWork = t(\"sfxButtons.btn_review_work\")\nconst labelRaiseIssue = t(\"sfxButtons.btn_raise_next_issue\")\n\n//endregion\n\n//region Functions\n\nasync function reviewWork() {\n await router.replace({\n name: NamedPath.TO_DO,\n params: { unsubmittedWorkId: TAB_TO_DO_UNSUBMITTED_WORK },\n })\n\n if (props.workOrderId) {\n await router.push({\n name: NamedPath.PLANNED_REGULAR_WORK,\n params: { itemId: props.entityId, workOrderId: props.workOrderId },\n })\n } else {\n await router.push({\n name: NamedPath.ADHOC_REGULAR_WORK,\n params: { itemId: props.entityId },\n })\n }\n}\n\nasync function raiseNextIssue() {\n // TODO: Fix\n showNotImplementedNotification()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(textRaisedIssues) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(textHowToProceed)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-elements\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.issueList, (issue, index) => {\n return (_openBlock(), _createBlock(SfxCardIssueUnsubmittedWork, {\n key: index,\n issue: issue,\n workOrderId: __props.workOrderId,\n onClick: _unref(showNotImplementedNotification)\n }, null, 8, [\"issue\", \"workOrderId\", \"onClick\"]))\n }), 128))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-pa-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(labelReviewWork),\n class: \"col\",\n onClick: reviewWork\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtn, {\n label: _unref(labelRaiseIssue),\n class: \"col\",\n onClick: raiseNextIssue\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListUnsubmittedWorkIssues.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListUnsubmittedWorkIssues.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"text-subtitle2 q-mb-sm\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardWorkOrderForEntity from \"src/components/card/SfxCardWorkOrderForEntity.vue\"\nimport SfxSkeleton from \"src/components/special/SfxSkeleton.vue\"\nimport router from \"src/router\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport { getCorrectiveWorkOnItemListForWorkOrder } from \"src/util/functions/performedWork\"\nimport { IssueAssociationType } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onMounted, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListWorkOrder',\n props: {\n associationType: {\n type: String as PropType,\n required: true,\n },\n\n workOrders: {\n type: Array as PropType,\n required: true,\n },\n\n entityId: {\n type: String,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\nconst loadingData = ref(true)\n\nconst notPerformedWorkOrderList = ref([])\nconst performedWorkOrderList = ref([])\nconst currentSelection = ref(undefined)\n\nconst onlyOneWorkOrder = computed(() => props.workOrders?.length === 1)\n\nconst subtitle = computed(() =>\n onlyOneWorkOrder.value\n ? t(\"sfxDialogListWorkOrder.text_only_one_work_order\")\n : t(\"sfxDialogListWorkOrder.text_more_than_one_work_order\")\n)\n\nconst leftButtonText = computed(() =>\n currentSelection.value ? t(\"sfxButtons.btn_open_work_orders\") : t(\"sfxButtons.btn_cancel\")\n)\n\nconst leftButtonFunction = computed(() => (currentSelection.value ? openWorkOrder : clickCancel))\n\nconst rightButtonText = computed(() => getRightButtonText())\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n await assignWorkOrderCardData()\n\n if (onlyOneWorkOrder.value) {\n currentSelection.value =\n notPerformedWorkOrderList.value.length === 1\n ? notPerformedWorkOrderList.value[0]\n : performedWorkOrderList.value[0]\n }\n\n loadingData.value = false\n})\n\n//endregion\n\n//region Functions\n\nasync function assignWorkOrderCardData() {\n for (const workOrder of props.workOrders) {\n // Assign CorrectiveWorkOrderCardData\n if (workOrder.isCorrectiveWork) {\n const correctiveWorkList = await getCorrectiveWorkOnItemListForWorkOrder(\n workOrder.workOrderData.id\n )\n if (correctiveWorkList && correctiveWorkList.length > 0) {\n assignCorrectiveWorkOrderCardData(workOrder, correctiveWorkList)\n }\n\n // Assign RegularWorkOrderCardData\n } else {\n // A RegularWorkOrder can have many Items but only one RegularWork per Item\n const conclusion = workOrder.performedWorkData[0]?.conclusion\n\n // To be in the `Performed` group the RegularPerformedWork done in the WorkOrder\n // should be in the `accepted` state\n if (conclusion && conclusion === \"accepted\") {\n performedWorkOrderList.value.push(workOrder)\n } else {\n notPerformedWorkOrderList.value.push(workOrder)\n }\n }\n }\n}\n\nfunction assignCorrectiveWorkOrderCardData(\n workOrder: WorkOrderCardData,\n correctiveWorkList: CorrectiveWorkOnItem[]\n) {\n let allWorkPerformed = true\n for (const correctiveWork of correctiveWorkList) {\n // To be in the `Performed` group all the CorrectivePerformedWork done in the WorkOrder\n // should be in the `accepted` state\n if (correctiveWork.conclusion && correctiveWork.conclusion !== \"accepted\") {\n allWorkPerformed = false\n break\n }\n }\n if (allWorkPerformed) {\n performedWorkOrderList.value.push(workOrder)\n } else {\n notPerformedWorkOrderList.value.push(workOrder)\n }\n}\n\nfunction getRightButtonText() {\n if (currentSelection.value) {\n return notPerformedWorkOrderList.value.includes(currentSelection.value)\n ? t(\"sfxButtons.btn_perform_work\")\n : t(\"sfxButtons.btn_see_performed_work\")\n } else {\n return t(\"sfxButtons.btn_to_work_orders\")\n }\n}\n\nfunction clickCancel() {\n onDialogCancel()\n}\n\nasync function openWorkOrder() {\n const workOrderId = currentSelection.value?.workOrderData.id\n\n const path = currentSelection.value?.isCorrectiveWork\n ? NamedPath.WORK_ORDER_CORRECTIVE\n : NamedPath.WORK_ORDER_REGULAR\n\n await router.push({ name: path, params: { workOrderId } })\n}\n\nasync function goToWorkOrderList() {\n // TODO: Direct the user to SelectWorkOrder page with the work orders filtered for the current item\n return showNotImplementedNotification()\n}\n\nasync function goToPerformingWork() {\n // For performing corrective work, we do not know how to start performing work.\n // This is because there can be several issues inside the corrective work order,\n // which correspond/are related to the item.\n // Because we cannot determine which to start from, the user is transported to the work order corrective page,\n // on the issues tab, with issues related to the current item being highlighted.\n // For performing regular work, the only thing we would need is the work order id and the item id,\n // since in this case they are in 1 to 1 relation.\n // This allows us to directly start working on the planned regular work and as such, we route to there.\n\n currentSelection.value?.isCorrectiveWork\n ? await router.push({\n // Redirect the user to the CorrectiveWorkOrderOverview Issues tab\n // with the Issues related to this Item highlighted\n name: NamedPath.WORK_ORDER_CORRECTIVE,\n params: {\n id: currentSelection.value.workOrderData.id,\n itemId: currentSelection.value.issuesData[0].actionable_item,\n },\n })\n : await router.push({\n name: NamedPath.PLANNED_REGULAR_WORK,\n // A RegularWorkOrder can have many Items but only one RegularWork per Item\n params: {\n itemId: props.entityId,\n workOrderId: currentSelection.value?.workOrderData.id,\n },\n })\n}\n\nasync function seePerformedWork() {\n // This specifically is for work orders in which all the work has been performed.\n // Just like with the \"performing\" work, the corrective work can have multiple issues that are related to this item.\n // This means that we need to show the performed work page, filtered for this specific item and in state \"completed\".\n // For regular work, because the relation is 1 to 1, we can directly go to the performed regular work page.\n\n currentSelection.value?.isCorrectiveWork\n ? // TODO: Direct the user to SelectPerformedWork page with the performed work filtered for the selected work order\n showNotImplementedNotification()\n : await router.push({\n name: NamedPath.PERFORMED_REGULAR_WORK,\n // A RegularWorkOrder can have many Items but only one RegularWork per Item\n params: { performedWorkId: currentSelection.value?.performedWorkData[0].id },\n })\n}\n\nasync function rightButtonFunction() {\n if (currentSelection.value) {\n await (notPerformedWorkOrderList.value.includes(currentSelection.value)\n ? goToPerformingWork()\n : seePerformedWork())\n } else {\n await goToWorkOrderList()\n }\n}\n\nfunction cardClick(workOrderClicked: WorkOrderCardData) {\n if (onlyOneWorkOrder.value) return\n\n currentSelection.value =\n currentSelection.value?.workOrderData.id === workOrderClicked.workOrderData.id\n ? undefined\n : workOrderClicked\n}\n\nfunction determineClass(workOrder: WorkOrderCardData) {\n return currentSelection.value?.workOrderData.id === workOrder.workOrderData.id &&\n !onlyOneWorkOrder.value\n ? \"sfx-card--selected\"\n : undefined\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-list\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogListWorkOrder.title\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: subtitle.value }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-elements\" }, {\n default: _withCtx(() => [\n (loadingData.value)\n ? (_openBlock(), _createBlock(SfxSkeleton, {\n key: 0,\n \"no-of-cards\": 3\n }))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (notPerformedWorkOrderList.value?.length > 0)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(notPerformedWorkOrderList.value, (workOrder) => {\n return (_openBlock(), _createBlock(SfxCardWorkOrderForEntity, {\n key: workOrder.workOrderData.id,\n \"work-order\": workOrder,\n onClick: ($event: any) => (cardClick(workOrder)),\n class: _normalizeClass(determineClass(workOrder))\n }, null, 8, [\"work-order\", \"onClick\", \"class\"]))\n }), 128))\n : _createCommentVNode(\"\", true),\n (performedWorkOrderList.value?.length > 0)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"b\", null, _toDisplayString(_ctx.$t(\"sfxDialogListWorkOrder.performed\")), 1)\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(performedWorkOrderList.value, (workOrder) => {\n return (_openBlock(), _createBlock(SfxCardWorkOrderForEntity, {\n key: workOrder.workOrderData.id,\n \"work-order\": workOrder,\n onClick: ($event: any) => (cardClick(workOrder)),\n class: _normalizeClass(determineClass(workOrder)),\n workPerformed: \"\"\n }, null, 8, [\"work-order\", \"onClick\", \"class\"]))\n }), 128))\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 64))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: leftButtonFunction.value,\n label: leftButtonText.value,\n class: \"col q-mr-sm\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: rightButtonFunction,\n label: rightButtonText.value,\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h4 ellipsis\" }\nconst _hoisted_2 = { class: \"text-subtitle2\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxCardWorkOrder from \"src/components/card/SfxCardWorkOrder.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxSearchBar from \"src/components/search/SfxSearchBar.vue\"\nimport SfxInfiniteScroll from \"src/components/special/SfxInfiniteScroll.vue\"\nimport SfxSkeleton from \"src/components/special/SfxSkeleton.vue\"\nimport router from \"src/router\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { userHasPermissionToCreateWorkOrder } from \"src/util/functions/workOrder\"\nimport { SearchMap } from \"src/util/search/searchMap\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onMounted, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogListWorkOrderSelect',\n props: {\n entityType: {\n type: String as PropType,\n required: true,\n },\n\n entityId: {\n type: String,\n required: true,\n },\n\n entityDesignation: {\n type: String,\n required: true,\n },\n\n workOrders: {\n type: Array as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst searchStore = useSearchStore()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst searchMap = computed(() => {\n return new SearchMap(\n (workOrder) => [{ term: workOrder.workOrderData.designation, value: workOrder }],\n {},\n props.workOrders\n )\n})\n\nconst filteredWorkOrders = computed(() => {\n return searchStore.term ? searchMap.value.getPartialMatches(searchStore.term) : props.workOrders\n})\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entityType))\n\nconst subtitle = t(\"sfxDialogListWorkOrderSelect.subtitle\", { entity: translatedEntity.value })\n\nconst searchBarDisabled = computed(\n () => !searchStore.enabled || (props.workOrders && props.workOrders.length === 0)\n)\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n searchStore.enabled = true\n searchStore.domain = \"workOrders\"\n})\n\n//endregion\n\n//region Functions\n\nasync function handleCreateWorkOrder() {\n if (props.entityType === \"item\") {\n return await router.push({\n name: NamedManagerPath.CREATE_WORK_ORDER,\n params: { itemId: props.entityId },\n })\n } else if (props.entityType === \"issue\") {\n return await router.push({\n name: NamedManagerPath.CREATE_WORK_ORDER,\n params: { issueId: props.entityId },\n })\n } else {\n Log.error({ message: \"The developer should provide a valid entityType\" })\n }\n}\n\nfunction idSelector(workOrder: WorkOrderCardData): string {\n return workOrder.workOrderData.id\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_toolbar_title = _resolveComponent(\"q-toolbar-title\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-list-manager\",\n onHide: _cache[1] || (_cache[1] = ($event: any) => (_unref(searchStore).term = null))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-work-order-select\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"row q-py-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnIcon, {\n class: \"icon-close\",\n icon: _unref(Icons).CLOSE_LARGE,\n onClick: _unref(onDialogCancel),\n size: \"lg\"\n }, null, 8, [\"icon\", \"onClick\"]),\n _createVNode(_component_q_toolbar_title, { class: \"col q-px-none\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_1, _toDisplayString(props.entityDesignation), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", { innerHTML: _unref(subtitle) }, null, 8, _hoisted_3)\n ])\n ]),\n _: 1\n }),\n _createVNode(SfxBtnIcon, {\n class: \"icon-create\",\n icon: _unref(Icons).WORKORDER_CREATE,\n disable: !_unref(userHasPermissionToCreateWorkOrder)(),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (handleCreateWorkOrder())),\n size: \"lg\"\n }, null, 8, [\"icon\", \"disable\"])\n ]),\n _: 1\n }),\n _createVNode(SfxSearchBar, {\n class: \"q-toolbar\",\n disable: searchBarDisabled.value\n }, null, 8, [\"disable\"]),\n _createVNode(_component_q_card_section, { class: \"text-subtitle2 q-py-sm\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _unref(t)('sfxDialogListWorkOrderSelect.restriction')\n }, null, 8, _hoisted_4)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-manager-elements\" }, {\n default: _withCtx(() => [\n (props.workOrders.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 0,\n class: \"q-py-xl\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).WORK_ORDER_NO_SUITABLE_MATCHES)\n }, null, 8, [\"missingEntity\"]))\n : (!filteredWorkOrders.value)\n ? (_openBlock(), _createBlock(SfxSkeleton, {\n key: 1,\n \"no-of-cards\": 3\n }))\n : (filteredWorkOrders.value.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 2,\n class: \"q-py-xl\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).WORK_ORDER_NO_MATCHES)\n }, null, 8, [\"missingEntity\"]))\n : (_openBlock(), _createBlock(SfxInfiniteScroll, {\n key: 3,\n \"data-list\": filteredWorkOrders.value,\n \"id-selector-function\": idSelector\n }, {\n default: _withCtx((slotProps) => [\n _createVNode(SfxCardWorkOrder, {\n class: \"q-my-sm\",\n \"work-order\": slotProps.data,\n onClick: ($event: any) => (_unref(onDialogOK)(slotProps.data))\n }, null, 8, [\"work-order\", \"onClick\"])\n ]),\n _: 1\n }, 8, [\"data-list\"]))\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogListWorkOrderSelect.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogListWorkOrderSelect.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QToolbarTitle from 'quasar/src/components/toolbar/QToolbarTitle.js';\nimport QToolbar from 'quasar/src/components/toolbar/QToolbar.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QToolbarTitle,QToolbar});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, withKeys as _withKeys, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_5 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { SfxDialogCheckedAndInput } from \"src/util/types/components/sfxDialogCheckedAndInput\"\nimport { ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogAcceptCorrectiveWork',\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst { t } = useI18n()\nconst title = t(\"sfxDialogAcceptCorrectiveWork.title\")\nconst contentConfirm = t(\"sfxDialogAcceptCorrectiveWork.content_confirm\")\nconst contentUndone = t(\"sfxDialogAcceptCorrectiveWork.content_undone\")\nconst inputLabel = t(\"sfxDialogAcceptCorrectiveWork.input_label\")\nconst checkboxLabel = t(\"sfxDialogAcceptCorrectiveWork.checkbox_label\")\nconst confirmButtonText = t(\"sfxButtons.btn_confirm\")\nconst rejectButtonText = t(\"sfxButtons.btn_cancel\")\n\nconst input = ref()\nconst inputRef = ref(null)\nconst checkboxVal = ref(true)\nconst payload = ref()\n\n//endregion\n\n//region Functions\n\nfunction handleDialogOk() {\n if (inputRef.value?.validate()) {\n payload.value = { input: input.value || null, checked: checkboxVal.value }\n onDialogOK(payload.value)\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"text-body1 q-py-sm\",\n innerHTML: _unref(contentConfirm)\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(contentUndone) }, null, 8, _hoisted_3)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: checkboxVal.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((checkboxVal).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", {\n class: \"q-ml-sm\",\n innerHTML: _unref(checkboxLabel)\n }, null, 8, _hoisted_5)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n ref_key: \"inputRef\",\n ref: inputRef,\n modelValue: input.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((input).value = $event)),\n class: \"q-pt-sm\",\n autogrow: \"\",\n autofocus: \"\",\n \"hide-bottom-space\": \"\",\n label: _unref(inputLabel),\n onKeyup: _withKeys(handleDialogOk, [\"enter\"])\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(rejectButtonText),\n class: \"col q-mr-sm\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: handleDialogOk,\n label: _unref(confirmButtonText),\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogAcceptCorrectiveWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogAcceptCorrectiveWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogAddAttachments',\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\nconst title = t(\"sfxDialogAddAttachments.title\")\nconst body = t(\"sfxDialogAddAttachments.body\")\nconst hint = t(\"sfxDialogAddAttachments.hint\")\nconst btnSearchAttachments = t(\"sfxButtons.btn_search_attachments\")\nconst btnUploadNewFile = t(\"sfxButtons.btn_upload_new_file\")\n\n//endregion\n\n//region Functions\n\nfunction handleClick(number: 1 | 2) {\n if (number === 1) return showNotImplementedNotification()\n onDialogOK(number)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(body) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-caption text-fun-label-and-icon q-pb-sm\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(hint) }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-pa-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(btnSearchAttachments),\n class: \"col\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (handleClick(1)))\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtn, {\n label: _unref(btnUploadNewFile),\n class: \"col\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (handleClick(2)))\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogAddAttachments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogAddAttachments.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxImageUploader from \"src/components/images/SfxImageUploader.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { saveIssueOnItemComment } from \"src/util/functions/issues\"\nimport {\n saveCorrectiveWorkOnItemComment,\n saveRegularWorkOnItemComment,\n} from \"src/util/functions/performedWork\"\nimport {\n saveWorkOrderCorrectiveItemComment,\n saveWorkOrderRegularItemComment,\n} from \"src/util/functions/workOrder\"\nimport { AttachmentContext, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogAddComment',\n props: {\n entity: {\n type: String as PropType,\n required: true,\n },\n\n entityId: {\n type: String,\n required: true,\n },\n\n attachmentContext: {\n type: String as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entity))\n\nconst titleAddComment = t(\"sfxDialogAddComment.title_add_comment_to_entity\", {\n entity: translatedEntity.value,\n})\nconst labelAddComment = t(\"sfxDialogAddComment.label_add_comment_and_photos\")\nconst labelComment = t(\"sfxDialogAddComment.label_comment\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnConfirm = t(\"sfxButtons.btn_confirm\")\n\nconst comment = ref()\nconst uploadedImages = ref()\n\n//endregion\n\nasync function addComment(attachmentContext: AttachmentContext) {\n if (!comment.value) return\n\n switch (attachmentContext) {\n case \"issue_item_comment\":\n const issueItemComment = await saveIssueOnItemComment(\n props.entityId,\n comment.value,\n uploadedImages.value\n )\n if (issueItemComment) onDialogOK(issueItemComment)\n\n break\n\n case \"corrective_work_item_comment\":\n const correctiveWorkItemComment = await saveCorrectiveWorkOnItemComment(\n props.entityId,\n comment.value,\n uploadedImages.value\n )\n if (correctiveWorkItemComment) onDialogOK(correctiveWorkItemComment)\n\n break\n\n case \"regular_work_item_comment\":\n const regularWorkItemComment = await saveRegularWorkOnItemComment(\n props.entityId,\n comment.value,\n uploadedImages.value\n )\n if (regularWorkItemComment) onDialogOK(regularWorkItemComment)\n\n break\n\n case \"work_order_corrective_item_comment\":\n const workOrderCorrectiveItemComment = await saveWorkOrderCorrectiveItemComment(\n props.entityId,\n comment.value,\n uploadedImages.value\n )\n if (workOrderCorrectiveItemComment) onDialogOK(workOrderCorrectiveItemComment)\n\n break\n\n case \"work_order_regular_item_comment\":\n const workOrderRegularItemComment = await saveWorkOrderRegularItemComment(\n props.entityId,\n comment.value,\n uploadedImages.value\n )\n if (workOrderRegularItemComment) onDialogOK(workOrderRegularItemComment)\n\n break\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(titleAddComment)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(labelAddComment)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n modelValue: comment.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((comment).value = $event)),\n label: _unref(labelComment),\n required: \"\",\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-none\" }, {\n default: _withCtx(() => [\n _createVNode(SfxImageUploader, {\n \"uploaded-images\": uploadedImages.value,\n \"onUpdate:uploadedImages\": _cache[1] || (_cache[1] = ($event: any) => ((uploadedImages).value = $event))\n }, null, 8, [\"uploaded-images\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(btnCancel),\n class: \"col q-mr-sm\",\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: _unref(btnConfirm),\n class: \"col\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (addComment(props.attachmentContext))),\n disable: !comment.value\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogAddComment.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogAddComment.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"col q-pl-md q-pt-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardAttachment from \"src/components/card/SfxCardAttachment.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport { Attachment } from \"src/util/types/dataModels/attachment\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst checkboxSize = \"112px\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogAttachmentDetails',\n props: {\n entity: {\n type: String,\n required: true,\n },\n\n attachment: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst title = t(\"sfxDialogAttachmentDetails.title\")\nconst labelDescription = t(\"sfxDialogAttachmentDetails.label_description\")\nconst checkBoxAllowDownloads = t(\"sfxDialogAttachmentDetails.check_box_allow_downloads\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnSave = t(\"sfxButtons.btn_save\")\n\nconst originalDescription = props.attachment?.description || \"\"\nconst description = ref(props.attachment?.description || \"\")\nconst allowDownloads = ref(true)\n\nconst saveDisabled = computed(\n () => description.value.length === 0 || originalDescription === description.value\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-lg\" }, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n modelValue: description.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((description).value = $event)),\n label: _unref(labelDescription),\n required: \"\",\n \"error-message\": _ctx.$t('sfxDialogConnectVueDevtools.invalid_input'),\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"label\", \"error-message\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"row q-pb-lg\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_checkbox, {\n modelValue: allowDownloads.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((allowDownloads).value = $event)),\n \"keep-color\": \"\",\n dense: \"\",\n color: \"navy-base\",\n size: checkboxSize,\n class: \"sfx-checkbox\",\n disable: \"\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_unref(showNotImplementedNotification)()))\n }, null, 8, [\"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(checkBoxAllowDownloads)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxCardAttachment, {\n attachment: props.attachment,\n entity: props.entity\n }, null, 8, [\"attachment\", \"entity\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-pa-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(btnCancel),\n class: \"col\",\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: _unref(btnSave),\n class: \"col\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_unref(onDialogOK)(description.value))),\n disable: saveDisabled.value\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogAttachmentDetails.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogAttachmentDetails.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { AxiosError } from \"axios\"\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInputPassword from \"src/components/input/SfxInputPassword.vue\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { hashPassword } from \"src/util/functions/hashing\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { getPasswordRequirements, isIncorrectPassword } from \"src/util/functions/user\"\nimport { patchChangePassword } from \"src/util/http/springboard/user\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogChangePassword',\n setup(__props) {\n\nconst { t } = useI18n()\nconst authStore = useAuthStore()\nconst { dialogRef, onDialogCancel, onDialogOK } = useDialogPluginComponent()\nconst currentPassword = ref(\"\")\nconst newPassword = ref(\"\")\nconst repeatNewPassword = ref(\"\")\nconst errorMessage = t(\"sfxDialogChangePassword.password_mismatch\")\n\nconst validDateRule = computed(() => getPasswordRequirements(currentPassword.value))\n\n//endregion\n\n//region Functions\n\nasync function setNewPassword() {\n if (newPassword.value === repeatNewPassword.value) {\n try {\n const hashResult = await hashPassword(newPassword.value)\n if (hashResult) {\n authStore.setNewPasswordHashed(hashResult)\n } else {\n Log.error({ message: \"Failed to hash password.\" })\n }\n } catch (error) {\n Log.error({ message: \"Failed to set new password.\", error })\n }\n }\n}\n\nasync function updatePassword() {\n try {\n await patchChangePassword(\n {},\n {\n current_password: currentPassword.value,\n password: newPassword.value,\n }\n )\n showSuccessNotification(t(\"sfxDialogChangePassword.password_changed\"))\n onDialogOK()\n } catch (error: unknown) {\n if (error instanceof AxiosError && isIncorrectPassword(error)) {\n return showErrorNotification(t(\"sfxDialogChangePassword.password_incorrect\"))\n }\n showErrorNotification(t(\"sfxErrorMsg.error_change_password\"))\n Log.error({ message: \"An error occurred while trying to update the password\", error })\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-change-password\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-px-lg q-py-md\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogChangePassword.title_change_password\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_form, { onSubmit: updatePassword }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-caption text-italic text-field-label q-px-lg q-pt-none\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogChangePassword.password_requirements\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-px-lg q-pt-none q-gutter-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxInputPassword, {\n modelValue: currentPassword.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_current_password'),\n autocomplete: \"current-password\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInputPassword, {\n modelValue: newPassword.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((newPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_new_password'),\n \"lazy-rules\": \"\",\n rules: validDateRule.value,\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"label\", \"rules\"]),\n _createVNode(SfxInputPassword, {\n modelValue: repeatNewPassword.value,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((repeatNewPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_repetition'),\n \"lazy-rules\": \"\",\n rules: [(value) => value === newPassword.value || _unref(errorMessage)],\n \"error-message\": _unref(errorMessage),\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"label\", \"rules\", \"error-message\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-lg q-pt-md q-mt-lg\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"col\",\n label: _ctx.$t('sfxButtons.btn_cancel'),\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n class: \"col\",\n label: _ctx.$t('sfxButtons.btn_save'),\n disable: !currentPassword.value || !newPassword.value || !repeatNewPassword.value,\n type: \"submit\",\n onClick: setNewPassword\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogChangePassword.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogChangePassword.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QForm,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInputPassword from \"src/components/input/SfxInputPassword.vue\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { hashUnlockKey } from \"src/util/functions/hashing\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogChangeUnlockKey',\n setup(__props) {\n\nconst { t } = useI18n()\nconst authStore = useAuthStore()\nconst { dialogRef, onDialogCancel, onDialogOK } = useDialogPluginComponent()\nconst currentPassword = ref(\"\")\nconst unlockKey = ref(\"\")\n\n//endregion\n\n//region Lifecycle\n//endregion\n\n//region Functions\n\nasync function setNewUnlockKey() {\n try {\n const hashResult = await hashUnlockKey(unlockKey.value)\n if (hashResult) {\n authStore.setUnlockKeyHashed(hashResult)\n\n showSuccessNotification(t(\"sfxDialogChangeUnlockKey.msg_unlock_key_changed\"))\n } else {\n showErrorNotification(t(\"sfxErrorMsg.error_change_unlock_key\"))\n Log.error({ message: \"Failed to hash Unlock key.\" })\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_change_unlock_key\"))\n Log.error({ message: \"Failed to set new Unlock key.\", error })\n } finally {\n onDialogOK()\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-change-unlock-key\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pa-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogChangeUnlockKey.title_change_unlock_key\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_form, { onSubmit: setNewUnlockKey }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-px-lg q-pb-lg q-pt-none q-gutter-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxInputPassword, {\n modelValue: currentPassword.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangeUnlockKey.input_current_password'),\n autocomplete: \"current-password\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInputPassword, {\n modelValue: unlockKey.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((unlockKey).value = $event)),\n label: _ctx.$t('sfxDialogChangeUnlockKey.input_unlock_key'),\n autocomplete: \"new-key\"\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-lg q-pt-lg q-mt-xl\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"col q-mr-md\",\n label: _ctx.$t('sfxButtons.btn_cancel'),\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n class: \"col\",\n label: _ctx.$t('sfxButtons.btn_save'),\n disable: !currentPassword.value || !unlockKey.value,\n type: \"submit\"\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogChangeUnlockKey.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogChangeUnlockKey.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QForm,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, unref as _unref, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3\" }\nconst _hoisted_2 = { class: \"text-body1 q-py-sm\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_5 = { class: \"q-ml-sm col\" }\nconst _hoisted_6 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed, ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogCheckBox',\n props: {\n title: {\n type: String,\n required: true,\n },\n\n content: {\n type: String,\n required: true,\n },\n\n html: {\n type: Boolean,\n default: false,\n },\n\n label: {\n type: String,\n },\n\n persistent: {\n type: Boolean,\n default: false,\n },\n\n classes: {\n type: String,\n },\n\n width: {\n type: Number,\n },\n\n confirmButtonText: {\n type: String,\n },\n\n rejectButtonText: {\n type: String,\n },\n\n confirmButtonClasses: {\n type: String,\n },\n\n rejectButtonClasses: {\n type: String,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst checkboxVal = ref(false)\n\nconst dialogWidthStyle = computed(() => {\n return props.width ? `width: ${props.width}px;` : \"\"\n})\n\n//endregion\n\n//region Function\n\nfunction handleDialogOk() {\n onDialogOK(checkboxVal.value)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: props.persistent,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: _normalizeClass([\"q-dialog-plugin\", props.classes]),\n style: _normalizeStyle(dialogWidthStyle.value)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(__props.title), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.content\n }, null, 8, _hoisted_3))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.content), 1)\n ], 64))\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: checkboxVal.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((checkboxVal).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.label\n }, null, 8, _hoisted_6))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.label), 1)\n ], 64))\n ])\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: __props.rejectButtonText,\n class: _normalizeClass([__props.rejectButtonClasses, \"col q-mr-sm\"]),\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"class\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: __props.confirmButtonText,\n class: _normalizeClass([__props.confirmButtonClasses, \"col\"]),\n onClick: handleDialogOk\n }, null, 8, [\"label\", \"class\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"class\", \"style\"])\n ]),\n _: 1\n }, 8, [\"persistent\", \"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogCheckBox.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogCheckBox.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { devtools } from \"@vue/devtools\"\nimport { defineStore } from \"pinia\"\nimport { Log } from \"src/util/classes/log\"\n\nexport interface DevtoolsStoreStoreType {\n devToolsInitiated: boolean\n devToolsHost: string\n devToolsPort: number\n}\n\nexport const useDevtoolsStore = defineStore(\"pinia-devtoolsStore\", {\n persist: false,\n\n state: (): DevtoolsStoreStoreType => ({\n devToolsInitiated: false,\n devToolsHost: \"localhost\",\n devToolsPort: 8098,\n }),\n\n actions: {\n configureDevtools(host: string, port = 8098) {\n this.devToolsHost = host\n this.devToolsPort = port\n },\n\n async connectDevtools() {\n if (!this.devToolsInitiated) {\n Log.debug({\n message: \"STARTING DEVTOOLS\",\n data: { host: this.devToolsHost, port: this.devToolsPort },\n })\n this.devToolsInitiated = true\n await devtools.connect(this.devToolsHost, this.devToolsPort)\n } else {\n Log.warning({ message: \"DEVTOOLS ALREADY INITIATED. RESTART APP TO RETRY.\" })\n }\n },\n },\n})\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = {\n key: 1,\n class: \"q-gutter-xs\"\n}\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport Router from \"src/router\"\nimport { useDevtoolsStore } from \"src/stores/devtoolsStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { confirmationDialog } from \"src/util/functions/dialogs\"\nimport { ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogConnectVueDevtools',\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst { t } = useI18n()\n\nconst devtoolsStore = useDevtoolsStore()\n\nconst host = ref(devtoolsStore.devToolsHost)\nconst port = ref(devtoolsStore.devToolsPort)\n\n//endregion\n\n//region Functions\n\nfunction reset() {\n // Set default values for connection\n // These parameters are what is used when calling devtools.connect() without arguments\n host.value = \"localhost\"\n port.value = 8098\n}\n\nfunction reload() {\n // router\n devtoolsStore.$reset()\n Router.go(0)\n}\n\nasync function confirm() {\n const dialogResult = await confirmationDialog({\n title: t(\"sfxDialogConnectVueDevtools.prompt_sure\"),\n content: t(\"sfxDialogConnectVueDevtools.devtools_terms\"),\n html: true,\n })\n\n if (dialogResult) {\n try {\n devtoolsStore.configureDevtools(host.value, port.value)\n devtoolsStore.connectDevtools()\n } catch (error) {\n Log.error({ message: \"Failed to connect to devtools.\", error })\n } finally {\n onDialogOK()\n }\n }\n}\n\nfunction cancel() {\n onDialogCancel()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n position: \"top\",\n \"transition-show\": \"slide-down\",\n \"transition-hide\": \"slide-up\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h5\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogConnectVueDevtools.title_devtools\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_form, {\n onSubmit: confirm,\n onReset: reset\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n (_unref(devtoolsStore).devToolsInitiated)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogConnectVueDevtools.devtools_already_initiated\")), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogConnectVueDevtools.devtools_instructions\")) + \" \", 1),\n _createVNode(SfxInput, {\n modelValue: host.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((host).value = $event)),\n label: _unref(format).capitalize(_ctx.$t('sfxDialogConnectVueDevtools.host')),\n required: \"\",\n \"error-message\": _ctx.$t('sfxDialogConnectVueDevtools.invalid_input')\n }, null, 8, [\"modelValue\", \"label\", \"error-message\"]),\n _createVNode(SfxInput, {\n modelValue: port.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((port).value = $event)),\n modelModifiers: { number: true },\n label: _unref(format).capitalize(_ctx.$t('sfxDialogConnectVueDevtools.port')),\n type: \"number\",\n min: \"1\",\n max: \"65535\",\n required: \"\",\n \"error-message\": _ctx.$t('sfxDialogConnectVueDevtools.invalid_input')\n }, null, 8, [\"modelValue\", \"label\", \"error-message\"])\n ]))\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: cancel,\n label: _unref(format).capitalize(_ctx.$t('sfxButtons.btn_cancel')),\n class: \"col-grow\"\n }, null, 8, [\"label\"]),\n (_unref(devtoolsStore).devToolsInitiated)\n ? (_openBlock(), _createBlock(SfxBtn, {\n key: 0,\n onClick: reload,\n label: _ctx.$t('sfxButtons.btn_reload_app'),\n color: \"warning\",\n class: \"col-grow\"\n }, null, 8, [\"label\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(SfxBtnOutline, {\n type: \"reset\",\n label: _unref(format).capitalize(_ctx.$t('sfxButtons.btn_reset')),\n class: \"col-grow\"\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtn, {\n type: \"submit\",\n label: _unref(format).capitalize(_ctx.$t('sfxButtons.btn_connect')),\n class: \"col-grow\"\n }, null, 8, [\"label\"])\n ], 64))\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogConnectVueDevtools.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogConnectVueDevtools.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QForm,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-py-sm\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"animated-ellipsis\"\n}\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { AppBaseDB, AppCommonDB, getCommonDB, getDB } from \"src/db/databases\"\nimport { useApiAbortStore } from \"src/stores/apiAbortStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport {\n fetchAttributeCharListData,\n fetchAttributeNumericListData,\n fetchAttributeSelectListData,\n fetchAttributeSelectOptionsListData,\n fetchAttributeTemporalListData,\n fetchCorrectiveWorkOnItemListData,\n fetchIdentifierListData,\n fetchIssueOnItemActionsListData,\n fetchIssueOnItemCommentListData,\n fetchIssueOnItemListData,\n fetchIssuePriorityListData,\n fetchItemAttributeCharValuesListData,\n fetchItemAttributeNumericValuesListData,\n fetchItemAttributeSelectValuesListData,\n fetchItemAttributeTemporalValuesListData,\n fetchItemClassListData,\n fetchItemListData,\n fetchRegularWorkOnItemListData,\n fetchUsersForWorkspaceListData,\n fetchWorkDomainWorkspaceListData,\n fetchWorkOrderCorrectiveItemCommentListData,\n fetchWorkOrderCorrectiveItemListData,\n fetchWorkOrderPriorityListData,\n fetchWorkOrderRegularItemCommentListData,\n fetchWorkOrderRegularItemListData,\n} from \"src/util/functions/entityData\"\nimport { showSuccessNotification } from \"src/util/functions/notifications\"\nimport { getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { HttpAbortConfig, HttpConfig } from \"src/util/types/dataModels/http\"\nimport { computed, onMounted, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogDataFetch',\n props: {\n workspaceId: {\n type: String,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst title = ref(t(\"sfxDialogDataFetch.title\"))\nconst explanation = t(\"sfxDialogDataFetch.explanation\")\nconst btnCancelLabel = t(\"sfxButtons.btn_cancel\")\nconst btnOkLabel = t(\"sfxButtons.btn_ok\")\n\nconst itemClassFinished = ref(undefined)\nconst attributesFinished = ref(undefined)\nconst itemListFinished = ref(undefined)\nconst itemAttributeValuesFinished = ref(undefined)\nconst issuesFinished = ref(undefined)\nconst workFinished = ref(undefined)\nconst commentsFinished = ref(undefined)\nconst identifiersFinished = ref(undefined)\nconst usersFinished = ref(undefined)\nconst allLoaded = ref(false)\nconst abortHandler: HttpAbortConfig = getNewAbortHandler(\"GET\")\n\nconst errorInFetches = computed(() =>\n [\n itemClassFinished.value,\n attributesFinished.value,\n itemListFinished.value,\n itemAttributeValuesFinished.value,\n issuesFinished.value,\n workFinished.value,\n commentsFinished.value,\n identifiersFinished.value,\n usersFinished.value,\n ].includes(null)\n)\n\nconst dataFetchList = computed<[string, boolean | null | undefined][]>(() => [\n [t(\"sfxDialogDataFetch.item_class\"), itemClassFinished.value],\n [t(\"sfxDialogDataFetch.attributes\"), attributesFinished.value],\n [t(\"sfxDialogDataFetch.items\"), itemListFinished.value],\n [t(\"sfxDialogDataFetch.item_attributes\"), itemAttributeValuesFinished.value],\n [t(\"sfxDialogDataFetch.issues\"), issuesFinished.value],\n [t(\"sfxDialogDataFetch.work\"), workFinished.value],\n [t(\"sfxDialogDataFetch.comments\"), commentsFinished.value],\n [t(\"sfxDialogDataFetch.identifiers\"), identifiersFinished.value],\n [t(\"sfxDialogDataFetch.users\"), usersFinished.value],\n])\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n try {\n abortHandler.batchRequest = true\n const config: HttpConfig = { abortHandler }\n const db = await getDB()\n const commonDb = await getCommonDB()\n\n await Promise.all([\n itemClassData(config, db),\n attributesData(config, db),\n itemData(config, db),\n itemAttributeData(config, db),\n issuesData(config, db),\n workData(config, db),\n commentData(config, db),\n identifierData(config, db),\n userData(config, commonDb),\n ])\n\n allLoaded.value = true\n } catch {}\n})\n\n//endregion\n\n//region Functions\n\nasync function itemClassData(config: HttpConfig, db: AppBaseDB) {\n try {\n itemClassFinished.value = await fetchItemClassListData(config, db)\n } catch {\n itemClassFinished.value = null\n }\n}\n\nasync function attributesData(config: HttpConfig, db: AppBaseDB) {\n try {\n const attributesTotal = await Promise.all([\n fetchAttributeCharListData(config, db),\n fetchAttributeNumericListData(config, db),\n fetchAttributeSelectListData(config, db),\n fetchAttributeSelectOptionsListData(config, db),\n fetchAttributeTemporalListData(config, db),\n ])\n\n attributesFinished.value = attributesTotal.every(Boolean)\n } catch {\n attributesFinished.value = null\n }\n}\n\nasync function itemData(config: HttpConfig, db: AppBaseDB) {\n try {\n itemListFinished.value = await fetchItemListData(config, db)\n } catch {\n itemListFinished.value = null\n }\n}\n\nasync function itemAttributeData(config: HttpConfig, db: AppBaseDB) {\n try {\n const itemAttributeValuesTotal = await Promise.all([\n fetchItemAttributeCharValuesListData(config, db),\n fetchItemAttributeNumericValuesListData(config, db),\n fetchItemAttributeSelectValuesListData(config, db),\n fetchItemAttributeTemporalValuesListData(config, db),\n ])\n\n itemAttributeValuesFinished.value = itemAttributeValuesTotal.every(Boolean)\n } catch {\n itemAttributeValuesFinished.value = null\n }\n}\n\nasync function issuesData(config: HttpConfig, db: AppBaseDB) {\n try {\n const issueAll = await Promise.all([\n fetchIssuePriorityListData(config, db),\n fetchIssueOnItemListData(config, db),\n fetchIssueOnItemActionsListData(config, db),\n ])\n\n issuesFinished.value = issueAll.every(Boolean)\n } catch {\n issuesFinished.value = null\n }\n}\n\nasync function workData(config: HttpConfig, db: AppBaseDB) {\n try {\n const workTotal = await Promise.all([\n fetchWorkOrderPriorityListData(config, db),\n fetchCorrectiveWorkOnItemListData(config, db),\n fetchRegularWorkOnItemListData(config, db),\n fetchWorkDomainWorkspaceListData(config, db),\n fetchWorkOrderCorrectiveItemListData(config, db),\n fetchWorkOrderRegularItemListData(config, db),\n ])\n\n workFinished.value = workTotal.every(Boolean)\n } catch {\n workFinished.value = null\n }\n}\n\nasync function commentData(config: HttpConfig, db: AppBaseDB) {\n try {\n const commentTotal = await Promise.all([\n fetchIssueOnItemCommentListData(config, db),\n fetchWorkOrderCorrectiveItemCommentListData(config, db),\n fetchWorkOrderRegularItemCommentListData(config, db),\n ])\n\n commentsFinished.value = commentTotal.every(Boolean)\n } catch {\n commentsFinished.value = null\n }\n}\n\nasync function identifierData(config: HttpConfig, db: AppBaseDB) {\n try {\n identifiersFinished.value = await fetchIdentifierListData(config, db)\n } catch {\n identifiersFinished.value = null\n }\n}\n\nasync function userData(config: HttpConfig, db: AppCommonDB) {\n try {\n usersFinished.value = await fetchUsersForWorkspaceListData(props.workspaceId, config, db)\n } catch {\n usersFinished.value = null\n }\n}\n\nfunction handleCancel() {\n unwatchDataLoad()\n abortHandler.controller.abort()\n const apiAbortStore = useApiAbortStore()\n apiAbortStore.removeController(abortHandler.id)\n onDialogOK(false)\n}\n\nfunction handleOk() {\n onDialogOK(true)\n}\n\n//endregion\n\n//region Setup Code\n\nconst unwatchDataLoad = watch(\n () => allLoaded.value,\n (dataLoaded) => {\n if (dataLoaded && !errorInFetches.value) {\n showSuccessNotification(t(\"notifications.data_fetched\"))\n handleOk()\n }\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h3 flex justify-between\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(title.value), 1),\n _createVNode(_component_q_icon, {\n name: _unref(Icons).DOWNLOAD\n }, null, 8, [\"name\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(dataFetchList.value, (value, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"row items-center justify-between\"\n }, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"span\", {\n innerHTML: value[0]\n }, null, 8, _hoisted_2),\n (value[1] === undefined)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3))\n : _createCommentVNode(\"\", true)\n ]),\n (value[1] === null)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n name: _unref(Icons).REJECT,\n color: \"negative\",\n class: \"text-h3\"\n }, null, 8, [\"name\"]))\n : (value[1] !== undefined)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 1,\n name: _unref(Icons).ACCEPT,\n color: \"positive\",\n class: \"text-h3\"\n }, null, 8, [\"name\"]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 text-italic text-inactive\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(explanation)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n (!allLoaded.value)\n ? (_openBlock(), _createBlock(SfxBtnOutline, {\n key: 0,\n onClick: handleCancel,\n label: _unref(btnCancelLabel),\n class: \"col\"\n }, null, 8, [\"label\"]))\n : (_openBlock(), _createBlock(SfxBtn, {\n key: 1,\n onClick: handleOk,\n label: _unref(btnOkLabel),\n class: \"col\"\n }, null, 8, [\"label\"]))\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogDataFetch.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogDataFetch.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QIcon,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h5\" }\nconst _hoisted_2 = { class: \"text-body1\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { class: \"text-h5\" }\nconst _hoisted_5 = { class: \"text-body1\" }\nconst _hoisted_6 = { class: \"text-h5\" }\nconst _hoisted_7 = { class: \"text-body1\" }\nconst _hoisted_8 = [\"innerHTML\"]\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogDevicePermission',\n setup(__props) {\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: true,\n class: \"sfx-dialog-permission\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createTextVNode(\". \"),\n _createVNode(_component_q_card_section, { class: \"row flex-center text-h3\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(t)(\"sfxDialogDevicePermission.title\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-center text-body1 q-pb-none\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_unref(t)(\"sfxDialogDevicePermission.info_text_1\")), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(t)(\"sfxDialogDevicePermission.info_text_2\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"row flex-center q-pb-none\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).CHECKBOX_CHECKED,\n size: \"96px\",\n class: \"text-line-and-filler\"\n }, null, 8, [\"name\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", _hoisted_1, [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogDevicePermission.video_title\")) + \" \", 1),\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n innerHTML: _unref(t)('sfxDialogDevicePermission.video_text_1')\n }, null, 8, _hoisted_3),\n _createElementVNode(\"li\", null, _toDisplayString(_unref(t)(\"sfxDialogDevicePermission.video_text_2\")), 1)\n ])\n ]),\n _createElementVNode(\"li\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogDevicePermission.storage_title\")) + \" \", 1),\n _createElementVNode(\"ul\", _hoisted_5, [\n _createElementVNode(\"li\", null, _toDisplayString(_unref(t)(\"sfxDialogDevicePermission.storage_text\")), 1)\n ])\n ]),\n _createElementVNode(\"li\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogDevicePermission.location_title\")) + \" \", 1),\n _createElementVNode(\"ul\", _hoisted_7, [\n _createElementVNode(\"li\", {\n innerHTML: _unref(t)('sfxDialogDevicePermission.location_text')\n }, null, 8, _hoisted_8)\n ])\n ])\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(format).capitalize(_unref(t)('sfxButtons.btn_ok')),\n class: \"col-grow\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogDevicePermission.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogDevicePermission.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QIcon,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxIssueAdditionalRequirements from \"src/components/issue/SfxIssueAdditionalRequirements.vue\"\nimport SfxIssueCorrectiveAction from \"src/components/issue/SfxIssueCorrectiveAction.vue\"\nimport SfxIssueTimeRequirements from \"src/components/issue/SfxIssueTimeRequirements.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { Log } from \"src/util/classes/log\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { patchIssuesOnItemAction, postIssuesOnItemAction } from \"src/util/http/csi/issues\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { IssuesOnItemAction } from \"src/util/types/dataModels/issue\"\nimport { onMounted, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogEditCorrectionInfo',\n props: {\n issueId: {\n type: String,\n required: true,\n },\n\n issueOnItemAction: {\n type: Object as PropType,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogCancel, onDialogOK } = useDialogPluginComponent()\n\nconst title = t(\"sfxDialogEditCorrectionInfo.title\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnSave = t(\"sfxButtons.btn_save\")\n\nconst correctiveAction = ref()\nconst timeEstimate = ref()\nconst requiresIsolation = ref()\nconst requiresShutdown = ref()\n\nconst correctiveActionEl = ref()\nconst correctiveTimeRequirementsEl = ref()\nconst correctiveAdditionalRequirementsEl = ref()\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n correctiveAction.value = props.issueOnItemAction?.text\n timeEstimate.value = props.issueOnItemAction?.time_estimate\n requiresIsolation.value = props.issueOnItemAction?.isolation_required\n requiresShutdown.value = props.issueOnItemAction?.shutdown_required\n})\n\n//endregion\n\n//region Functions\n\nasync function submitData() {\n try {\n if (!correctiveAction.value) return\n\n const action: PayloadEntity = {\n text: correctiveAction.value,\n time_estimate: timeEstimate.value,\n isolation_required: requiresIsolation.value,\n shutdown_required: requiresShutdown.value,\n issue: props.issueId,\n }\n\n const issueAction = await (props.issueOnItemAction\n ? patchIssuesOnItemAction({}, props.issueOnItemAction?.id, action)\n : postIssuesOnItemAction({}, action))\n\n if (issueAction) {\n const db = await getDB()\n await db.issue_on_item_actions.upsert(issueAction)\n\n onDialogOK(issueAction)\n showSuccessNotification(t(\"sfxDialogEditCorrectionInfo.issue_actions_updated\"))\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_updating_corrective_action\"))\n Log.error({ message: \"An error occurred while updating corrective action(s)\", error })\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => correctiveActionEl.value,\n () => {\n if (correctiveAction.value) correctiveActionEl.value?.forceShow()\n\n if (timeEstimate.value && timeEstimate.value !== \"00:00:00\") {\n correctiveTimeRequirementsEl.value?.forceShow()\n }\n\n if (requiresIsolation.value || requiresShutdown.value) {\n correctiveAdditionalRequirementsEl.value?.forceShow()\n }\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_form, { onSubmit: submitData }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-py-none\" }, {\n default: _withCtx(() => [\n _createVNode(SfxIssueCorrectiveAction, {\n ref_key: \"correctiveActionEl\",\n ref: correctiveActionEl,\n modelValue: correctiveAction.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((correctiveAction).value = $event)),\n required: \"\"\n }, null, 8, [\"modelValue\"]),\n _createVNode(SfxIssueTimeRequirements, {\n ref_key: \"correctiveTimeRequirementsEl\",\n ref: correctiveTimeRequirementsEl,\n \"time-estimate\": timeEstimate.value,\n \"onUpdate:timeEstimate\": _cache[1] || (_cache[1] = ($event: any) => ((timeEstimate).value = $event))\n }, null, 8, [\"time-estimate\"]),\n _createVNode(SfxIssueAdditionalRequirements, {\n ref_key: \"correctiveAdditionalRequirementsEl\",\n ref: correctiveAdditionalRequirementsEl,\n \"isolation-checked\": requiresIsolation.value,\n \"onUpdate:isolationChecked\": _cache[2] || (_cache[2] = ($event: any) => ((requiresIsolation).value = $event)),\n \"shutdown-checked\": requiresShutdown.value,\n \"onUpdate:shutdownChecked\": _cache[3] || (_cache[3] = ($event: any) => ((requiresShutdown).value = $event))\n }, null, 8, [\"isolation-checked\", \"shutdown-checked\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n type: \"submit\",\n label: _unref(btnSave),\n disable: !correctiveAction.value,\n class: \"col\"\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogEditCorrectionInfo.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogEditCorrectionInfo.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QForm,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-field-label text-caption\" }\nconst _hoisted_2 = { class: \"text-body1\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { class: \"flex no-wrap items-center gap-md\" }\nconst _hoisted_7 = [\"innerHTML\"]\n\nimport * as Sentry from \"@sentry/browser\"\nimport { SendFeedbackParams } from \"@sentry/types/types/feedback/sendFeedback\"\nimport { sanitize } from \"dompurify\"\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxTextarea from \"src/components/input/SfxTextarea.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport router from \"src/router\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { computed, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst MAX_SENTRY_TAG_VALUE = 200\n\nconst CHECKBOX_SIZE = \"56px\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogFeedback',\n props: {\n context: {\n type: String,\n },\n\n designation: {\n type: String,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogCancel, onDialogOK } = useDialogPluginComponent()\n\nconst { t } = useI18n()\nconst userStore = useUserStore()\nconst authStore = useAuthStore()\n\n// 200 characters is the limit of Sentry tags\n// If it exceeds the character limit, the tag is ignored\nconst titleLabel = t(\"sfxDialogFeedback.title\")\nconst contextLabel = t(\"sfxDialogFeedback.context\")\nconst subjectLabel = t(\"sfxDialogFeedback.subject_label\")\nconst longTextLabel = t(\"sfxDialogFeedback.long_text_label\")\nconst noticeLabel = t(\"sfxDialogFeedback.notice_label\", { company: LABELS.COMPANY })\nconst bugLabel = t(\"sfxDialogFeedback.bug_label\")\nconst sendLabel = t(\"sfxButtons.btn_send\")\nconst cancelLabel = t(\"sfxButtons.btn_cancel\")\n\nconst subjectModel = ref(\"\")\nconst longTextModel = ref(\"\")\nconst isBug = ref(false)\n\nconst detailedMessage = computed(() => {\n let message = subjectModel.value\n\n if (longTextModel.value) {\n // Adding double new line for readability\n message += \"\\r\\n\\r\\n\" + longTextModel.value\n }\n\n return message\n})\n\nconst piniaTopNavigationPath = computed(() => useTopNavigationStore().title)\nconst currentRouterPath = computed(() => router.currentRoute.value.name as string)\n\nconst contextWithDefaults = computed(\n () => props.context || piniaTopNavigationPath.value || currentRouterPath.value\n)\nconst cleanContext = computed(() => sanitize(contextWithDefaults.value || \"\"))\nconst cleanDesignation = computed(() => sanitize(props.designation || \"\"))\n\n//endregion\n\n//region Functions\n\nfunction saveData() {\n const feedbackData: SendFeedbackParams = {\n message: detailedMessage.value,\n name: userStore.getFullName,\n email: userStore.email,\n }\n\n const tags: Record = {\n context: cleanContext.value.slice(0, MAX_SENTRY_TAG_VALUE),\n userUUID: userStore.id,\n bug: isBug.value.toString(),\n piniaTopNavigationPath: piniaTopNavigationPath.value,\n currentRouterPath: currentRouterPath.value,\n }\n\n if (authStore.selectedWorkspace?.id) {\n tags.workspaceUUID = authStore.selectedWorkspace.id\n }\n\n if (cleanDesignation.value) {\n // While our designations currently have a limit of 100, better be safe and try to future-proof it a little\n tags.designation = cleanDesignation.value.slice(0, MAX_SENTRY_TAG_VALUE)\n }\n\n // We don't have Sentry enabled, we are probably in development mode.\n // So we just print out the feedback in the console.\n if (Sentry.getClient() === undefined) {\n console.table(feedbackData)\n console.table(tags)\n return\n }\n\n feedbackData.tags = tags\n\n const result = Sentry.captureFeedback(feedbackData)\n\n if (result) {\n showSuccessNotification(t(\"sfxDialogFeedback.feedback_success\"))\n onDialogOK()\n } else {\n showErrorNotification(t(\"sfxDialogFeedback.feedback_error\"))\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.context,\n (contextVal) => {\n if (!contextVal) {\n Log.warning({\n message: \"Forgotten Feedback value\",\n data: {\n piniaTopNavigationPath: piniaTopNavigationPath.value,\n currentRouterPath: currentRouterPath.value,\n },\n })\n }\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-feedback\",\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(titleLabel)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(contextLabel)), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"b\", {\n class: \"text-info\",\n innerHTML: cleanContext.value\n }, null, 8, _hoisted_3),\n _createTextVNode(\"  \"),\n (props.designation)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: cleanDesignation.value\n }, null, 8, _hoisted_4))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", { innerHTML: _unref(noticeLabel) }, null, 8, _hoisted_5)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_q_checkbox, {\n size: CHECKBOX_SIZE,\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: isBug.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((isBug).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", {\n innerHTML: _unref(bugLabel),\n class: \"text-body1\"\n }, null, 8, _hoisted_7)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n modelValue: subjectModel.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((subjectModel).value = $event)),\n required: \"\",\n class: \"q-mb-sm hide-bottom-space\",\n label: _unref(subjectLabel),\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxTextarea, {\n modelValue: longTextModel.value,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((longTextModel).value = $event)),\n placeholder: _unref(longTextLabel)\n }, null, 8, [\"modelValue\", \"placeholder\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"flex full-width gap-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"col\",\n label: _unref(cancelLabel),\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n class: \"col\",\n type: \"submit\",\n label: _unref(sendLabel),\n disable: !subjectModel.value,\n onClick: saveData\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogFeedback.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogFeedback.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"col\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getEntityWithDesignation } from \"src/util/functions/identifier\"\nimport { IdentifierAssociationType } from \"src/util/types/dataModels/identifier\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogIdentifierExists',\n props: {\n entityOldType: {\n type: String as PropType,\n required: true,\n },\n\n entityOldName: {\n type: String,\n required: true,\n },\n\n entityNewType: {\n type: String as PropType,\n required: true,\n },\n\n entityNewName: {\n type: String,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogHide, onDialogCancel, onDialogOK } = useDialogPluginComponent()\n\nconst oldEntity = computed(() => getEntityWithDesignation(props.entityOldType, props.entityOldName))\nconst newEntity = computed(() => getEntityWithDesignation(props.entityNewType, props.entityNewName))\n\nconst title = t(\"sfxDialogIdentifier.title_associate\")\nconst previousAssociation = t(\"sfxDialogIdentifier.text1_associate\", {\n entity_old: oldEntity.value,\n})\nconst newAssociation = t(\"sfxDialogIdentifier.text2_associate\", {\n entity_new: newEntity.value,\n})\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnChangeAssociation = t(\"sfxButtons.btn_association_change\")\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n persistent: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 row justify-between\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1),\n _createVNode(_component_q_icon, {\n name: _unref(Icons).INFORMATION\n }, null, 8, [\"name\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", { innerHTML: _unref(previousAssociation) }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", { innerHTML: _unref(newAssociation) }, null, 8, _hoisted_3)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(btnChangeAssociation),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogIdentifierExists.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogIdentifierExists.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QIcon,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogIdentifierUnknown',\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 row justify-between\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"sfxDialogIdentifier.title_unknown\")), 1),\n _createVNode(_component_q_icon, {\n name: _unref(Icons).INFORMATION\n }, null, 8, [\"name\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", {\n innerHTML: _ctx.$t('sfxDialogIdentifier.text1_unknown')\n }, null, 8, _hoisted_1),\n _createElementVNode(\"p\", {\n innerHTML: _ctx.$t('sfxDialogIdentifier.text2_unknown')\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _ctx.$t('sfxButtons.btn_understood'),\n class: \"col-grow\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogIdentifierUnknown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogIdentifierUnknown.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QIcon,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"image-delete\" }\nconst _hoisted_3 = { class: \"column flex-center q-pa-sm\" }\nconst _hoisted_4 = { class: \"absolute-full column flex-center transparent image-gallery-item--error\" }\nconst _hoisted_5 = { class: \"text-error\" }\nconst _hoisted_6 = { class: \"text-h4 text-navy-base q-pt-sm\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst imageSize = \"Not Working\"\n\n//endregion\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogImageDelete',\n props: {\n entity: {\n type: String,\n required: true,\n },\n\n image: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst title = t(\"sfxDialogImageDelete.title\")\nconst body_warning = t(\"sfxDialogImageDelete.body_warning\")\nconst body_description = t(\"sfxDialogImageDelete.body_description\", { entity: props.entity })\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnRemove = t(\"sfxButtons.btn_remove\")\n\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-border-warning\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 text-negative q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(body_description) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 text-negative q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"b\", null, _toDisplayString(_unref(body_warning)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-dialog-list-manager-elements q-pb-none\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_img, {\n src: __props.image.src,\n height: \"100px\",\n width: \"100px\",\n class: \"image-delete--image\"\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: \"25px\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_5, _toDisplayString(_ctx.$t(\"sfxImage.no_image_small\")), 1)\n ])\n ]),\n _: 1\n }, 8, [\"src\"]),\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(__props.image.attachmentData.name + \".\" + __props.image.attachmentData.extension), 1),\n _createElementVNode(\"span\", { class: \"text-body2 text-navy-base\" }, _toDisplayString(imageSize) + \" MB \")\n ])\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(btnRemove),\n class: \"col bg-negative\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogImageDelete.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogImageDelete.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QImg,QIcon,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, Fragment as _Fragment, createElementVNode as _createElementVNode, withKeys as _withKeys, createVNode as _createVNode, unref as _unref, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-pb-md q-pt-sm text-body1\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxTextarea from \"src/components/input/SfxTextarea.vue\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogInput',\n props: {\n modelValue: {\n type: Boolean,\n default: undefined,\n },\n\n title: {\n type: String,\n },\n\n content: {\n type: String,\n },\n\n html: {\n type: Boolean,\n default: false,\n },\n\n persistent: {\n type: Boolean,\n default: false,\n },\n\n inputRequired: {\n type: Boolean,\n default: false,\n },\n\n inputInitial: {\n type: String,\n },\n\n inputTextArea: {\n type: Boolean,\n default: false,\n },\n\n label: {\n type: String,\n },\n\n classes: {\n type: String,\n },\n\n titleClass: {\n type: String,\n },\n\n width: {\n type: Number,\n },\n\n confirmButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_confirm\"))\n },\n },\n\n confirmButtonClasses: {\n type: String,\n },\n\n rejectButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_ok\"))\n },\n },\n\n rejectButtonClasses: {\n type: String,\n },\n},\n emits: [...useDialogPluginComponent.emits, \"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst input = ref(props.inputInitial || \"\")\nconst inputRef = ref(null)\n\nconst dialogWidthStyle = computed(() => {\n return props.width ? `width: ${props.width}px;` : \"\"\n})\n\n//endregion\n\n//region Function\n\nfunction handleDialogOk() {\n if (props.inputRequired) {\n // Allow only if the input is valid\n if (inputRef.value?.validate()) onDialogOK(input.value)\n } else {\n onDialogOK(input.value)\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n persistent: props.persistent,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((model).value = $event))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: _normalizeClass([\"q-dialog-plugin\", props.classes]),\n style: _normalizeStyle(dialogWidthStyle.value)\n }, {\n default: _withCtx(() => [\n (props.title)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: _normalizeClass([props.titleClass, \"q-dialog__title text-h3\"])\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.title), 1)\n ]),\n _: 1\n }, 8, [\"class\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.content\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.content), 1)\n ], 64))\n ]),\n (props.inputTextArea === false)\n ? (_openBlock(), _createBlock(SfxInput, {\n key: 0,\n ref_key: \"inputRef\",\n ref: inputRef,\n class: \"q-pt-sm\",\n modelValue: input.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((input).value = $event)),\n required: props.inputRequired,\n label: props.label,\n onKeyup: _withKeys(handleDialogOk, [\"enter\"]),\n autofocus: \"\",\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"required\", \"label\"]))\n : _createCommentVNode(\"\", true),\n (props.inputTextArea === true)\n ? (_openBlock(), _createBlock(SfxTextarea, {\n key: 1,\n ref_key: \"inputRef\",\n ref: inputRef,\n class: \"q-pt-sm\",\n modelValue: input.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((input).value = $event)),\n required: props.inputRequired,\n label: props.label,\n autofocus: \"\",\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"required\", \"label\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: props.rejectButtonText,\n class: _normalizeClass([\"col q-mr-sm\", __props.rejectButtonClasses])\n }, null, 8, [\"onClick\", \"label\", \"class\"]),\n _createVNode(SfxBtn, {\n onClick: handleDialogOk,\n label: props.confirmButtonText,\n class: _normalizeClass([\"col\", __props.confirmButtonClasses])\n }, null, 8, [\"label\", \"class\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"class\", \"style\"])\n ]),\n _: 1\n }, 8, [\"onHide\", \"persistent\", \"modelValue\"]))\n}\n}\n\n})","import script from \"./SfxDialogInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogInput.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_2 = { class: \"text-h4\" }\n\nimport SfxCardCondensed from \"src/components/card/SfxCardCondensed.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getAttachmentContent } from \"src/util/functions/attachments\"\nimport { getIssuePriorityColor } from \"src/util/functions/issuePriority\"\nimport { getWorkOrderPriorityColor } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { ItemCardData } from \"src/util/types/dataModels/item\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { computed, PropType, ref, watch } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardItemCondensed',\n props: {\n item: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst cacheStore = useCacheStore()\nconst storeItem = ref()\n\nconst itemClassRaw = ref(props.item.itemClassData)\nconst itemIconsRaw = ref(props.item.icons)\nconst itemThumbnailRaw = ref(props.item.thumbnail)\n\nconst itemThumbnail = ref()\nconst itemClassDesignation = computed(() => itemClassRaw.value?.designation)\nconst iconRow = computed(() => itemIconsRaw.value)\nconst workDone = computed(() => props.item?.regularWork?.conclusion === \"accepted\")\n\n//endregion\n\n//region Functions\n\nfunction assignData(item: ItemCardData) {\n storeItem.value = cacheStore.itemCard.get(item.itemData.id)\n\n assignItemClass(item)\n assignIconRow(item)\n assignThumbnail(item)\n}\n\nfunction assignItemClass(item: ItemCardData) {\n // We already have the data so skip it\n if (itemClassRaw.value) return\n\n const itemClass = cacheStore.item_class.get(item.itemData.item_class)\n\n itemClassRaw.value = itemClass\n\n if (storeItem.value) storeItem.value.itemClassData = itemClass\n}\n\nasync function assignThumbnail(item: ItemCardData) {\n // We already have the data so skip it\n if (itemThumbnailRaw.value !== undefined) return\n\n // There is no image, so no point continuing\n if (item.itemData.main_image === null) return\n\n const attachment = cacheStore.attachment.get(item.itemData.main_image)\n\n if (attachment) {\n itemThumbnailRaw.value = attachment\n\n if (storeItem.value) storeItem.value.thumbnail = attachment\n }\n}\n\nfunction assignIconRow(item: ItemCardData) {\n if (itemIconsRaw.value !== undefined) return\n\n // From left to right, the icon order is:\n // 1. Highest Issue priority\n // 2. Highest Work Order priority\n // 3. Change requests\n\n const iconRow: IconRowElement[] = []\n iconRow.push(\n {\n name: Icons.ISSUE,\n color: Boolean(item.issuePriorityData)\n ? getIssuePriorityColor(item.issuePriorityData!)\n : undefined,\n },\n {\n name: Icons.WORK_ORDERS,\n color: Boolean(item.workOrderPriorityData)\n ? getWorkOrderPriorityColor(item.workOrderPriorityData!)\n : undefined,\n }\n )\n\n // TODO: Add this icon when we have change requests\n // const dataChangeRequestIcon = {\n // name: Icons.CHANGE_REQUEST,\n // }\n // iconRow.push(dataChangeRequestIcon)\n\n itemIconsRaw.value = iconRow\n\n if (storeItem.value) storeItem.value.icons = iconRow\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => itemThumbnailRaw.value,\n async (thumbnail) => {\n itemThumbnail.value = thumbnail\n ? await getAttachmentContent(thumbnail, \"item\", props.item?.itemData.id)\n : undefined\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item,\n (newItem) => {\n assignData(newItem)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCardCondensed, {\n \"img-src\": itemThumbnail.value,\n \"icon-row\": iconRow.value,\n hasImg: \"\",\n done: workDone.value\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(itemClassDesignation.value), 1),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_truncate_middle, props.item?.itemData.designation]\n ]),\n _createVNode(SfxDataPoint, {\n label: _ctx.$t('sfxCard.item_id'),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.item.itemData.item_id), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }, 8, [\"img-src\", \"icon-row\", \"done\"]))\n}\n}\n\n})","import script from \"./SfxCardItemCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardItemCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardItemCondensed from \"src/components/card/SfxCardItemCondensed.vue\"\nimport { ItemCardData } from \"src/util/types/dataModels/item\"\nimport { PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogItemClone',\n props: {\n item: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst { t } = useI18n()\n\nconst title = t(\"sfxDialogItemClone.title\")\nconst content = t(\"sfxDialogItemClone.content\")\nconst btnClone = t(\"sfxButtons.btn_confirm\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-mb-sm\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-none\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(content) }, null, 8, _hoisted_1),\n _createVNode(SfxCardItemCondensed, {\n item: props.item,\n clickable: false,\n class: \"q-my-lg\"\n }, null, 8, [\"item\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-pt-none q-mx-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(btnClone),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogItemClone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogItemClone.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, Fragment as _Fragment, unref as _unref, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport { computed } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogMessage',\n props: {\n modelValue: {\n type: Boolean,\n default: undefined,\n },\n\n title: {\n type: String,\n },\n\n content: {\n type: String,\n },\n\n html: {\n type: Boolean,\n default: false,\n },\n\n persistent: {\n type: Boolean,\n default: false,\n },\n\n buttonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_ok\"))\n },\n },\n\n closeIcon: {\n type: String,\n },\n},\n emits: [...useDialogPluginComponent.emits, \"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst { dialogRef, onDialogHide, onDialogOK } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n const _directive_close_popup = _resolveDirective(\"close-popup\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n persistent: props.persistent,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n (props.title)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: \"q-dialog__title row items-center text-h3 q-pb-xs\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.title) + \" \", 1),\n (props.closeIcon)\n ? (_openBlock(), _createBlock(_component_q_space, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (props.closeIcon)\n ? _withDirectives((_openBlock(), _createBlock(_component_q_icon, {\n key: 1,\n name: props.closeIcon,\n size: \"24px\"\n }, null, 8, [\"name\"])), [\n [_directive_close_popup]\n ])\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (props.content)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 1,\n class: \"text-body1 sfx-message-content\"\n }, {\n default: _withCtx(() => [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.content\n }, null, 8, _hoisted_1))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.content), 1)\n ], 64))\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: props.buttonText,\n class: \"col-grow\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\", \"persistent\", \"modelValue\"]))\n}\n}\n\n})","import script from \"./SfxDialogMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';import ClosePopup from 'quasar/src/directives/close-popup/ClosePopup.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QSpace,QIcon,QCardActions});qInstall(script, 'directives', {ClosePopup});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-bold\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxCardIssueEventWorkRejected from \"src/components/card/issue-event/SfxCardIssueEventWorkRejected.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport SfxImageGallerySmall from \"src/components/images/SfxImageGallerySmall.vue\"\nimport { getImageAttachmentsFromAttachmentIds, getImages } from \"src/util/functions/attachments\"\nimport { getCorrectiveWorkOnItemData } from \"src/util/functions/performedWork\"\nimport { ImageGalleryItem } from \"src/util/types/components/sfxImageGallery\"\nimport { IssueCorrectiveWorkRejectedEventCard } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { onMounted, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogRejectedCorrectiveWork',\n props: {\n issueEventCard: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\n\nconst title = t(\"sfxDialogRejectedCorrectiveWork.title\")\nconst labelWorkStatement = t(\"sfxDialogRejectedCorrectiveWork.label_corrective_work_statement\")\nconst btnGotIt = t(\"sfxButtons.btn_got_it_period\")\n\nconst correctiveWork = ref()\nconst images = ref([])\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n if (props.issueEventCard) {\n correctiveWork.value = await getCorrectiveWorkOnItemData(props.issueEventCard.entityId)\n await getImagesFromAttachments()\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function getImagesFromAttachments() {\n if (correctiveWork.value?.attachments && correctiveWork.value.attachments.length > 0) {\n try {\n const imgAttachments = await getImageAttachmentsFromAttachmentIds(\n correctiveWork.value.attachments\n )\n images.value = await getImages(\n imgAttachments,\n \"corrective_work_item\",\n correctiveWork.value.id\n )\n } catch {\n // If it fails, then there are no images to show, so nothing really breaks, and we get the sentry error\n }\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-rejected-corrective-work\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-pb-lg\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n (props.issueEventCard)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: \"q-pb-lg\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxCardIssueEventWorkRejected, {\n \"issue-event-card\": props.issueEventCard,\n \"show-hand\": false,\n manager: \"\"\n }, null, 8, [\"issue-event-card\"])\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_section, { class: \"q-pb-lg\" }, {\n default: _withCtx(() => [\n _createVNode(SfxDataPoint, {\n label: _unref(labelWorkStatement),\n manager: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(correctiveWork.value?.title), 1),\n _createElementVNode(\"div\", null, _toDisplayString(correctiveWork.value?.description), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxImageGallerySmall, {\n \"image-src\": images.value,\n \"entity-id\": props.issueEventCard.entityId,\n \"entity-type\": \"corrective_work_item\",\n \"disable-edit-image\": \"\"\n }, null, 8, [\"image-src\", \"entity-id\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n class: \"full-width\",\n label: _unref(btnGotIt),\n onClick: _unref(onDialogCancel)\n }, null, 8, [\"label\", \"onClick\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogRejectedCorrectiveWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogRejectedCorrectiveWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withKeys as _withKeys } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3 text-negative\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"text-body1 q-pb-sm\" }\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_7 = [\"innerHTML\"]\nconst _hoisted_8 = { class: \"text-uppercase text-weight-bold text-error\" }\nconst _hoisted_9 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_10 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { SfxDialogCheckedAndInput } from \"src/util/types/components/sfxDialogCheckedAndInput\"\nimport { ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogRejectPerformedWork',\n props: {\n withIssues: {\n type: Boolean,\n default: false,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst { t } = useI18n()\nconst title = t(\"sfxDialogRejectWork.title\")\nconst contentConfirm = t(\"sfxDialogRejectWork.content_confirm\")\nconst contentIssueOne = t(\"sfxDialogRejectWork.content_issue_one\")\nconst contentIssueTwo = t(\"sfxDialogRejectWork.content_issue_two\")\nconst contentIssueThree = t(\"sfxDialogRejectWork.content_issue_three\")\nconst contentUndone = t(\"sfxDialogRejectWork.content_undone\")\nconst inputLabel = t(\"sfxDialogRejectWork.input_label\")\nconst checkboxLabel = t(\"sfxDialogRejectWork.checkbox_content\")\nconst confirmButtonText = t(\"sfxButtons.btn_confirm\")\nconst rejectButtonText = t(\"sfxButtons.btn_cancel\")\nconst widthDialog = { width: \"550px\" } // Because of the styles in Figma\n\nconst input = ref()\nconst inputRef = ref(null)\nconst checkboxVal = ref(false)\nconst payload = ref()\n\n//endregion\n\n//region Functions\n\nfunction handleDialogOk() {\n if (inputRef.value?.validate()) {\n payload.value = { input: input.value || null, checked: checkboxVal.value }\n onDialogOK(payload.value)\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: \"q-dialog-plugin sfx-dialog-border-warning q-pa-sm\",\n style: widthDialog\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"text-body1 q-py-sm\",\n innerHTML: _unref(contentConfirm)\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n (props.withIssues)\n ? (_openBlock(), _createBlock(_component_q_card_section, { key: 0 }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", { innerHTML: _unref(contentIssueOne) }, null, 8, _hoisted_4),\n _hoisted_5,\n _createElementVNode(\"span\", null, _toDisplayString(_unref(contentIssueTwo)), 1),\n _hoisted_6,\n _createElementVNode(\"span\", { innerHTML: _unref(contentIssueThree) }, null, 8, _hoisted_7)\n ])\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(contentUndone)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n ref_key: \"inputRef\",\n ref: inputRef,\n modelValue: input.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((input).value = $event)),\n class: \"q-pt-sm\",\n autogrow: \"\",\n required: \"\",\n autofocus: \"\",\n \"hide-bottom-space\": \"\",\n label: _unref(inputLabel),\n onKeyup: _withKeys(handleDialogOk, [\"enter\"])\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }),\n (props.withIssues)\n ? (_openBlock(), _createBlock(_component_q_card_section, { key: 1 }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: checkboxVal.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((checkboxVal).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", {\n class: \"q-ml-sm\",\n innerHTML: _unref(checkboxLabel)\n }, null, 8, _hoisted_10)\n ])\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(rejectButtonText),\n class: \"col q-mr-sm\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: handleDialogOk,\n label: _unref(confirmButtonText),\n class: \"col bg-negative text-white\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogRejectPerformedWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogRejectPerformedWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"q-ml-sm text-body2\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { useLocalUserSettingsStore } from \"src/stores/localUserSettingsStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxCardWorkOrderCondensed from \"../card/SfxCardWorkOrderCondensed.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogRemoveIssueFromWorkOrder',\n props: {\n workOrder: { type: Object as PropType, required: true },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst dontAskAgain = ref(false)\n\n//endregion\n\n//region Functions\n\nfunction onConfirm() {\n if (dontAskAgain.value) {\n useLocalUserSettingsStore().skipConfirmRemoveIssueFromWorkOrder = true\n }\n onDialogOK()\n}\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: \"q-dialog-plugin q-pa-sm\",\n style: {\"width\":\"576px\"}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h3 q-pb-none\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogRemoveEntityFromWorkOrder.title_issue\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-py-none q-mt-md\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: _unref(t)('sfxDialogRemoveEntityFromWorkOrder.content_issue')\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-none q-mt-lg\" }, {\n default: _withCtx(() => [\n _createVNode(SfxCardWorkOrderCondensed, {\n \"work-order\": props.workOrder,\n clickable: false\n }, null, 8, [\"work-order\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"row items-center q-mt-lg\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: dontAskAgain.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((dontAskAgain).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(_unref(t)(\"sfxDialogRemoveEntityFromWorkOrder.checkbox_label\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(t)('sfxButtons.btn_cancel'),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: onConfirm,\n label: _unref(t)('sfxButtons.btn_confirm'),\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogRemoveIssueFromWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogRemoveIssueFromWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_4 = { class: \"q-ml-sm col\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardWorkOrderCondensed from \"src/components/card/SfxCardWorkOrderCondensed.vue\"\nimport { useLocalUserSettingsStore } from \"src/stores/localUserSettingsStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogRemoveItemFromWorkOrder',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst title = t(\"sfxDialogWorkOrderRemoveEntity.title_item\")\nconst content = t(\"sfxDialogWorkOrderRemoveEntity.content_item\")\nconst label = t(\"sfxDialogWorkOrderRemoveEntity.label\")\nconst rejectButtonText = t(\"sfxButtons.btn_cancel\")\nconst confirmButtonText = t(\"sfxButtons.btn_confirm\")\nconst dialogStyle = { width: \"580px\" }\n\nconst dontAskAgain = ref(false)\n\n//endregion\n\n//region Function\n\nfunction handleDialogOk() {\n if (dontAskAgain.value) {\n useLocalUserSettingsStore().skipConfirmRemoveItemFromWorkOrder = true\n }\n onDialogOK()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: \"q-dialog-plugin\",\n style: dialogStyle\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: _unref(content)\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxCardWorkOrderCondensed, {\n \"work-order\": props.workOrder,\n clickable: false\n }, null, 8, [\"work-order\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: dontAskAgain.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((dontAskAgain).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(label)), 1)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm gap-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(rejectButtonText),\n onClick: _unref(onDialogCancel),\n class: \"col\"\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: _unref(confirmButtonText),\n onClick: handleDialogOk,\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogRemoveItemFromWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogRemoveItemFromWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogSelectModel',\n props: {\n modelName: {\n type: String,\n required: true,\n },\n\n itemName: {\n type: String,\n required: true,\n },\n\n showHint: {\n type: Boolean,\n default: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-mb-sm\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogSelectModel.title\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", null, _toDisplayString(_unref(t)(\"sfxDialogSelectModel.confirm_part1\")), 1),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"b\", null, _toDisplayString(props.modelName), 1)\n ]),\n _createElementVNode(\"div\", {\n innerHTML: _unref(t)('sfxDialogSelectModel.confirm_part2')\n }, null, 8, _hoisted_1),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"b\", null, _toDisplayString(props.itemName), 1)\n ])\n ]),\n _: 1\n }),\n (props.showHint)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: \"text-caption text-fun-label-and-icon q-mt-sm\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _unref(t)('sfxDialogSelectModel.hint')\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(t)('sfxButtons.btn_cancel'),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(t)('sfxButtons.btn_confirm'),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogSelectModel.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogSelectModel.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-warning no-margin\" }\nconst _hoisted_2 = { class: \"row no-margin\" }\nconst _hoisted_3 = { class: \"text-weight-regular\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = { class: \"text-info text-bold\" }\nconst _hoisted_7 = { class: \"text-info text-bold\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"row text-h5\" }, \"-\", -1)\nconst _hoisted_11 = { class: \"text-h5\" }\n\nimport { date, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogSystemNotification',\n props: {\n startTime: {\n type: [String, Date],\n required: true,\n },\n\n endTime: {\n type: [String, Date],\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\nconst startTimeFormatted = computed(() => date.formatDate(props.startTime, DATE_TIME_FULL_MASK))\nconst endTimeFormatted = computed(() => date.formatDate(props.endTime, DATE_TIME_FULL_MASK))\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n persistent: \"\",\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"bg-orange-1\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_1, _toDisplayString(_ctx.$t(\"sfxDialogSystem.title\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"h5\", _hoisted_2, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogSystem.text1\")) + \"  \", 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxDialogSystem.between\")) + \":\", 1)\n ]),\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(startTimeFormatted.value) + \" \", 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"sfxDialogSystem.and\")) + \"  \", 1),\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(endTimeFormatted.value), 1)\n ]),\n _hoisted_8,\n _createElementVNode(\"div\", null, _toDisplayString(_ctx.$t(\"sfxDialogSystem.text2\")), 1),\n _hoisted_9,\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(LABELS).SUPPORT), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtn, {\n class: \"full-width\",\n label: _ctx.$t('sfxButtons.btn_noted'),\n onClick: _unref(onDialogOK)\n }, null, 8, [\"label\", \"onClick\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogSystemNotification.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogSystemNotification.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"text-h6 q-my-md\" }\nconst _hoisted_4 = { class: \"row items-center\" }\nconst _hoisted_5 = { class: \"text-h6 q-my-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxSeparator from \"src/components/special/SfxSeparator.vue\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { SearchInColumn, TableColumnsConfig } from \"src/util/types/components/sfxTable\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { UserCurrent } from \"src/util/types/dataModels/user\"\nimport { computed, onMounted, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogTableConfigurations',\n props: {\n visibleColumns: {\n type: Array as PropType>,\n required: true,\n },\n\n filterTerm: {\n type: String,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n\n searchInColumn: {\n type: Object as PropType,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst configurationStore = useConfigurationStore()\nconst userStore = useUserStore()\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entity))\n\nconst canSaveConfigText = computed(() =>\n t(\"sfxDialogTableConfigurations.can_save_config\", {\n entity: translatedEntity.value,\n })\n)\n\nconst configLimitReachedText = computed(() =>\n t(\"sfxDialogTableConfigurations.config_limit_reached\", {\n entity: translatedEntity.value,\n })\n)\n\nconst configExplanationText = t(\"sfxDialogTableConfigurations.config_explanation\")\n\nconst btnLoadSelected = t(\"sfxButtons.btn_load_selected\")\nconst btnLoadDefault = t(\"sfxButtons.btn_load_default\")\nconst btnOverwriteSelected = t(\"sfxButtons.btn_overwrite_selected\")\nconst btnDeleteSelected = t(\"sfxButtons.btn_delete_selected\")\n\nconst loadConfigActive = ref(false)\nconst deleteConfigActive = ref(false)\nconst overwriteConfigActive = ref(false)\n\nconst actionBtnText = ref()\nconst actionBtnDisable = ref()\nconst newConfigName = ref()\nconst selectedConfigIndex = ref(-1)\n\nconst savedConfigs = computed(\n () => configurationStore.getCurrentConfiguration.tableBookmarks[props.entity]\n)\n\nconst currentTableColumnConfig = computed(() => {\n return {\n configName: \"\",\n visibleColumns: props.visibleColumns,\n filterTerm: props.filterTerm,\n searchInColumn: props.searchInColumn,\n isFavourite: false,\n }\n})\n\nconst hasCurrentConfig = computed(() => allowNewConfigs.value)\n\nconst hasSavedConfigs = computed(() => savedConfigs.value && savedConfigs.value.length > 0)\n\nconst allowNewConfigs = computed(() => savedConfigs.value.length <= 7)\n\nconst showSeparator = computed(() => hasCurrentConfig.value && hasSavedConfigs.value)\n\nconst dialogIntroText = computed(() =>\n (allowNewConfigs.value ? canSaveConfigText : configLimitReachedText).value.concat(\n configExplanationText\n )\n)\n\nconst paddingBottom = computed(() => (hasSavedConfigs.value ? \"q-pb-none\" : \"\"))\n\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => setActionBtnProperties())\n\n//endregion\n\n//region Functions\n\nfunction setActionBtnProperties() {\n if (hasCurrentConfig.value) {\n actionBtnText.value = btnLoadSelected\n actionBtnDisable.value = true\n } else {\n actionBtnText.value = btnLoadDefault\n actionBtnDisable.value = false\n }\n}\n\nasync function saveCurrentConfig(currentConfigName: string) {\n currentTableColumnConfig.value.configName = currentConfigName\n const arrayLength = configurationStore.tableBookmarks[props.entity].push(\n currentTableColumnConfig.value\n )\n\n const userData: Partial = {\n settings: { data: configurationStore.getCurrentConfiguration },\n }\n await userStore.uploadUserData(userData)\n\n // We just added the entity, so get the last index of the array\n onDialogOK(arrayLength - 1)\n}\n\nfunction getFavouriteIcon(index: number) {\n return savedConfigs.value[index]?.isFavourite ? Icons.FAVOURITE : Icons.NOT_FAVOURITE\n}\n\nasync function updateFavourite(index: number) {\n const savedConfig = savedConfigs.value[index]\n\n if (savedConfig?.isFavourite) {\n savedConfig.isFavourite = false\n } else {\n const favouriteConfig = savedConfigs.value.find((config) => config.isFavourite)\n if (favouriteConfig) favouriteConfig.isFavourite = false\n savedConfig.isFavourite = true\n }\n\n const userData: Partial = {\n settings: { data: configurationStore.getCurrentConfiguration },\n }\n await userStore.uploadUserData(userData)\n}\n\nfunction loadSelected(index: number) {\n actionBtnText.value = btnLoadSelected\n actionBtnDisable.value = false\n\n loadConfigActive.value = true\n deleteConfigActive.value = false\n overwriteConfigActive.value = false\n\n selectedConfigIndex.value = index\n}\n\nasync function deleteConfig(index: number) {\n actionBtnText.value = btnDeleteSelected\n actionBtnDisable.value = false\n\n deleteConfigActive.value = true\n loadConfigActive.value = false\n overwriteConfigActive.value = false\n\n selectedConfigIndex.value = index\n}\n\nfunction overwriteConfig(index: number) {\n actionBtnText.value = btnOverwriteSelected\n actionBtnDisable.value = false\n\n overwriteConfigActive.value = true\n loadConfigActive.value = false\n deleteConfigActive.value = false\n\n selectedConfigIndex.value = index\n}\n\nasync function actionBtnOperations() {\n switch (actionBtnText.value) {\n case btnLoadDefault: {\n onDialogOK(-1)\n break\n }\n case btnLoadSelected: {\n onDialogOK(selectedConfigIndex.value)\n break\n }\n case btnDeleteSelected: {\n configurationStore.tableBookmarks[props.entity].splice(selectedConfigIndex.value, 1)\n\n const userData: Partial = {\n settings: { data: configurationStore.getCurrentConfiguration },\n }\n await userStore.uploadUserData(userData)\n\n deleteConfigActive.value = false\n setActionBtnProperties()\n break\n }\n case btnOverwriteSelected: {\n const selectedConfig = savedConfigs.value[selectedConfigIndex.value]\n currentTableColumnConfig.value.configName = selectedConfig.configName\n currentTableColumnConfig.value.isFavourite = selectedConfig.isFavourite\n\n configurationStore.tableBookmarks[props.entity][selectedConfigIndex.value] =\n currentTableColumnConfig.value\n\n const userData: Partial = {\n settings: { data: configurationStore.getCurrentConfiguration },\n }\n await userStore.uploadUserData(userData)\n\n overwriteConfigActive.value = false\n setActionBtnProperties()\n break\n }\n default:\n onDialogOK(-1)\n Log.error({ message: \"TableConfigDialog action btn text is not set properly\" })\n }\n}\n\nfunction addInputFieldBorder(index: number) {\n return loadConfigActive.value && selectedConfigIndex.value === index\n ? \"sfx-table-config--selected\"\n : \"\"\n}\n\nfunction deleteIconColor(index: number) {\n return deleteConfigActive.value && selectedConfigIndex.value === index ? \"secondary\" : \"navy-base\"\n}\n\nfunction saveIconColor(index: number) {\n return overwriteConfigActive.value && selectedConfigIndex.value === index\n ? \"secondary\"\n : \"navy-base\"\n}\n\nfunction resetSelections() {\n setActionBtnProperties()\n\n loadConfigActive.value = false\n deleteConfigActive.value = false\n overwriteConfigActive.value = false\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3 q-mb-sm\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(t)(\"sfxDialogTableConfigurations.title\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", { innerHTML: dialogIntroText.value }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n innerHTML: _unref(t)('sfxDialogTableConfigurations.favorite_config')\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n (hasCurrentConfig.value)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: _normalizeClass(paddingBottom.value)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(t)(\"sfxDialogTableConfigurations.section_save_current_config\")), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(SfxInput, {\n class: \"col sfx-table-config--new-config q-px-lg\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (resetSelections())),\n modelValue: newConfigName.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((newConfigName).value = $event)),\n label: _ctx.$t('sfxDialogTableConfigurations.label_name'),\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxBtnIcon, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (saveCurrentConfig(newConfigName.value))),\n disable: !newConfigName.value,\n icon: _unref(Icons).SAVE,\n padding: \"xs\",\n color: \"navy-base\"\n }, null, 8, [\"disable\", \"icon\"])\n ])\n ]),\n _: 1\n }, 8, [\"class\"]))\n : _createCommentVNode(\"\", true),\n (showSeparator.value)\n ? (_openBlock(), _createBlock(SfxSeparator, {\n key: 1,\n dimmed: \"\"\n }))\n : _createCommentVNode(\"\", true),\n (hasSavedConfigs.value)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 2,\n class: \"q-py-none\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(t)(\"sfxDialogTableConfigurations.section_saved_configs\")), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(savedConfigs.value, (configuration, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"row items-center q-pb-md\"\n }, [\n _createVNode(SfxBtnIcon, {\n class: \"q-mr-xs\",\n onClick: ($event: any) => (updateFavourite(index)),\n icon: getFavouriteIcon(index),\n padding: \"xs\",\n color: \"navy-base\"\n }, null, 8, [\"onClick\", \"icon\"]),\n _createVNode(SfxInput, {\n class: _normalizeClass([\"col sfx-table-config\", addInputFieldBorder(index)]),\n onClick: ($event: any) => (loadSelected(index)),\n modelValue: configuration.configName,\n \"onUpdate:modelValue\": ($event: any) => ((configuration.configName) = $event),\n label: _ctx.$t('sfxDialogTableConfigurations.label_name'),\n readonly: \"\",\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"class\", \"onClick\", \"modelValue\", \"onUpdate:modelValue\", \"label\"]),\n _createVNode(SfxBtnIcon, {\n class: \"q-ml-xs\",\n onClick: ($event: any) => (deleteConfig(index)),\n icon: _unref(Icons).DELETE,\n padding: \"xs\",\n color: deleteIconColor(index)\n }, null, 8, [\"onClick\", \"icon\", \"color\"]),\n _createVNode(SfxBtnIcon, {\n onClick: ($event: any) => (overwriteConfig(index)),\n icon: _unref(Icons).SAVE,\n disable: !hasCurrentConfig.value,\n padding: \"xs\",\n color: saveIconColor(index)\n }, null, 8, [\"onClick\", \"icon\", \"disable\", \"color\"])\n ]))\n }), 128))\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(t)('sfxButtons.btn_close'),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: actionBtnOperations,\n label: actionBtnText.value,\n disable: actionBtnDisable.value,\n class: \"col\"\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogTableConfigurations.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogTableConfigurations.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"q-ml-sm\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogToDoDelete',\n props: {\n amount: {\n type: Number,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst checkboxVal = ref(false)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h5\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogToDo.title_discard_todo\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sfxDialogToDo.content_discard_todo', { amount: props.amount })\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"row items-center\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_checkbox, {\n size: \"40px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: checkboxVal.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((checkboxVal).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogToDo.content_discard_todo_all\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _ctx.$t('sfxButtons.btn_cancel'),\n class: \"col-grow\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_unref(onDialogOK)(checkboxVal.value))),\n label: _ctx.$t('sfxButtons.btn_confirm'),\n class: \"col-grow\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogToDoDelete.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogToDoDelete.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { sanitize } from \"dompurify\"\nimport { useDialogPluginComponent } from \"quasar\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed, onMounted, ref } from \"vue\"\n\n//region Props and Emits\n\nconst undoButtonName = \"undo-notification-button\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogUndoNotification',\n props: {\n msg: {\n type: String,\n required: true,\n },\n\n callbackFn: {\n type: Function,\n required: true,\n },\n\n callbackDismissFn: {\n type: Function,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\nconst timerTick = ref | undefined>()\n\nconst message = computed(() => sanitize(props.msg))\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n setUndoBtn()\n})\n\n//endregion\n\n//region Functions\n\nfunction setUndoBtn() {\n // Note: if you are changing the timeout, make sure to update the CSS variable as well\n const timeout = 10000 // 10 seconds\n let secondsElapsed = 1 // Start at 1 so that we ignore the first cycle. Makes it smoother.\n\n timerTick.value = setInterval(() => {\n const timerData = timeout / 1000 - secondsElapsed\n\n // Remove timer in case we somehow finish before the timeout\n if (timerData <= 0) removeTimerTick()\n\n secondsElapsed++\n\n // Get the notification action button by name\n const buttonElement = document.getElementsByName(undoButtonName)[0]\n\n // Somehow we couldn't find the button, no reason to keep the interval\n if (!buttonElement) {\n Log.warning({\n message: \"Could not find the undo notification button\",\n data: { timeout, secondsElapsed, timerData },\n })\n removeTimerTick()\n } else {\n // Update the custom CSS variable. Said variable is used in the ::afters content\n buttonElement.style.setProperty(\"--timer-content\", timerData.toString())\n }\n }, 1000)\n}\n\nfunction removeTimerTick() {\n dialogRef.value?.hide()\n clearInterval(timerTick.value)\n}\n\n// This function would execute regardless the user clicking the Undo button\nfunction dismissNotify() {\n removeTimerTick()\n if (props.callbackDismissFn) onDialogOK(props.callbackDismissFn())\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_btn = _resolveComponent(\"q-btn\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-notification\",\n position: \"bottom\",\n html: \"true\",\n \"no-route-dismiss\": \"\",\n \"auto-close\": \"\",\n \"no-focus\": \"\",\n onHide: dismissNotify\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin bg-secondary text-white\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"row items-center no-wrap justify-between\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", { innerHTML: message.value }, null, 8, _hoisted_1),\n _createVNode(_component_q_btn, {\n class: \"col-auto\",\n onClick: props.callbackFn,\n \"icon-right\": _unref(Icons).TIMED_UNDO,\n label: _ctx.$t('sfxButtons.btn_undo'),\n name: undoButtonName,\n flat: \"\",\n \"no-caps\": \"\"\n }, null, 8, [\"onClick\", \"icon-right\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogUndoNotification.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogUndoNotification.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QBtn});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogUnsubmittedIssues',\n props: {\n amount: {\n type: Number,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst checkboxVal = ref(false)\n\nconst title = t(\"sfxDialogUnsubmittedIssues.title\")\nconst btnCancel = t(\"sfxButtons.btn_cancel\")\nconst btnConfirm = t(\"sfxButtons.btn_confirm\")\n\nconst bodyDescription = computed(() =>\n props.amount === 1\n ? t(\"sfxDialogUnsubmittedIssues.body_description\", { amount: props.amount }, 1)\n : t(\"sfxDialogUnsubmittedIssues.body_description\", { amount: props.amount }, 2)\n)\n\nconst labelCheckbox = computed(() =>\n props.amount === 1\n ? t(\"sfxDialogUnsubmittedIssues.label_checkbox\", 1)\n : t(\"sfxDialogUnsubmittedIssues.label_checkbox\", 2)\n)\n\nconst warningBorder = computed(() => (checkboxVal.value ? \"sfx-dialog-border-warning\" : \"\"))\n\nconst btnConfirmColor = computed(() => (checkboxVal.value ? \"bg-negative\" : undefined))\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: _normalizeClass([\"q-dialog-plugin\", warningBorder.value])\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h3 q-pb-xs\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"sfx-message-content\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: bodyDescription.value\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"row items-center q-mt-xs\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox sfx-checkbox--warning\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: checkboxVal.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((checkboxVal).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"span\", {\n class: \"q-ml-sm text-body2\",\n innerHTML: labelCheckbox.value\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"col q-mr-sm\",\n onClick: _unref(onDialogCancel),\n label: _unref(btnCancel)\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n class: _normalizeClass([\"col\", btnConfirmColor.value]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_unref(onDialogOK)(checkboxVal.value))),\n label: _unref(btnConfirm)\n }, null, 8, [\"class\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"class\"])\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogUnsubmittedIssues.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogUnsubmittedIssues.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-px-sm\" }\nconst _hoisted_2 = { class: \"text-h6 text-navy-700\" }\nconst _hoisted_3 = { class: \"text-inactive\" }\nconst _hoisted_4 = { class: \"text-h6 text-navy-700 q-pt-md\" }\nconst _hoisted_5 = { class: \"text-inactive\" }\nconst _hoisted_6 = { class: \"text-h6 text-navy-700 q-pt-md\" }\n\nimport { is } from \"quasar\"\nimport SfxFormSubmit from \"src/components/special/SfxFormSubmit.vue\"\nimport SfxToggleSettings from \"src/components/toggle/SfxToggleSettings.vue\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { DarkModeOption, WorkActionOption } from \"src/util/enums/configuration\"\nimport { showEasterEggNotification } from \"src/util/functions/notifications\"\nimport { UserCurrent } from \"src/util/types/dataModels/user\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SettingsConfiguration',\n setup(__props) {\n\nconst { t } = useI18n()\nconst configurationStore = useConfigurationStore()\nconst userStore = useUserStore()\n\n// Get and set current values of all toggles\n\nconst originalConfig = computed(() => configurationStore.getCurrentConfiguration)\nconst currentConfig = ref({ ...originalConfig.value })\nconst isEqualToOriginal = computed(() => is.deepEqual(originalConfig.value, currentConfig.value))\n\n// Sections titles\n\nconst firstSectionTitle = t(\"sfxDialogUserSettings.title_workflow\")\nconst secondSectionTitle = t(\"sfxDialogUserSettings.title_data_transfer\")\nconst thirdSectionTitle = t(\"sfxDialogUserSettings.title_other\")\n\n// Main description of all toggles\n\nconst workOrdersDescription = t(\"sfxDialogUserSettings.work_orders\")\nconst issuesDescription = t(\"sfxDialogUserSettings.issues\")\nconst performedWorkDescription = t(\"sfxDialogUserSettings.performed_work\")\nconst skipListDescription = t(\"sfxDialogUserSettings.skip_list\")\nconst locationSelectItemDescription = t(\"sfxDialogUserSettings.location_select\")\nconst internetDescription = t(\"sfxDialogUserSettings.internet_connectivity\")\nconst prioritizeDataDescription = t(\"sfxDialogUserSettings.prioritize_data\")\nconst downloadAllDescription = t(\"sfxDialogUserSettings.download_all_data\")\nconst notificationsDescription = t(\"sfxDialogUserSettings.notifications\")\nconst darkModeDescription = t(\"sfxDialogUserSettings.dark_mode\")\nconst tutorialDescription = t(\"sfxDialogUserSettings.tutorial\")\n\n// Secondary description (blue label) of toggles\n\nconst trinaryTrueLabel = t(\"sfxDialogUserSettings.trinary_true_label\")\nconst trinaryFalseLabel = t(\"sfxDialogUserSettings.trinary_false_label\")\nconst trinaryIndeterminateLabel = t(\"sfxDialogUserSettings.trinary_indeterminate_label\")\nconst locationSelectItemTrueLabel = t(\"sfxDialogUserSettings.location_select_true_label\")\nconst locationSelectItemFalseLabel = t(\"sfxDialogUserSettings.location_select_false_label\")\nconst internetTrueLabel = t(\"sfxDialogUserSettings.internet_true_label\")\nconst internetItemFalseLabel = t(\"sfxDialogUserSettings.internet_false_label\")\nconst darkModeTrueLabel = t(\"sfxDialogUserSettings.dark_mode_true_label\")\nconst darkModeFalseLabel = t(\"sfxDialogUserSettings.dark_mode_false_label\")\nconst darkModeIndeterminateLabel = t(\"sfxDialogUserSettings.dark_mode_indeterminate_label\")\nconst easterEggsTrueLabel = t(\"sfxDialogUserSettings.easterEggs_true_label\")\nconst easterEggsFalseLabel = t(\"sfxDialogUserSettings.easterEggs_false_label\")\n\n//endregion\n\n//region Functions\n\nfunction discardData() {\n currentConfig.value = { ...originalConfig.value }\n}\n\nasync function submitData() {\n if (\n originalConfig.value.easterEggs !== currentConfig.value.easterEggs &&\n currentConfig.value.easterEggs\n ) {\n showEasterEggNotification(t(\"sfxDialogUserSettings.easterEgg_notification\"))\n }\n const userData: Partial = { settings: { data: currentConfig.value } }\n await userStore.uploadUserData(userData)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(firstSectionTitle)), 1),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(t)(\"time.coming_soon\")), 1),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.workOrderDefaultAction,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentConfig.value.workOrderDefaultAction) = $event)),\n description: _unref(workOrdersDescription),\n \"true-value\": _unref(WorkActionOption).PERFORM,\n \"true-label\": _unref(trinaryTrueLabel),\n \"false-value\": _unref(WorkActionOption).OPEN,\n \"false-label\": _unref(trinaryFalseLabel),\n \"indeterminate-value\": _unref(WorkActionOption).CHOOSE,\n \"indeterminate-label\": _unref(trinaryIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.issueDefaultAction,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((currentConfig.value.issueDefaultAction) = $event)),\n description: _unref(issuesDescription),\n \"true-value\": _unref(WorkActionOption).PERFORM,\n \"true-label\": _unref(trinaryTrueLabel),\n \"false-value\": _unref(WorkActionOption).OPEN,\n \"false-label\": _unref(trinaryFalseLabel),\n \"indeterminate-value\": _unref(WorkActionOption).CHOOSE,\n \"indeterminate-label\": _unref(trinaryIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.autoCompleteWork,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((currentConfig.value.autoCompleteWork) = $event)),\n description: _unref(performedWorkDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.skipListWithSingleItem,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((currentConfig.value.skipListWithSingleItem) = $event)),\n description: _unref(skipListDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.locationSelectItem,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((currentConfig.value.locationSelectItem) = $event)),\n description: _unref(locationSelectItemDescription),\n \"true-label\": _unref(locationSelectItemTrueLabel),\n \"false-label\": _unref(locationSelectItemFalseLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-label\", \"false-label\"]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(secondSectionTitle)), 1),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(t)(\"time.coming_soon\")), 1),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.internetConnectivity,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((currentConfig.value.internetConnectivity) = $event)),\n description: _unref(internetDescription),\n \"true-label\": _unref(internetTrueLabel),\n \"false-label\": _unref(internetItemFalseLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-label\", \"false-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.prioritizeData,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((currentConfig.value.prioritizeData) = $event)),\n description: _unref(prioritizeDataDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(thirdSectionTitle)), 1),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.downloadDataOnStartUp,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((currentConfig.value.downloadDataOnStartUp) = $event)),\n description: _unref(downloadAllDescription)\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.animateNotification,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => ((currentConfig.value.animateNotification) = $event)),\n description: _unref(notificationsDescription)\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.darkMode,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => ((currentConfig.value.darkMode) = $event)),\n description: _unref(darkModeDescription),\n \"true-value\": _unref(DarkModeOption).ON,\n \"true-label\": _unref(darkModeTrueLabel),\n \"false-value\": _unref(DarkModeOption).OFF,\n \"false-label\": _unref(darkModeFalseLabel),\n \"indeterminate-value\": _unref(DarkModeOption).SYSTEM,\n \"indeterminate-label\": _unref(darkModeIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.tutorial,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = ($event: any) => ((currentConfig.value.tutorial) = $event)),\n description: _unref(tutorialDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.easterEggs,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => ((currentConfig.value.easterEggs) = $event)),\n description: currentConfig.value.easterEggs ? _unref(easterEggsTrueLabel) : _unref(easterEggsFalseLabel)\n }, null, 8, [\"modelValue\", \"description\"]),\n (!isEqualToOriginal.value)\n ? (_openBlock(), _createBlock(SfxFormSubmit, {\n key: 0,\n onDiscard: discardData,\n onSubmit: submitData,\n \"target-class\": \"scroll-box\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./SettingsConfiguration.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsConfiguration.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, unref as _unref, withCtx as _withCtx, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"full-height\" }\nconst _hoisted_2 = { class: \"text-h6 text-navy-700 q-pt-md\" }\nconst _hoisted_3 = { class: \"text-body1\" }\nconst _hoisted_4 = { class: \"text-h6 text-navy-700 q-pt-md\" }\n\nimport SfxBtnLink from \"src/components/button/SfxBtnLink.vue\"\nimport SfxSelect from \"src/components/select/SfxSelect.vue\"\nimport SfxCurrentUserDisplay from \"src/components/special/SfxCurrentUserDisplay.vue\"\nimport SfxSettingsField from \"src/components/special/SfxSettingsField.vue\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { LANGUAGE_LIST } from \"src/util/constants/configurations\"\nimport { SpringboardURL } from \"src/util/enums/urls\"\nimport { changePasswordDialog, changeUnlockKeyDialog } from \"src/util/functions/dialogs\"\nimport { computed, onBeforeMount } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SettingsInformation',\n emits: [\"closeDialog\"],\n setup(__props, { emit: __emit }) {\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst authStore = useAuthStore()\nconst configurationStore = useConfigurationStore()\nconst userStore = useUserStore()\nconst apiCallStore = useApiCallStore()\n\nconst selectLanguage = computed({\n get: () => configurationStore.language,\n set: (value) => {\n configurationStore.language = value\n },\n})\nconst languageList = LANGUAGE_LIST\nconst isExternallyLoggedIn = computed(() => authStore.sso)\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n if (apiCallStore.canCallAgain(SpringboardURL.USER_ME)) await userStore.fetchUserData()\n})\n\n//endregion\n\n//region Functions\n\nfunction disableUnusedLanguages(language: string) {\n return language !== LANGUAGE_LIST[0]\n}\n\nfunction showPasswordChangeDialog() {\n emit(\"closeDialog\")\n changePasswordDialog()\n}\n\nfunction showUnlockKeyChangeDialog() {\n emit(\"closeDialog\")\n changeUnlockKeyDialog()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(SfxCurrentUserDisplay, { \"change-picture\": \"\" }),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxDialogUserSettings.title_security\")), 1),\n (!isExternallyLoggedIn.value)\n ? (_openBlock(), _createBlock(SfxSettingsField, {\n key: 0,\n label: _ctx.$t('sfxDialogUserSettings.set_password'),\n clickable: \"\",\n onClick: showPasswordChangeDialog\n }, null, 8, [\"label\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(SfxSettingsField, {\n label: _ctx.$t('sfxDialogUserSettings.set_unlock_key'),\n clickable: \"\",\n onClick: showUnlockKeyChangeDialog\n }, null, 8, [\"label\"]),\n _createVNode(SfxBtnLink, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_unref(authStore).logout())),\n dense: false,\n color: \"negative\",\n class: \"q-pa-none\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxButtons.btn_sign_out\")), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"sfxDialogUserSettings.title_interface\")), 1),\n _createVNode(SfxSelect, {\n modelValue: selectLanguage.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((selectLanguage).value = $event)),\n label: _ctx.$t('sfxDialogUserSettings.language_select_label'),\n options: _unref(languageList),\n \"option-disable\": disableUnusedLanguages\n }, null, 8, [\"modelValue\", \"label\", \"options\"])\n ]))\n}\n}\n\n})","import script from \"./SettingsInformation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsInformation.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3 q-px-md q-pt-md q-pb-sm\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"cover-bar\" }, null, -1)\nconst _hoisted_3 = { class: \"row justify-center\" }\nconst _hoisted_4 = { class: \"col-8 q-pb-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxTab from \"src/components/navigation/SfxTab.vue\"\nimport SfxTabs from \"src/components/navigation/SfxTabs.vue\"\nimport SettingsConfiguration from \"src/pages/manager/settings/SettingsConfiguration.vue\"\nimport SettingsInformation from \"src/pages/manager/settings/SettingsInformation.vue\"\nimport { hideScrollbar, showScrollbar } from \"src/util/functions/scroll\"\nimport { reactive, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogUserSettings',\n setup(__props) {\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\n\nconst informationTab = t(\"sfxDialogUserSettings.tab_information\")\nconst configurationTab = t(\"sfxDialogUserSettings.tab_configuration\")\n\nconst activeTab = ref(informationTab)\n\nconst rightTabs = reactive([\n { name: informationTab, label: informationTab, disable: false },\n { name: configurationTab, label: configurationTab, disable: false },\n])\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => activeTab.value,\n () => {\n hideScrollbar()\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_header = _resolveComponent(\"q-header\")!\n const _component_q_tab_panel = _resolveComponent(\"q-tab-panel\")!\n const _component_q_tab_panels = _resolveComponent(\"q-tab-panels\")!\n const _component_q_page = _resolveComponent(\"q-page\")!\n const _component_q_page_container = _resolveComponent(\"q-page-container\")!\n const _component_q_footer = _resolveComponent(\"q-footer\")!\n const _component_q_layout = _resolveComponent(\"q-layout\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n class: \"sfx-dialog-user-settings\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_layout, {\n container: \"\",\n view: \"hHh lpr fFf\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_header, { class: \"bg-white text-dark\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(t)(\"sfxDialogUserSettings.title\")), 1),\n _createVNode(SfxTabs, {\n modelValue: activeTab.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((activeTab).value = $event))\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rightTabs, (tab) => {\n return (_openBlock(), _createBlock(SfxTab, {\n key: tab,\n label: tab.label,\n name: tab.name,\n disable: tab.disable,\n class: \"full-width\",\n noCaps: \"\"\n }, null, 8, [\"label\", \"name\", \"disable\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_page_container, {\n class: \"full-height scroll-box\",\n onScroll: _unref(showScrollbar),\n onScrollend: _unref(hideScrollbar)\n }, {\n default: _withCtx(() => [\n _hoisted_2,\n _createVNode(_component_q_page, null, {\n default: _withCtx(() => [\n _createVNode(_component_q_tab_panels, {\n modelValue: activeTab.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((activeTab).value = $event)),\n swipeable: \"\",\n animated: \"\",\n \"transition-prev\": \"fade\",\n \"transition-next\": \"fade\",\n \"keep-alive\": \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_tab_panel, { name: _unref(informationTab) }, {\n default: _withCtx(() => [\n _createVNode(SettingsInformation, { onCloseDialog: _unref(onDialogCancel) }, null, 8, [\"onCloseDialog\"])\n ]),\n _: 1\n }, 8, [\"name\"]),\n _createVNode(_component_q_tab_panel, { name: _unref(configurationTab) }, {\n default: _withCtx(() => [\n _createVNode(SettingsConfiguration)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onScroll\", \"onScrollend\"]),\n _createVNode(_component_q_footer, { class: \"transparent\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogCancel),\n label: _unref(t)('sfxButtons.btn_close'),\n class: \"full-width\"\n }, null, 8, [\"onClick\", \"label\"])\n ])\n ])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxDialogUserSettings.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogUserSettings.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QLayout from 'quasar/src/components/layout/QLayout.js';\nimport QHeader from 'quasar/src/components/header/QHeader.js';\nimport QPageContainer from 'quasar/src/components/page/QPageContainer.js';\nimport QPage from 'quasar/src/components/page/QPage.js';\nimport QTabPanels from 'quasar/src/components/tab-panels/QTabPanels.js';\nimport QTabPanel from 'quasar/src/components/tab-panels/QTabPanel.js';\nimport QFooter from 'quasar/src/components/footer/QFooter.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QLayout,QHeader,QPageContainer,QPage,QTabPanels,QTabPanel,QFooter});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createBlock as _createBlock, unref as _unref } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogWarning',\n props: {\n title: {\n type: String,\n required: true,\n },\n\n bodyContent: {\n type: Array as PropType,\n required: true,\n },\n\n confirmButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_confirm\"))\n },\n },\n\n rejectButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_cancel\"))\n },\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-dialog-border-warning\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"text-h3\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.title), 1)\n ]),\n _: 1\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.bodyContent, (content, index) => {\n return (_openBlock(), _createBlock(_component_q_card_section, { key: index }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: content\n }, null, 8, _hoisted_1)\n ]),\n _: 2\n }, 1024))\n }), 128)),\n _createVNode(_component_q_card_actions, null, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: props.rejectButtonText,\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: props.confirmButtonText,\n class: \"col bg-negative\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogWarning.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogWarning.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_7 = [\"innerHTML\"]\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogWorkOrderEntities',\n props: {\n entitiesRemoved: {\n type: Number,\n required: true,\n },\n\n entitiesAdded: {\n type: Number,\n required: true,\n },\n\n entitiesToDo: {\n type: Number,\n required: true,\n },\n\n entitiesTotal: {\n type: Number,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entity, true))\nconst labelTitle = computed(() =>\n t(\"sfxDialogWorkOrderEntities.title\", { entity: translatedEntity.value })\n)\nconst labelRemoved = computed(() =>\n t(\"sfxDialogWorkOrderEntities.label_removed\", { entity: translatedEntity.value })\n)\nconst labelAdded = computed(() =>\n t(\"sfxDialogWorkOrderEntities.label_added\", { entity: translatedEntity.value })\n)\nconst labelToDo = computed(() =>\n t(\"sfxDialogWorkOrderEntities.label_to_do\", { entity: translatedEntity.value })\n)\nconst labelTotal = computed(() =>\n t(\"sfxDialogWorkOrderEntities.label_total\", { entity: translatedEntity.value })\n)\nconst labelSaveChanges = computed(() => t(\"sfxDialogWorkOrderEntities.label_save_changes\"))\nconst labelBtnCancel = t(\"sfxButtons.btn_cancel\")\nconst labelBtnSave = t(\"sfxButtons.btn_save\")\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-dialog__title text-h3 q-pb-xs\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(labelTitle.value), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"text-body1 sfx-confirm-content column items-center\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", { innerHTML: labelRemoved.value }, null, 8, _hoisted_1),\n _createElementVNode(\"div\", null, _toDisplayString(props.entitiesRemoved), 1),\n _hoisted_2,\n _createElementVNode(\"div\", { innerHTML: labelAdded.value }, null, 8, _hoisted_3),\n _createElementVNode(\"div\", null, _toDisplayString(props.entitiesAdded), 1),\n _hoisted_4,\n _createElementVNode(\"div\", { innerHTML: labelToDo.value }, null, 8, _hoisted_5),\n _createElementVNode(\"div\", null, _toDisplayString(props.entitiesToDo), 1),\n _hoisted_6,\n _createElementVNode(\"div\", { innerHTML: labelTotal.value }, null, 8, _hoisted_7),\n _createElementVNode(\"div\", null, _toDisplayString(props.entitiesTotal), 1),\n _hoisted_8,\n _createElementVNode(\"span\", null, _toDisplayString(labelSaveChanges.value), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md gap-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: _unref(labelBtnCancel),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: _unref(labelBtnSave),\n class: \"col\"\n }, null, 8, [\"onClick\", \"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogWorkOrderEntities.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogWorkOrderEntities.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_4 = { class: \"q-ml-sm col\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardWorkOrderIssueCondensed from \"src/components/card/SfxCardWorkOrderIssueCondensed.vue\"\nimport { useLocalUserSettingsStore } from \"src/stores/localUserSettingsStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { IssueCardData } from \"src/util/types/dataModels/issue\"\nimport { PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogWorkOrderRemoveIssue',\n props: {\n issue: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst title = t(\"sfxDialogWorkOrderRemoveEntity.title_issue\")\nconst content = t(\"sfxDialogWorkOrderRemoveEntity.content_issue\")\nconst label = t(\"sfxDialogWorkOrderRemoveEntity.label\")\nconst rejectButtonText = t(\"sfxButtons.btn_cancel\")\nconst confirmButtonText = t(\"sfxButtons.btn_confirm\")\nconst dialogStyle = { width: \"580px\" }\n\nconst dontAskAgain = ref(false)\n\n//endregion\n\n//region Function\n\nfunction handleDialogOk() {\n if (dontAskAgain.value) {\n useLocalUserSettingsStore().skipConfirmWorkOrderRemoveIssue = true\n }\n onDialogOK()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: \"q-dialog-plugin\",\n style: dialogStyle\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: _unref(content)\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxCardWorkOrderIssueCondensed, {\n issue: props.issue,\n clickable: false\n }, null, 8, [\"issue\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: dontAskAgain.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((dontAskAgain).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(label)), 1)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm gap-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(rejectButtonText),\n onClick: _unref(onDialogCancel),\n class: \"col\"\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: _unref(confirmButtonText),\n onClick: handleDialogOk,\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogWorkOrderRemoveIssue.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogWorkOrderRemoveIssue.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h3\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"q-pt-sm row items-center\" }\nconst _hoisted_4 = { class: \"q-ml-sm col\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxCardWorkOrderItemCondensed from \"src/components/card/SfxCardWorkOrderItemCondensed.vue\"\nimport { useLocalUserSettingsStore } from \"src/stores/localUserSettingsStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { ItemCardData } from \"src/util/types/dataModels/item\"\nimport { PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogWorkOrderRemoveItem',\n props: {\n item: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst title = t(\"sfxDialogWorkOrderRemoveEntity.title_item\")\nconst content = t(\"sfxDialogWorkOrderRemoveEntity.content_item\")\nconst label = t(\"sfxDialogWorkOrderRemoveEntity.label\")\nconst rejectButtonText = t(\"sfxButtons.btn_cancel\")\nconst confirmButtonText = t(\"sfxButtons.btn_confirm\")\nconst dialogStyle = { width: \"580px\" }\n\nconst dontAskAgain = ref(false)\n\n//endregion\n\n//region Function\n\nfunction handleDialogOk() {\n if (dontAskAgain.value) {\n useLocalUserSettingsStore().skipConfirmWorkOrderRemoveItem = true\n }\n onDialogOK()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, {\n class: \"q-dialog-plugin\",\n style: dialogStyle\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, { class: \"q-pb-lg\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_unref(title)), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"text-body1\",\n innerHTML: _unref(content)\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"q-pb-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxCardWorkOrderItemCondensed, {\n item: props.item,\n clickable: false\n }, null, 8, [\"item\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_checkbox, {\n size: \"56px\",\n class: \"sfx-checkbox\",\n \"checked-icon\": _unref(Icons).ACCEPT,\n modelValue: dontAskAgain.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((dontAskAgain).value = $event))\n }, null, 8, [\"checked-icon\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(label)), 1)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md q-pt-sm gap-sm\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n label: _unref(rejectButtonText),\n onClick: _unref(onDialogCancel),\n class: \"col\"\n }, null, 8, [\"label\", \"onClick\"]),\n _createVNode(SfxBtn, {\n label: _unref(confirmButtonText),\n onClick: handleDialogOk,\n class: \"col\"\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./SfxDialogWorkOrderRemoveItem.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogWorkOrderRemoveItem.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCheckbox,QCardActions});\n","import { Dialog, DialogChainObject } from \"quasar\"\nimport { i18n } from \"src/boot/i18n\"\nimport SfxDialogAuthenticationError from \"src/components/dialogs/error/SfxDialogAuthenticationError.vue\"\nimport SfxDialogNoWorkspaces from \"src/components/dialogs/error/SfxDialogNoWorkspaces.vue\"\nimport SfxDialogOffline from \"src/components/dialogs/error/SfxDialogOffline.vue\"\nimport SfxDialogHttp400 from \"src/components/dialogs/http/SfxDialogHttp400.vue\"\nimport SfxDialogHttp401 from \"src/components/dialogs/http/SfxDialogHttp401.vue\"\nimport SfxDialogHttp403 from \"src/components/dialogs/http/SfxDialogHttp403.vue\"\nimport SfxDialogHttp404 from \"src/components/dialogs/http/SfxDialogHttp404.vue\"\nimport SfxDialogHttp408 from \"src/components/dialogs/http/SfxDialogHttp408.vue\"\nimport SfxDialogHttp500 from \"src/components/dialogs/http/SfxDialogHttp500.vue\"\nimport SfxDialogHttp501 from \"src/components/dialogs/http/SfxDialogHttp501.vue\"\nimport SfxDialogHttp502 from \"src/components/dialogs/http/SfxDialogHttp502.vue\"\nimport SfxDialogHttp503 from \"src/components/dialogs/http/SfxDialogHttp503.vue\"\nimport SfxDialogHttp504 from \"src/components/dialogs/http/SfxDialogHttp504.vue\"\nimport SfxDialogListAttachmentDelete from \"src/components/dialogs/list/SfxDialogListAttachmentDelete.vue\"\nimport SfxDialogListAttachmentSelect from \"src/components/dialogs/list/SfxDialogListAttachmentSelect.vue\"\nimport SfxDialogListIdentifier from \"src/components/dialogs/list/SfxDialogListIdentifier.vue\"\nimport SfxDialogListIssue from \"src/components/dialogs/list/SfxDialogListIssue.vue\"\nimport SfxDialogListIssueManager from \"src/components/dialogs/list/SfxDialogListIssueManager.vue\"\nimport SfxDialogListUnsubmittedWork from \"src/components/dialogs/list/SfxDialogListUnsubmittedWork.vue\"\nimport SfxDialogListUnsubmittedWorkIssues from \"src/components/dialogs/list/SfxDialogListUnsubmittedWorkIssues.vue\"\nimport SfxDialogListWorkOrder from \"src/components/dialogs/list/SfxDialogListWorkOrder.vue\"\nimport SfxDialogListWorkOrderSelect from \"src/components/dialogs/list/SfxDialogListWorkOrderSelect.vue\"\nimport SfxDialogAcceptCorrectiveWork from \"src/components/dialogs/SfxDialogAcceptCorrectiveWork.vue\"\nimport SfxDialogAddAttachments from \"src/components/dialogs/SfxDialogAddAttachments.vue\"\nimport SfxDialogAddComment from \"src/components/dialogs/SfxDialogAddComment.vue\"\nimport SfxDialogAttachmentDetails from \"src/components/dialogs/SfxDialogAttachmentDetails.vue\"\nimport SfxDialogChangePassword from \"src/components/dialogs/SfxDialogChangePassword.vue\"\nimport SfxDialogChangeUnlockKey from \"src/components/dialogs/SfxDialogChangeUnlockKey.vue\"\nimport SfxDialogCheckBox from \"src/components/dialogs/SfxDialogCheckBox.vue\"\nimport SfxDialogConfirmation from \"src/components/dialogs/SfxDialogConfirmation.vue\"\nimport ConnectVueDevtools from \"src/components/dialogs/SfxDialogConnectVueDevtools.vue\"\nimport SfxDialogDataFetch from \"src/components/dialogs/SfxDialogDataFetch.vue\"\nimport SfxDialogDevicePermission from \"src/components/dialogs/SfxDialogDevicePermission.vue\"\nimport SfxDialogEditCorrectionInfo from \"src/components/dialogs/SfxDialogEditCorrectionInfo.vue\"\nimport SfxDialogFeedback from \"src/components/dialogs/SfxDialogFeedback.vue\"\nimport SfxDialogIdentifierExists from \"src/components/dialogs/SfxDialogIdentifierExists.vue\"\nimport SfxDialogIdentifierUnknown from \"src/components/dialogs/SfxDialogIdentifierUnknown.vue\"\nimport SfxDialogImageDelete from \"src/components/dialogs/SfxDialogImageDelete.vue\"\nimport SfxDialogInput from \"src/components/dialogs/SfxDialogInput.vue\"\nimport SfxDialogItemClone from \"src/components/dialogs/SfxDialogItemClone.vue\"\nimport SfxDialogMessage from \"src/components/dialogs/SfxDialogMessage.vue\"\nimport SfxDialogRejectedCorrectiveWork from \"src/components/dialogs/SfxDialogRejectedCorrectiveWork.vue\"\nimport SfxDialogRejectPerformedWork from \"src/components/dialogs/SfxDialogRejectPerformedWork.vue\"\nimport SfxDialogRemoveIssueFromWorkOrder from \"src/components/dialogs/SfxDialogRemoveIssueFromWorkOrder.vue\"\nimport SfxDialogRemoveItemFromWorkOrder from \"src/components/dialogs/SfxDialogRemoveItemFromWorkOrder.vue\"\nimport SfxDialogSelectModel from \"src/components/dialogs/SfxDialogSelectModel.vue\"\nimport SfxDialogSystemNotification from \"src/components/dialogs/SfxDialogSystemNotification.vue\"\nimport SfxDialogTableConfigurations from \"src/components/dialogs/SfxDialogTableConfigurations.vue\"\nimport SfxDialogToDoDelete from \"src/components/dialogs/SfxDialogToDoDelete.vue\"\nimport SfxDialogUndoNotification from \"src/components/dialogs/SfxDialogUndoNotification.vue\"\nimport SfxDialogUnsubmittedIssues from \"src/components/dialogs/SfxDialogUnsubmittedIssues.vue\"\nimport SfxDialogUserSettings from \"src/components/dialogs/SfxDialogUserSettings.vue\"\nimport SfxDialogWarning from \"src/components/dialogs/SfxDialogWarning.vue\"\nimport SfxDialogWorkOrderEntities from \"src/components/dialogs/SfxDialogWorkOrderEntities.vue\"\nimport SfxDialogWorkOrderRemoveIssue from \"src/components/dialogs/SfxDialogWorkOrderRemoveIssue.vue\"\nimport SfxDialogWorkOrderRemoveItem from \"src/components/dialogs/SfxDialogWorkOrderRemoveItem.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport { FeedbackType, useSupportStore } from \"src/stores/supportStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { SfxDialogCheckedAndInput } from \"src/util/types/components/sfxDialogCheckedAndInput\"\nimport { ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { SearchInColumn } from \"src/util/types/components/sfxTable\"\nimport { Attachment, AttachmentContext } from \"src/util/types/dataModels/attachment\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { AssociationType, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport {\n IdentifierActionReturn,\n IdentifierAssociationType,\n} from \"src/util/types/dataModels/identifier\"\nimport {\n Issue,\n IssueAssociationType,\n IssueCardData,\n IssueCorrectiveWorkRejectedEventCard,\n IssuesOnItem,\n IssuesOnItemAction,\n OperationsOnIssue,\n} from \"src/util/types/dataModels/issue\"\nimport { IssueComment } from \"src/util/types/dataModels/issueComment\"\nimport { ItemCardData } from \"src/util/types/dataModels/item\"\nimport { PerformedWorkComment } from \"src/util/types/dataModels/performedWork\"\nimport {\n UnsubmittedWorkEntity,\n UnsubmittedWorkWithEntity,\n} from \"src/util/types/dataModels/unsubmittedWork\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport {\n WorkOrderCorrectiveItemComment,\n WorkOrderRegularItemComment,\n} from \"src/util/types/dataModels/workOrderComment\"\nimport {\n CheckBoxDialogOptions,\n CommonDialogOptions,\n ConfirmationDialogOptions,\n InputDialogOptions,\n MessageDialogOptions,\n} from \"src/util/types/dialogs\"\nimport { SystemNotificationCardData } from \"src/util/types/notifications\"\nimport { Component } from \"vue\"\n\n//region Helpers\n/**\n * Promisifies a {@link DialogChainObject} to resolve with:\n * - `true` on dialog OK\n * - `false` on dialog cancel/dismiss.\n *\n * @param chainObject The chain object to handle events from\n */\nasync function promisifyDialogChainObject(\n chainObject: DialogChainObject\n): Promise {\n return new Promise((resolve) => {\n chainObject\n .onOk(() => {\n resolve(true)\n })\n .onCancel(() => {\n resolve(false)\n })\n })\n}\n\n/**\n * Generically create a dialog with {@link CommonDialogOptions}.\n *\n * @param component to create dialog with.\n * @param options (props) to apply to component.\n */\nfunction genericCommonDialogCreator(\n component: Component,\n options: OptionsType | Record = {}\n): DialogChainObject {\n options.html = options.html ?? false\n\n return Dialog.create({\n component: component,\n componentProps: options,\n })\n}\n\n//endregion\n\n//region Standard dialogs\n\n/**\n * Shows a dialog that displays a message.\n *\n * @param options that correspond with the props of {@link SfxDialogMessage} *\n * @return The returned promise resolves with `true` if OK was pressed, and `false ` the dialog was dismissed any other way.\n */\nexport async function messageDialog(options: MessageDialogOptions): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogMessage, options))\n}\n\n/**\n * Shows a dialog that displays device permission information.\n *\n * @return The returned promise resolves with `true` if OK was pressed, and `false ` the dialog was dismissed any other way.\n */\nexport async function permissionDialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogDevicePermission))\n}\n\n/**\n * Shows a confirmation dialog, where the user can choose to confirm or not.\n * The dialog is conveniently wrapped in a promise.\n *\n * @param options that correspond with the props of {@link SfxDialogConfirmation}\n * @return The returned promise resolves with `true` if confirmed, and `false ` if not.\n */\nexport async function confirmationDialog(\n options: ConfirmationDialogOptions\n): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogConfirmation, options))\n}\n\n/**\n * Shows an input dialog, where the user can input a string.\n * The dialog is conveniently wrapped in a promise.\n *\n * @param options that correspond with the props of {@link SfxDialogInput}\n * @return The returned promise resolves with a string or `undefined`\n */\nexport async function inputDialog(options: InputDialogOptions): Promise {\n return new Promise((resolve) =>\n genericCommonDialogCreator(SfxDialogInput, options)\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\n/**\n * Shows a dialog with a check box\n *\n * @param options Correspond with the props of {@link SfxDialogCheckBox}\n * @return The returned promise resolves with a boolean or null\n */\nexport async function checkBoxDialog(options: CheckBoxDialogOptions): Promise {\n return new Promise((resolve) =>\n genericCommonDialogCreator(SfxDialogCheckBox, options)\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport async function unsavedChangesDialog() {\n const { t } = i18n.global\n\n const confirmationDialogOption: ConfirmationDialogOptions = {\n title: t(\"sfxDialogUnsavedChanges.title\"),\n content: t(\"sfxDialogUnsavedChanges.content\"),\n confirmButtonText: t(\"sfxButtons.btn_continue\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n }\n\n return await confirmationDialog(confirmationDialogOption)\n}\n\n//endregion\n\n//region Special dialogs\n\nexport function connectVueDevtoolsDialog() {\n Dialog.create({ component: ConnectVueDevtools })\n}\n\nexport async function systemDialog(props: SystemNotificationCardData) {\n return promisifyDialogChainObject(\n Dialog.create({ component: SfxDialogSystemNotification, componentProps: props })\n )\n}\n\nexport function todoDeleteAllDialog(amount: number) {\n return Dialog.create({ component: SfxDialogToDoDelete, componentProps: { amount } })\n}\n\nexport function tableConfigurationsDialog(\n visibleColumns: string[],\n filterTerm: string,\n entity: string,\n searchInColumn?: SearchInColumn\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogTableConfigurations,\n componentProps: { visibleColumns, filterTerm, entity, searchInColumn },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nfunction changeRequestForRemoval(title: string) {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title,\n content: t(\"sfxDialogChangeRequest.content\"),\n label: t(\"sfxDialogChangeRequest.label\"),\n confirmButtonText: t(\"sfxButtons.btn_request_removal\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonClasses: \"bg-negative text-white\",\n inputRequired: true,\n }\n\n return inputDialog(dialogOptions)\n}\n\nexport function deleteAttachment() {\n const { t } = i18n.global\n const title = t(\"sfxDialogChangeRequest.title_attachment\")\n\n return changeRequestForRemoval(title)\n}\n\nexport function deleteImage() {\n const { t } = i18n.global\n const title = t(\"sfxDialogChangeRequest.title_image\")\n\n return changeRequestForRemoval(title)\n}\n\nexport function selectModel(itemName: string, modelName: string, showHint = true) {\n return Dialog.create({\n component: SfxDialogSelectModel,\n componentProps: { itemName, modelName, showHint },\n })\n}\n\nexport async function unknownIdentifierDialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogIdentifierUnknown))\n}\n\nexport async function alreadyAssociatedIdentifierDialog(\n entityOldType: IdentifierAssociationType,\n entityOldName: string,\n entityNewType: IdentifierAssociationType,\n entityNewName: string\n): Promise {\n return promisifyDialogChainObject(\n Dialog.create({\n component: SfxDialogIdentifierExists,\n componentProps: {\n entityOldType,\n entityOldName,\n entityNewType,\n entityNewName,\n },\n })\n )\n}\n\nexport function itemCloneDialog(item: ItemCardData) {\n return promisifyDialogChainObject(\n Dialog.create({\n component: SfxDialogItemClone,\n componentProps: { item },\n })\n )\n}\n\nexport function stagnantWorkDialog(days: number) {\n const { t } = i18n.global\n const title = t(\"sfxDialogStagnantWork.title\")\n const content = t(\"sfxDialogStagnantWork.content\", { days })\n const buttonText = t(\"sfxButtons.btn_understood\")\n\n return messageDialog({ title, content, buttonText, html: true, persistent: true })\n}\n\nexport async function discardUnsubmittedWorkDialog(\n confirmDialogText: string[]\n): Promise {\n const confirmationDialogOption: ConfirmationDialogOptions = {\n title: confirmDialogText[0],\n content: confirmDialogText[1],\n }\n return confirmationDialog(confirmationDialogOption)\n}\n\nexport async function warningDialog(\n title: string,\n bodyContent: string[],\n confirmButtonText?: string,\n rejectButtonText?: string\n): Promise {\n return promisifyDialogChainObject(\n Dialog.create({\n component: SfxDialogWarning,\n componentProps: { title, bodyContent, confirmButtonText, rejectButtonText },\n })\n )\n}\n\nexport async function discardWorkDialog(): Promise {\n const { t } = i18n.global\n const title = t(\"sfxDialogDiscardWork.title\")\n const content = t(\"sfxDialogDiscardWork.content\")\n\n return confirmationDialog({ title: title, content: content, html: true })\n}\n\nexport async function dataFetchDialog(workspaceId: string): Promise {\n return new Promise((resolve) => {\n Dialog.create({ component: SfxDialogDataFetch, componentProps: { workspaceId } }).onOk(\n (result: boolean) => {\n resolve(result)\n }\n )\n })\n}\n\nexport async function attachmentDetailsDialog(\n entity: string, // Translated entity\n attachment: Attachment\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogAttachmentDetails,\n componentProps: { entity, attachment },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport async function addAttachmentsDialog(): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogAddAttachments,\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport async function imageDeleteDialog(\n entity: string,\n image: ImageViewerItem\n): Promise {\n return promisifyDialogChainObject(\n Dialog.create({\n component: SfxDialogImageDelete,\n componentProps: { entity, image },\n })\n )\n}\n\nexport function unsubmittedIssuesDialog(amount: number) {\n return Dialog.create({ component: SfxDialogUnsubmittedIssues, componentProps: { amount } })\n}\n\nexport function showFeedback(overwriteFeedbackData?: FeedbackType) {\n const supportStore = useSupportStore()\n const feedbackData = overwriteFeedbackData || supportStore.feedback\n\n return Dialog.create({\n component: SfxDialogFeedback,\n componentProps: { context: feedbackData.context, designation: feedbackData.designation },\n })\n}\n\nexport async function showWelcomeDialog(technician: boolean) {\n const { t } = i18n.global\n const userStore = useUserStore()\n\n const content = technician\n ? t(\"sfxDialogHelp.text_technician_welcome\", { company: LABELS.COMPANY })\n : t(\"sfxDialogHelp.text_manager_welcome\", { company: LABELS.COMPANY })\n\n await messageDialog({\n title: t(\"sfxDialogHelp.title_welcome\", { product: LABELS.PRODUCT }),\n content: content,\n buttonText: t(\"sfxButtons.btn_lets_go\"),\n html: true,\n }).then(() => {\n userStore.helpDialogShown = true\n })\n}\n\n//endregion\n\n//region Dialogs with lists\n\nexport async function attachmentListDeleteDialog(\n entity: string, // Translated entity\n attachments: Attachment[]\n): Promise {\n return promisifyDialogChainObject(\n Dialog.create({\n component: SfxDialogListAttachmentDelete,\n componentProps: { entity, attachments },\n })\n )\n}\n\nexport async function attachmentListSelectDialog(\n entity: string, // Translated entity\n entityDesignation: string,\n attachmentList: Attachment[]\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogListAttachmentSelect,\n componentProps: { entity, entityDesignation, attachmentList },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport function identifierListDialog(\n entityName: string,\n entityId: string,\n associationType: IdentifierAssociationType,\n list: unknown[] = [] // TODO: Specify array type when we have Areas and Locations\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogListIdentifier,\n componentProps: { entityName, entityId, associationType, list },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport function workOrderListDialog(\n associationType: AssociationType,\n workOrders: WorkOrderCardData[],\n entityId: string\n) {\n Dialog.create({\n component: SfxDialogListWorkOrder,\n componentProps: { associationType, workOrders, entityId },\n })\n}\n\n// TODO: Maybe send whole entity and just have a type guard inside for item/area?\nexport function issueListDialog(\n associationType: IssueAssociationType,\n list: IssuesOnItem[] = [],\n areUnsavedChanges: boolean = false\n) {\n const onDismiss = (action: () => void) => {\n if (areUnsavedChanges) {\n unsavedChangesDialog().then((userConfirmed) => {\n if (userConfirmed) {\n action()\n }\n })\n }\n }\n\n return Dialog.create({\n component: SfxDialogListIssue,\n componentProps: { associationType, list, areUnsavedChanges, onDismiss },\n })\n}\n\nexport function issueListManagerDialog(list: IssuesOnItem[] = []) {\n return Dialog.create({\n component: SfxDialogListIssueManager,\n componentProps: { list },\n })\n}\n\nexport function unsubmittedWorkIssueListDialog(\n entityId: string,\n issueList: PayloadEntity[],\n workOrderId?: string\n) {\n return Dialog.create({\n component: SfxDialogListUnsubmittedWorkIssues,\n componentProps: { entityId, issueList, workOrderId },\n })\n}\n\nexport function unsubmittedWorkListDialog(\n unsubmittedWorkList: UnsubmittedWorkWithEntity[],\n entity: UnsubmittedWorkEntity\n) {\n return Dialog.create({\n component: SfxDialogListUnsubmittedWork,\n componentProps: { unsubmittedWorkList, entity },\n })\n}\n\nexport async function workOrderListSelectDialog(\n entityType: EntityPages,\n entityId: string,\n entityDesignation: string,\n workOrders: WorkOrderCardData[]\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogListWorkOrderSelect,\n componentProps: { entityType, entityId, entityDesignation, workOrders },\n }).onOk((payload) => resolve(payload))\n )\n}\n\nexport async function closeIssueNotCorrectedDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogCloseIssueNotCorrected.title\"),\n content: t(\"sfxDialogCloseIssueNotCorrected.content\"),\n label: t(\"sfxDialogCloseIssueNotCorrected.label\"),\n confirmButtonText: t(\"sfxButtons.btn_close_it\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonClasses: \"bg-negative text-white\",\n inputRequired: true,\n html: true,\n }\n\n return await inputDialog(dialogOptions)\n}\n\nexport async function closeIssueCorrectedDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogCloseIssueCorrected.title\"),\n content: t(\"sfxDialogCloseIssueCorrected.content\"),\n label: t(\"sfxDialogCloseIssueCorrected.label\"),\n confirmButtonText: t(\"sfxButtons.btn_close_it\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n }\n\n return await inputDialog(dialogOptions)\n}\n\nexport async function supersedeIssueDialog() {\n const { t } = i18n.global\n\n const dialogOptions: ConfirmationDialogOptions = {\n title: t(\"sfxDialogSupersedeIssue.title\"),\n content: t(\"sfxDialogSupersedeIssue.content\"),\n confirmButtonText: t(\"sfxButtons.btn_supersede\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonClasses: \"bg-negative text-white\",\n html: true,\n }\n\n return await confirmationDialog(dialogOptions)\n}\n\nexport async function relatedUnsubmittedWorkDialog() {\n const { t } = i18n.global\n\n const dialogOptions: ConfirmationDialogOptions = {\n title: t(\"sfxDialogRelatedUnsubmittedWork.title\"),\n content: t(\"sfxDialogRelatedUnsubmittedWork.content\"),\n confirmButtonText: t(\"sfxButtons.btn_resume\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonClasses: \"text-white\",\n html: true,\n }\n\n return await confirmationDialog(dialogOptions)\n}\n\n//endregion\n\n//region Error dialogs\n\n// TODO: Update me once we handle problems with authentication in the submit queue\n/**\n * THIS IS TEMPORARY DIALOG UNTIL WE HANDLE THIS IN THE SUBMIT QUEUE!\n * Trigger the Dialog which indicates an authentication error.\n */\nexport async function authenticationErrorDialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogAuthenticationError))\n}\n\n/**\n * Trigger the dialog which indicate that there are no workspaces to show\n */\nexport async function noWorkspacesErrorDialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogNoWorkspaces))\n}\n\n/**\n * Trigger the dialog which indicate that the app is offline\n */\nexport async function offlineErrorDialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogOffline))\n}\n\nexport async function showHTTP400Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp400))\n}\n\nexport async function showHTTP401Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp401))\n}\n\nexport async function showHTTP403Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp403))\n}\n\nexport async function showHTTP404Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp404))\n}\n\nexport async function showHTTP408Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp408))\n}\n\nexport async function showHTTP500Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp500))\n}\n\nexport async function showHTTP501Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp501))\n}\n\nexport async function showHTTP502Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp502))\n}\n\nexport async function showHTTP503Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp503))\n}\n\nexport async function showHTTP504Dialog(): Promise {\n return promisifyDialogChainObject(genericCommonDialogCreator(SfxDialogHttp504))\n}\n\n//endregion\n\n//region Notification dialogs\n\n/**\n * Displays a notification message with Undo action\n *\n * @param msg Custom message to display.\n * @param callbackFn Function to be executed when the Undo button is clicked\n * @param callbackDismissFn Function to be executed when the dialog is dismissed\n *\n * Please note that the callbackDismissFn would be executed regardless the user clicking the Undo button\n */\nexport function undoNotificationDialog(\n msg: string,\n callbackFn: (...args: unknown[]) => void | Promise,\n callbackDismissFn?: (...args: unknown[]) => unknown | Promise\n) {\n return Dialog.create({\n component: SfxDialogUndoNotification,\n componentProps: { msg, callbackFn, callbackDismissFn },\n })\n}\n\n//endregion\n\n//region Manager mode dialogs\n\n/**\n * Used to open the User settings dialog in manager mode\n *\n * **NOTE**\n * This dialog is temporary.\n * Use this dialog until the SA is finished with the design of `29 - My Home (User profile and settings`)\n */\nexport function userSettingsDialog() {\n return Dialog.create({\n component: SfxDialogUserSettings,\n })\n}\n\nexport function changePasswordDialog() {\n return Dialog.create({\n component: SfxDialogChangePassword,\n })\n}\n\nexport function changeUnlockKeyDialog() {\n return Dialog.create({\n component: SfxDialogChangeUnlockKey,\n })\n}\n\nexport function editCorrectionInfoDialog(\n issueId: string,\n issueOnItemAction?: IssuesOnItemAction\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogEditCorrectionInfo,\n componentProps: { issueId, issueOnItemAction },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport function rejectedCorrectiveWorkDialog(issueEventCard: IssueCorrectiveWorkRejectedEventCard) {\n return Dialog.create({\n component: SfxDialogRejectedCorrectiveWork,\n componentProps: { issueEventCard },\n })\n}\n\nexport async function rejectIssueDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogRejectIssue.title\"),\n content: t(\"sfxDialogRejectIssue.content\"),\n label: t(\"sfxDialogRejectIssue.input_label\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonText: t(\"sfxButtons.btn_reject_it\"),\n confirmButtonClasses: \"bg-negative text-white\",\n inputRequired: true,\n html: true,\n }\n\n return await inputDialog(dialogOptions)\n}\n\nexport async function acceptPerformedWorkDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogAcceptWork.title\"),\n content: t(\"sfxDialogAcceptWork.content\"),\n label: t(\"sfxDialogAcceptWork.input_label\"),\n confirmButtonText: t(\"sfxButtons.btn_confirm\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n }\n return await inputDialog(dialogOptions)\n}\n\nexport function acceptCorrectiveWorkDialog(): Promise {\n return new Promise((resolve) =>\n Dialog.create({ component: SfxDialogAcceptCorrectiveWork })\n .onOk((payload: SfxDialogCheckedAndInput) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport function rejectPerformedWorkDialog(\n withIssues?: boolean\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({ component: SfxDialogRejectPerformedWork, componentProps: { withIssues } })\n .onOk((payload: SfxDialogCheckedAndInput) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport async function rejectCorrectiveWorkDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogRejectCorrectiveWork.title\"),\n content: t(\"sfxDialogRejectCorrectiveWork.content\"),\n label: t(\"sfxDialogRejectCorrectiveWork.input_label\"),\n confirmButtonText: t(\"sfxButtons.btn_reject_it\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n confirmButtonClasses: \"bg-negative\",\n width: 449,\n inputRequired: true,\n html: true,\n }\n return await inputDialog(dialogOptions)\n}\n\nexport async function unsavedWorkOrderDraftDialog() {\n const { t } = i18n.global\n\n const confirmationDialogOption: ConfirmationDialogOptions = {\n title: t(\"sfxDialogUnsavedWorkOrderDraft.title\"),\n content: t(\"sfxDialogUnsavedWorkOrderDraft.content\"),\n confirmButtonText: t(\"sfxButtons.btn_confirm\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n }\n return await confirmationDialog(confirmationDialogOption)\n}\n\nexport async function addCommentDialog(\n entity: EntityPages,\n entityId: string,\n attachmentContext: AttachmentContext\n): Promise<\n | IssueComment\n | PerformedWorkComment\n | WorkOrderCorrectiveItemComment\n | WorkOrderRegularItemComment\n | null\n> {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogAddComment,\n componentProps: { entity, entityId, attachmentContext },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport async function workMustBeReviewedDialog(operation: OperationsOnIssue) {\n const { t } = i18n.global\n let translatedOperation = \"\"\n\n switch (operation) {\n case \"reject\":\n translatedOperation = t(\"sfxDialogWorkMustBeReviewed.rejected\")\n break\n case \"delete\":\n translatedOperation = t(\"sfxDialogWorkMustBeReviewed.deleted\")\n break\n case \"supersede\":\n translatedOperation = t(\"sfxDialogWorkMustBeReviewed.superseded\")\n break\n default:\n translatedOperation = t(\"sfxDialogWorkMustBeReviewed.closed\")\n }\n\n return await messageDialog({\n title: t(\"sfxDialogWorkMustBeReviewed.title\"),\n content: t(\"sfxDialogWorkMustBeReviewed.body_content\", { operation: translatedOperation }),\n buttonText: t(\"sfxButtons.btn_understood_without_exclamation\"),\n html: true,\n })\n}\n\nexport async function closeWorkOrderCompletedDialog() {\n const { t } = i18n.global\n\n const dialogOptions: CheckBoxDialogOptions = {\n title: t(\"sfxDialogCloseWorkOrderCompleted.title\"),\n content: t(\"sfxDialogCloseWorkOrderCompleted.content\"),\n label: t(\"sfxDialogCloseWorkOrderCompleted.label\"),\n confirmButtonText: t(\"sfxButtons.btn_close_it\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n html: true,\n }\n\n return await checkBoxDialog(dialogOptions)\n}\n\nexport async function closeWorkOrderNotCompletedDialog() {\n const { t } = i18n.global\n\n const dialogOptions: InputDialogOptions = {\n title: t(\"sfxDialogCloseWorkOrderNotCompleted.title\"),\n content: t(\"sfxDialogCloseWorkOrderNotCompleted.content\"),\n label: t(\"sfxDialogCloseWorkOrderNotCompleted.label\"),\n confirmButtonText: t(\"sfxButtons.btn_close_it\"),\n rejectButtonText: t(\"sfxButtons.btn_cancel\"),\n classes: \"sfx-dialog-border-warning\",\n titleClass: \"text-negative\",\n confirmButtonClasses: \"bg-negative text-white\",\n inputRequired: true,\n html: true,\n }\n\n return await inputDialog(dialogOptions)\n}\n\nexport function confirmWorkOrderEntitiesModification(\n entitiesRemoved: number,\n entitiesAdded: number,\n entitiesToDo: number,\n entitiesTotal: number,\n entity: EntityPages\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogWorkOrderEntities,\n componentProps: { entitiesRemoved, entitiesAdded, entitiesToDo, entitiesTotal, entity },\n })\n .onOk(() => resolve(true))\n .onCancel(() => resolve(false))\n )\n}\n\nexport function confirmRemoveIssueFromWorkOrderDialog(\n workOrder: WorkOrderCardData\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogRemoveIssueFromWorkOrder,\n componentProps: { workOrder },\n })\n .onOk(() => resolve(true))\n .onCancel(() => resolve(false))\n )\n}\n\nexport function confirmRemoveItemFromWorkOrderDialog(\n workOrder: WorkOrderCardData\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogRemoveItemFromWorkOrder,\n componentProps: { workOrder },\n })\n .onOk(() => resolve(true))\n .onCancel(() => resolve(false))\n )\n}\n\nexport function removeItemFromWorkOrderDialog(item: ItemCardData): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogWorkOrderRemoveItem,\n componentProps: { item },\n })\n .onOk(() => resolve(true))\n .onCancel(() => resolve(false))\n )\n}\n\nexport function removeIssueFromWorkOrderDialog(issue: IssueCardData): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxDialogWorkOrderRemoveIssue,\n componentProps: { issue },\n })\n .onOk(() => resolve(true))\n .onCancel(() => resolve(false))\n )\n}\n\n//endregion\n","import { i18n } from \"src/boot/i18n\"\nimport { LINKS } from \"src/env/links\"\nimport { MainMenuType } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath, NamedPath } from \"src/util/enums/namedPaths\"\nimport { AttachmentContext } from \"src/util/types/dataModels/attachment\"\nimport { EntityPages, MenuData, MenuDataManager } from \"src/util/types/dataModels/entityDefinition\"\n\nexport function getExtendedMenuData(item: MainMenuType, workspaceId: string): MenuData {\n const { t } = i18n.global\n\n switch (item) {\n case MainMenuType.WORKSPACES:\n return {\n icon: Icons.WORKSPACES,\n label: t(\"sfxNavigation.workspaces\"),\n to: { name: NamedPath.SELECT_WORKSPACE },\n disable: false,\n }\n case MainMenuType.SETTINGS:\n return {\n icon: Icons.SETTINGS,\n label: t(\"sfxNavigation.settings\"),\n to: { name: NamedPath.USER_SETTINGS },\n disable: false,\n }\n case MainMenuType.ATTACHMENTS:\n return {\n icon: Icons.ATTACHMENTS,\n label: t(\"sfxNavigation.attachments\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.ZONES:\n return {\n icon: Icons.ZONES,\n label: t(\"sfxNavigation.zones\"),\n to: { name: NamedPath.SELECT_ZONE, params: { workspaceId } },\n disable: true,\n }\n case MainMenuType.LAYOUTS:\n return {\n icon: Icons.LAYOUTS,\n label: t(\"sfxNavigation.layouts\"),\n to: { name: NamedPath.SELECT_LAYOUT, params: { workspaceId } },\n disable: true,\n }\n case MainMenuType.AREAS:\n return {\n icon: Icons.AREAS,\n label: t(\"sfxNavigation.areas\"),\n to: { name: NamedPath.SELECT_AREA, params: { workspaceId } },\n disable: true,\n }\n case MainMenuType.LOCATIONS:\n return {\n icon: Icons.LOCATIONS,\n label: t(\"sfxNavigation.locations\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.MODELS:\n return {\n icon: Icons.MODELS,\n label: t(\"sfxNavigation.models\"),\n to: { name: NamedPath.SELECT_MODEL, params: { workspaceId } },\n disable: true,\n }\n case MainMenuType.ITEMS:\n return {\n icon: Icons.ITEMS,\n label: t(\"sfxNavigation.items\"),\n to: { name: NamedPath.SELECT_ITEM, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.PERFORMED_WORK:\n return {\n icon: Icons.PERFORMED_WORK_LIST,\n label: t(\"sfxNavigation.performed_work\"),\n to: { name: NamedPath.SELECT_PERFORMED_WORK, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.ISSUES:\n return {\n icon: Icons.ISSUES,\n label: t(\"sfxNavigation.issues\"),\n to: { name: NamedPath.SELECT_ISSUE, params: { workspaceId } },\n disable: false,\n }\n default:\n return {\n icon: Icons.WARNING,\n label: t(\"sfxNavigation.error\"),\n to: { name: NamedPath.NOT_FOUND },\n }\n }\n}\n\nexport function getExtendedMenuDataManager(\n item: MainMenuType,\n workspaceId: string\n): MenuDataManager {\n const { t } = i18n.global\n\n // TODO: to { name:should be fixe }d for all\n switch (item) {\n case MainMenuType.WORKSPACES:\n return {\n icon: Icons.WORKSPACES,\n name: \"workspaces\",\n label: t(\"sfxNavigation.workspaces\"),\n to: { name: NamedManagerPath.SELECT_WORKSPACE },\n disable: false,\n }\n case MainMenuType.ATTACHMENTS:\n return {\n icon: Icons.ATTACHMENTS,\n name: \"attachments\",\n label: t(\"sfxNavigation.attachments\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.ZONES:\n return {\n icon: Icons.ZONES,\n name: \"zones\",\n label: t(\"sfxNavigation.zones\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.LAYOUTS:\n return {\n icon: Icons.LAYOUTS,\n name: \"layouts\",\n label: t(\"sfxNavigation.layouts\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.AREAS:\n return {\n icon: Icons.AREAS,\n name: \"areas\",\n label: t(\"sfxNavigation.areas\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.LOCATIONS:\n return {\n icon: Icons.LOCATIONS,\n name: \"locations\",\n label: t(\"sfxNavigation.locations\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.MODELS:\n return {\n icon: Icons.MODELS,\n name: \"models\",\n label: t(\"sfxNavigation.models\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.ITEMS:\n return {\n icon: Icons.ITEMS,\n name: \"items\",\n label: t(\"sfxNavigation.items\"),\n to: { name: NamedManagerPath.SELECT_ITEM, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.PERFORMED_WORK:\n return {\n icon: Icons.PERFORMED_WORK_LIST,\n name: \"performed-work\",\n label: t(\"sfxNavigation.performed_work\"),\n to: { name: NamedManagerPath.SELECT_PERFORMED_WORK, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.ISSUES:\n return {\n icon: Icons.ISSUES,\n name: \"issues\",\n label: t(\"sfxNavigation.issues\"),\n to: { name: NamedManagerPath.SELECT_ISSUE, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.HOME:\n return {\n icon: Icons.HOME,\n name: \"home\",\n label: t(\"sfxNavigation.home\"),\n to: { name: NamedManagerPath.WORKSPACE, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.ANALYTICS:\n return {\n icon: Icons.ANALYTICS,\n name: \"analytics\",\n label: t(\"sfxNavigation.analytics\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.WORK_ORDERS:\n return {\n icon: Icons.WORK_ORDERS,\n name: \"work-orders\",\n label: t(\"sfxNavigation.work_orders\"),\n to: { name: NamedManagerPath.SELECT_WORK_ORDER, params: { workspaceId } },\n disable: false,\n }\n case MainMenuType.ADMINISTRATION:\n return {\n icon: Icons.ADMINISTRATION,\n name: \"administration\",\n label: t(\"sfxNavigation.administrate\"),\n externalLink: LINKS.USER_MANAGEMENT_URL,\n disable: false,\n }\n case MainMenuType.AUDIT:\n return {\n icon: Icons.AUDIT_ACCEPTED,\n name: \"audit\",\n label: t(\"sfxNavigation.audit\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.IDENTIFY:\n return {\n icon: Icons.IDENTIFY,\n name: \"identify\",\n label: t(\"sfxNavigation.identify\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.CHANGE_REQUESTS:\n return {\n icon: Icons.CHANGE_REQUESTS,\n name: \"change-requests\",\n label: t(\"sfxNavigation.change_requests\"),\n to: \"ADD ME\",\n disable: true,\n }\n case MainMenuType.WORK_DOMAINS:\n return {\n icon: Icons.WORKDOMAINS,\n name: \"work-domains\",\n label: t(\"sfxNavigation.work_domains\"),\n to: \"ADD ME\",\n disable: true,\n }\n default:\n return {\n icon: Icons.WARNING,\n name: \"error\",\n label: t(\"sfxNavigation.error\"),\n to: { name: NamedPath.NOT_FOUND },\n }\n }\n}\n\nexport function getTranslatedEntityForPage(entity: EntityPages, isPlural = false) {\n const { t } = i18n.global\n\n const count = isPlural ? 2 : 1\n\n switch (entity) {\n case \"item\": {\n return t(\"sfxTable.entity_item\", count)\n }\n case \"issue\": {\n return t(\"sfxTable.entity_issue\", count)\n }\n case \"model\": {\n return t(\"sfxTable.entity_model\", count)\n }\n case \"performed_work\": {\n return t(\"sfxTable.entity_performed_work\", count)\n }\n case \"area\": {\n return t(\"sfxTable.entity_area\", count)\n }\n case \"layout\": {\n return t(\"sfxTable.entity_layout\", count)\n }\n case \"workspace\": {\n return t(\"sfxTable.entity_workspace\", count)\n }\n case \"zone\": {\n return t(\"sfxTable.entity_zone\", count)\n }\n case \"work_order\": {\n return t(\"sfxTable.entity_work_order\", count)\n }\n case \"attachment\": {\n return t(\"sfxTable.entity_attachment\", count)\n }\n case \"location\": {\n return t(\"sfxTable.entity_location\", count)\n }\n }\n}\n\nexport function getTranslatedEntityForAttachment(entity: AttachmentContext): string {\n const { t } = i18n.global\n\n switch (entity) {\n case \"item\":\n return t(\"attachmentContext.item\")\n\n case \"item_model\":\n return t(\"attachmentContext.item_model\")\n\n case \"corrective_work_area\":\n case \"corrective_work_item\":\n case \"corrective_work_item_comment\":\n return t(\"attachmentContext.corrective_work\")\n\n case \"regular_work_area\":\n case \"regular_work_item\":\n case \"regular_work_item_comment\":\n return t(\"attachmentContext.regular_work\")\n\n case \"issue_area\":\n case \"issue_item\":\n case \"issue_item_comment\":\n return t(\"attachmentContext.issue\")\n\n case \"work_order_corrective_item\":\n case \"work_order_corrective_area\":\n case \"work_order_corrective_item_comment\":\n case \"work_order_corrective_area_comment\":\n return t(\"attachmentContext.corrective_work_order\")\n\n case \"work_order_regular_item\":\n case \"work_order_regular_area\":\n case \"work_order_regular_item_comment\":\n case \"work_order_regular_area_comment\":\n return t(\"attachmentContext.regular_work_order\")\n\n case \"area\":\n return t(\"attachmentContext.area\")\n\n case \"zone\":\n return t(\"attachmentContext.zone\")\n }\n}\n","import { RxDocument } from \"rxdb\"\nimport { AttachmentDocument } from \"src/db/collectionDefinitions/csi/attachment\"\nimport { AttributeSelectDocumentMethods } from \"src/db/collectionDefinitions/csi/attribute\"\nimport { CorrectiveWorkOnItemDocument } from \"src/db/collectionDefinitions/csi/correctiveWork\"\nimport { IssueOnItemActionsDocument } from \"src/db/collectionDefinitions/csi/issueOnItemActions\"\nimport { IssueOnItemCommentDocument } from \"src/db/collectionDefinitions/csi/issueOnItemComments\"\nimport { IssuePriorityDocument } from \"src/db/collectionDefinitions/csi/issuePriorities\"\nimport { IssueOnItemDocument } from \"src/db/collectionDefinitions/csi/issuesOnItem\"\nimport { ItemDocument } from \"src/db/collectionDefinitions/csi/item\"\nimport { RegularWorkOnItemDocument } from \"src/db/collectionDefinitions/csi/regularWork\"\nimport { WorkDomainWorkspaceDocument } from \"src/db/collectionDefinitions/csi/workDomainWorkspace\"\nimport {\n WorkOrderCorrectiveItemDocument,\n WorkOrderRegularItemDocument,\n} from \"src/db/collectionDefinitions/csi/workOrder\"\nimport {\n WorkOrderCorrectiveItemCommentDocument,\n WorkOrderRegularItemCommentDocument,\n} from \"src/db/collectionDefinitions/csi/workOrderComments\"\nimport { WorkOrderPriorityDocument } from \"src/db/collectionDefinitions/csi/workOrderPriority\"\nimport { UserRoleDocument } from \"src/db/collectionDefinitions/springboard/userRole\"\nimport { WorkDomainGlobalDocument } from \"src/db/collectionDefinitions/springboard/workDomainGlobal\"\nimport { AppBaseDB, AppCommonDB, getCommonDB, getDB } from \"src/db/databases\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { CSIurl, SpringboardURL } from \"src/util/enums/urls\"\nimport { getAttachmentsList } from \"src/util/http/csi/attachments\"\nimport {\n getAttributeCharList,\n getAttributeNumericList,\n getAttributeSelectList,\n getAttributesSelectOptionsList,\n getAttributeTemporalList,\n} from \"src/util/http/csi/attributes\"\nimport { getIdentifiersList } from \"src/util/http/csi/identifiers\"\nimport { getIssuePrioritiesList } from \"src/util/http/csi/issuePriorities\"\nimport {\n getIssueOnItemAttachment,\n getIssueOnItemAttachmentContent,\n getIssueOnItemAttachmentList,\n getIssueOnItemCommentAttachment,\n getIssueOnItemCommentAttachmentContent,\n getIssueOnItemCommentAttachmentList,\n getIssueOnItemCommentList,\n getIssuesOnItemActionsList,\n getIssuesOnItemList,\n postIssueOnItemAttachment,\n postIssueOnItemAttachmentBatch,\n postIssueOnItemCommentAttachment,\n postIssueOnItemCommentAttachmentBatch,\n} from \"src/util/http/csi/issues\"\nimport { getItemClassesList } from \"src/util/http/csi/itemClasses\"\nimport {\n getItemModelAttachment,\n getItemModelAttachmentContent,\n getItemModelAttachmentList,\n getItemModelsList,\n postItemModelAttachment,\n postItemModelAttachmentBatch,\n} from \"src/util/http/csi/itemModels\"\nimport {\n getItemAttachment,\n getItemAttachmentContent,\n getItemAttachmentList,\n getItemAttributeCharValuesList,\n getItemAttributeNumericValuesList,\n getItemAttributeSelectValuesList,\n getItemAttributeTemporalValuesList,\n getItemsList,\n getWorkOrderListForItem,\n postItemAttachment,\n postItemAttachmentBatch,\n} from \"src/util/http/csi/items\"\nimport {\n getCorrectiveWorkOnItemAttachment,\n getCorrectiveWorkOnItemAttachmentContent,\n getCorrectiveWorkOnItemAttachmentList,\n getCorrectiveWorkOnItemCommentAttachment,\n getCorrectiveWorkOnItemCommentAttachmentContent,\n getCorrectiveWorkOnItemCommentAttachmentList,\n getCorrectiveWorkOnItemList,\n getRegularWorkOnItemAttachment,\n getRegularWorkOnItemAttachmentContent,\n getRegularWorkOnItemAttachmentList,\n getRegularWorkOnItemCommentAttachment,\n getRegularWorkOnItemCommentAttachmentContent,\n getRegularWorkOnItemCommentAttachmentList,\n getRegularWorkOnItemList,\n postCorrectiveWorkOnItemAttachment,\n postCorrectiveWorkOnItemAttachmentBatch,\n postCorrectiveWorkOnItemCommentAttachment,\n postCorrectiveWorkOnItemCommentAttachmentBatch,\n postRegularWorkOnItemAttachment,\n postRegularWorkOnItemAttachmentBatch,\n postRegularWorkOnItemCommentAttachment,\n postRegularWorkOnItemCommentAttachmentBatch,\n} from \"src/util/http/csi/performedWork\"\nimport { getWorkDomainsWorkspaceList } from \"src/util/http/csi/workDomainsWorkspace\"\nimport { getWorkOrderPrioritiesList } from \"src/util/http/csi/workOrderPriorities\"\nimport {\n getWorkOrderCorrectiveItemAttachment,\n getWorkOrderCorrectiveItemAttachmentContent,\n getWorkOrderCorrectiveItemAttachmentList,\n getWorkOrderCorrectiveItemCommentAttachment,\n getWorkOrderCorrectiveItemCommentAttachmentContent,\n getWorkOrderCorrectiveItemCommentAttachmentList,\n getWorkOrderCorrectiveItemCommentList,\n getWorkOrderCorrectiveItemList,\n getWorkOrderRegularItemAttachment,\n getWorkOrderRegularItemAttachmentContent,\n getWorkOrderRegularItemAttachmentList,\n getWorkOrderRegularItemCommentAttachment,\n getWorkOrderRegularItemCommentAttachmentContent,\n getWorkOrderRegularItemCommentAttachmentList,\n getWorkOrderRegularItemCommentList,\n getWorkOrderRegularItemList,\n postWorkOrderCorrectiveItemAttachment,\n postWorkOrderCorrectiveItemAttachmentBatch,\n postWorkOrderCorrectiveItemCommentAttachment,\n postWorkOrderCorrectiveItemCommentAttachmentBatch,\n postWorkOrderRegularItemAttachment,\n postWorkOrderRegularItemAttachmentBatch,\n postWorkOrderRegularItemCommentAttachment,\n postWorkOrderRegularItemCommentAttachmentBatch,\n} from \"src/util/http/csi/workOrders\"\nimport {\n getAllAttachmentForEntity,\n getAllEntitiesConcurrent,\n getAllEntitiesForIdConcurrent,\n isIgnoredError,\n} from \"src/util/http/httpHelper\"\nimport { getUserRoles } from \"src/util/http/springboard/user\"\nimport { getWorkDomainsGlobalList } from \"src/util/http/springboard/workDomainsGlobal\"\nimport { getUsersForWorkspace, getWorkspaceList } from \"src/util/http/springboard/workspaces\"\nimport {\n Attachment,\n AttachmentContext,\n AttachmentUpload,\n} from \"src/util/types/dataModels/attachment\"\nimport {\n AttributeChar,\n AttributeNumeric,\n AttributeSelect,\n AttributeSelectOptions,\n AttributeTemporal,\n ItemAttributeCharValue,\n ItemAttributeNumericValue,\n ItemAttributeSelectValue,\n ItemAttributeTemporalValue,\n} from \"src/util/types/dataModels/attribute\"\nimport { BatchErrors, ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { IssuesOnItem, IssuesOnItemAction } from \"src/util/types/dataModels/issue\"\nimport { IssueComment } from \"src/util/types/dataModels/issueComment\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { Item, ItemWorkOrder } from \"src/util/types/dataModels/item\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport { CorrectiveWorkOnItem, RegularWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { UserRole } from \"src/util/types/dataModels/user\"\nimport { WorkDomainGlobal, WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport { WorkOrderCorrectiveItem, WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\nimport {\n WorkOrderCorrectiveItemComment,\n WorkOrderRegularItemComment,\n} from \"src/util/types/dataModels/workOrderComment\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\n\n// NOTE: Possible improvements:\n// - Force fetch that would bypass the canCall again check.\n// - Filtering.\n// - Functions for singular items\n\n// NOTE: Naming convention:\n// Update entity from the API -> \"fetch\" + entity name + \"List\" (if multiple/array) + \"Data\" = f.x. fetchItemListData\n// Get entity from the DB -> \"get\" + entity name + \"List\" (if multiple/array) + \"Data\" = f.x. getItemListData\n\n// TODO: HANDLE DELETION OF ENTITIES ON THE SERVER :'(\n\n//region Workspace\n\nexport async function fetchWorkspaceListData(db?: AppCommonDB): Promise {\n if (!db) db = await getCommonDB()\n\n try {\n // NOTE: Workspace don't support update_dt\n const entities = await getWorkspaceList()\n await db.workspace.bulkUpsert(entities)\n } catch (error) {\n Log.error({\n message: \"Error trying to fetch Workspace data\",\n error,\n })\n\n throw error\n }\n}\n\nexport async function getWorkspaceListData() {\n const db = await getCommonDB()\n await db.workspace?.remove() // Kills the db instance, so we have config,to recreate it\n const newDb = await getCommonDB()\n await fetchWorkspaceListData(newDb)\n return await newDb.workspace.find().exec()\n}\n\nexport async function fetchUsersForWorkspaceListData(\n workspaceId: string,\n config: HttpConfig = {},\n db?: AppCommonDB\n): Promise {\n if (!db) db = await getCommonDB()\n\n try {\n // NOTE: Workspace don't support update_dt\n const entities = await getUsersForWorkspace(config, workspaceId)\n if (entities.length > 0) {\n await db.user.bulkUpsert(entities)\n return true\n }\n } catch (error) {\n Log.error({\n message: \"Error trying to fetch Workspace data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getUsersForWorkspaceListData(workspaceId: string, config?: HttpConfig) {\n const db = await getCommonDB()\n await fetchUsersForWorkspaceListData(workspaceId, config, db)\n return await db.user.find().exec()\n}\n\n//endregion\n\n//region User Roles\n\nexport async function fetchUserRolesListData(\n config?: HttpConfig,\n db?: AppCommonDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = SpringboardURL.USER_ROLES\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getCommonDB()\n\n // NOTE: User roles don't support update_dt\n const entities = await getAllEntitiesConcurrent(\n getUserRoles,\n { lastCall: undefined, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.user_role.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch User Roles data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getUserRolesListData(config?: HttpConfig): Promise {\n const db = await getCommonDB()\n await fetchUserRolesListData(config, db)\n return await db.user_role.find().exec()\n}\n\n//endregion\n\n//region Item\n\nexport async function fetchItemListData(config?: HttpConfig, db?: AppBaseDB): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemsList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getItemListData(config?: HttpConfig): Promise {\n const db = await getDB()\n await fetchItemListData(config, db)\n return await db.item.find().exec()\n}\n\nexport async function fetchItemAttributeCharValuesListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUES_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemAttributeCharValuesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_char_value.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item attribute char data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function fetchItemAttributeNumericValuesListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUES_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemAttributeNumericValuesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_numeric_value.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item attribute numeric data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function fetchItemAttributeSelectValuesListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUES_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemAttributeSelectValuesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_select_value.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item attribute select data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function fetchItemAttributeTemporalValuesListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUES_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemAttributeTemporalValuesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_temporal_value.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item attribute temporal data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function fetchItemWorkOrderListData(\n itemId: string,\n config?: HttpConfig\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEMS_WORK_ORDER_REGULAR.replace(\"{item_id}\", itemId)\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n const db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const workOrders = await getAllEntitiesForIdConcurrent(\n getWorkOrderListForItem,\n { lastCall, callUrl },\n itemId,\n config\n )\n\n const itemWorkOrder: ItemWorkOrder = {\n item_id: itemId,\n work_orders: workOrders,\n }\n await db.item_work_orders.upsert(itemWorkOrder)\n return true\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Work Order list for itemID\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\n//endregion\n\n//region Item Class\n\nexport async function fetchItemClassListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEM_CLASSES_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemClassesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.item_class.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item Class data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getItemClassListData(config?: HttpConfig): Promise[]> {\n const db = await getDB()\n await fetchItemClassListData(config, db)\n return await db.item_class.find().exec()\n}\n\n//endregion\n\n//region Item Model\n\nexport async function fetchItemModelListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ITEM_MODELS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getItemModelsList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.item_model.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Item Model data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getItemModelListData(config?: HttpConfig): Promise[]> {\n const db = await getDB()\n await fetchItemModelListData(config, db)\n return await db.item_model.find().exec()\n}\n\n//endregion\n\n//region Issue\n\nexport async function fetchIssuePriorityListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ISSUE_PRIORITIES\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getIssuePrioritiesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.issue_priority.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Issue Priorities data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getIssuePriorityListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchIssuePriorityListData(config, db)\n return await db.issue_priority.find().exec()\n}\n\nexport async function fetchIssueOnItemListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ISSUES_ON_ITEM\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getIssuesOnItemList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.issues_on_item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Issue On Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getIssueOnItemListData(config?: HttpConfig): Promise {\n const db = await getDB()\n await fetchIssueOnItemListData(config, db)\n return await db.issues_on_item.find().exec()\n}\n\nexport async function fetchIssueOnItemActionsListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ISSUE_ON_ITEM_ACTIONS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getIssuesOnItemActionsList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.issue_on_item_actions.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch the Actions data for this Issue On Item\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getIssueOnItemActionsListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchIssueOnItemActionsListData(config, db)\n return await db.issue_on_item_actions.find().exec()\n}\n\nexport async function fetchIssueOnItemCommentListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ISSUES_ON_ITEM_COMMENTS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getIssueOnItemCommentList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.issue_on_item_comments.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch the Comments data for this Issue On Item\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getIssueOnItemCommentListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchIssueOnItemCommentListData(config, db)\n return await db.issue_on_item_comments.find().exec()\n}\n\n//endregion\n\n//region Attributes\n\nexport async function fetchAttributeCharListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTRIBUTES_CHAR_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttributeCharList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_char.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attribute Char data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getAttributeCharListData(\n config?: HttpConfig\n): Promise[]> {\n const db = await getDB()\n await fetchAttributeCharListData(config, db)\n return await db.attribute_char.find().exec()\n}\n\nexport async function fetchAttributeNumericListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTRIBUTES_NUMERIC_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttributeNumericList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_numeric.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attribute Numeric data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getAttributeNumericListData(\n config?: HttpConfig\n): Promise[]> {\n const db = await getDB()\n await fetchAttributeNumericListData(config, db)\n return await db.attribute_numeric.find().exec()\n}\n\nexport async function fetchAttributeSelectListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTRIBUTES_SELECT_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttributeSelectList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_select.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attribute Select data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getAttributeSelectListData(\n config?: HttpConfig\n): Promise[]> {\n const db = await getDB()\n await fetchAttributeSelectListData(config, db)\n return await db.attribute_select.find().exec()\n}\n\nexport async function fetchAttributeSelectOptionsListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTRIBUTES_SELECT_OPTIONS_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttributesSelectOptionsList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_select_options.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attribute Select Options data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getAttributeSelectOptionsListData(\n config?: HttpConfig\n): Promise[]> {\n const db = await getDB()\n await fetchAttributeSelectOptionsListData(config, db)\n return await db.attribute_select_options.find().exec()\n}\n\nexport async function fetchAttributeTemporalListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTRIBUTES_TEMPORAL_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttributeTemporalList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attribute_temporal.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attribute Temporal data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getAttributeTemporalListData(\n config?: HttpConfig\n): Promise[]> {\n const db = await getDB()\n await fetchAttributeTemporalListData(config, db)\n return await db.attribute_temporal.find().exec()\n}\n\n//endregion\n\n//region Performed Work\n\nexport async function fetchCorrectiveWorkOnItemListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getCorrectiveWorkOnItemList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.corrective_work_on_item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Corrective Work on Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getCorrectiveWorkOnItemListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchCorrectiveWorkOnItemListData(config, db)\n return await db.corrective_work_on_item.find().exec()\n}\n\nexport async function fetchRegularWorkOnItemListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.PERFORMED_WORK_REGULAR_ITEM_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getRegularWorkOnItemList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.regular_work_on_item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Regular Work on Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getRegularWorkOnItemListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchRegularWorkOnItemListData(config, db)\n return await db.regular_work_on_item.find().exec()\n}\n\n//endregion\n\n//region Work Domain Global\n\nexport async function fetchWorkDomainGlobalListData(\n config?: HttpConfig,\n commonDb?: AppCommonDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = SpringboardURL.WORK_DOMAINS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!commonDb) commonDb = await getCommonDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkDomainsGlobalList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await commonDb.work_domain_global.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Work Domain Global data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkDomainGlobalListData(\n config?: HttpConfig\n): Promise {\n const commonDb = await getCommonDB()\n await fetchWorkDomainGlobalListData(config, commonDb)\n return await commonDb.work_domain_global.find().exec()\n}\n\n//endregion\n\n//region Work Domain Workspace\n\nexport async function fetchWorkDomainWorkspaceListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_DOMAINS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkDomainsWorkspaceList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_domain_workspace.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Work Domain Workspace data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkDomain(\n workDomainId: string\n): Promise {\n const db = await getDB()\n const document = await db.work_domain_workspace.findOne({ selector: { id: workDomainId } }).exec()\n return document?.toMutableJSON()\n}\n\nexport async function getWorkDomainWorkspaceListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkDomainWorkspaceListData(config, db)\n return await db.work_domain_workspace.find().exec()\n}\n\n//endregion\n\n//region Work Order\n\nexport async function fetchWorkOrderCorrectiveItemListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkOrderCorrectiveItemList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_order_corrective_item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Corrective Work Order Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkOrderCorrectiveItemListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkOrderCorrectiveItemListData(config, db)\n return await db.work_order_corrective_item.find().exec()\n}\n\nexport async function fetchWorkOrderCorrectiveItemCommentListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkOrderCorrectiveItemCommentList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_order_corrective_comments.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch the Comments data for Corrective Work Order Item\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkOrderCorrectiveItemCommentListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkOrderCorrectiveItemCommentListData(config, db)\n return await db.work_order_corrective_comments.find().exec()\n}\n\nexport async function fetchWorkOrderRegularItemListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_ORDER_REGULAR_ON_ITEM\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkOrderRegularItemList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_order_regular_item.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Regular Work Order Item data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkOrderRegularItemListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkOrderRegularItemListData(config, db)\n return await db.work_order_regular_item.find().exec()\n}\n\nexport async function fetchWorkOrderRegularItemCommentListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkOrderRegularItemCommentList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_order_regular_comments.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch the Comments data for Regular Work Order Item\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkOrderRegularItemCommentListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkOrderRegularItemCommentListData(config, db)\n return await db.work_order_regular_comments.find().exec()\n}\n\n//endregion\n\n//region Work Order Priority\n\nexport async function fetchWorkOrderPriorityListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.WORK_ORDER_PRIORITIES\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getWorkOrderPrioritiesList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.work_order_priority.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Work Order Priorities data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function getWorkOrderPriorityListData(\n config?: HttpConfig\n): Promise {\n const db = await getDB()\n await fetchWorkOrderPriorityListData(config, db)\n return await db.work_order_priority.find().exec()\n}\n\n//endregion\n\n//region Attachments\n\n/**\n * DO NOT USE THIS UNLESS YOU KNOW WHAT YOU ARE DOING.\n *\n * This is a general function for attachments.\n * BUT attachments each have some context/entity they are attached to.\n * This means that each attachment has a different permission level.\n * Ergo, this function is only really usable by people with the highest permission levels,\n * and we should avoid using it as much as possible, unless strictly necessary.\n * One instance would be the attachments list in technician mode.\n * But this needs to be discussed further with the CTO and team leads.\n */\nexport async function fetchAttachmentListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.ATTACHMENTS_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllEntitiesConcurrent(\n getAttachmentsList,\n { lastCall, callUrl },\n config\n )\n\n if (entities.length > 0) {\n await db.attachment.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attachment data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\n/**\n * DO NOT USE THIS UNLESS YOU KNOW WHAT YOU ARE DOING.\n * See {@link fetchAttachmentListData} for more information.\n */\nexport async function getAttachmentListData(config?: HttpConfig): Promise {\n const db = await getDB()\n await fetchAttachmentListData(config, db)\n return await db.attachment.find().exec()\n}\n\n//endregion\n\n//region Identifier\n\nexport async function fetchIdentifierListData(\n config?: HttpConfig,\n db?: AppBaseDB\n): Promise {\n const apiCallStore = useApiCallStore()\n const callUrl = CSIurl.IDENTIFIERS_LIST\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n if (!db) db = await getDB()\n\n const data = await getIdentifiersList(config)\n if (data) {\n await db.identifier.bulkInsertByType(data)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Identifier data\",\n error,\n })\n\n throw error\n }\n\n return false\n}\n\n//endregion\n\n//region Attachments\n\nasync function fetchAttachmentsForEntity(\n entityId: string,\n callUrl: string,\n getAttachmentFunc: (config: HttpConfig, entityId: string) => Promise>,\n context: AttachmentContext\n) {\n const apiCallStore = useApiCallStore()\n\n try {\n if (apiCallStore.canCallAgain(callUrl)) {\n const db = await getDB()\n\n const lastCall = apiCallStore.getLastUpdatedTimeStamp(callUrl)\n\n const entities = await getAllAttachmentForEntity(\n getAttachmentFunc,\n { lastCall, callUrl },\n entityId\n )\n\n if (entities.length > 0) {\n await db.attachment.bulkUpsert(entities)\n return true\n }\n }\n } catch (error) {\n if (isIgnoredError(error)) return false\n Log.error({\n message: \"Error trying to fetch Attachment data for \" + context,\n error,\n })\n\n throw error\n }\n\n return false\n}\n\nexport async function fetchAttachmentsForItem(itemId: string) {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_LIST.replace(\"{item_id}\", itemId)\n return fetchAttachmentsForEntity(itemId, url, getItemAttachmentList, \"item\")\n}\n\nexport async function fetchAttachmentsForItemModel(itemModelId: string) {\n const url = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_LIST.replace(\"{model_id}\", itemModelId)\n return fetchAttachmentsForEntity(itemModelId, url, getItemModelAttachmentList, \"item_model\")\n}\n\nexport async function fetchAttachmentsForCorrectiveWorkOnItem(workId: string) {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_LIST.replace(\"{work_id}\", workId)\n return fetchAttachmentsForEntity(\n workId,\n url,\n getCorrectiveWorkOnItemAttachmentList,\n \"corrective_work_item\"\n )\n}\n\nexport async function fetchAttachmentsForRegularWorkOnItem(workId: string) {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_LIST.replace(\"{work_id}\", workId)\n return fetchAttachmentsForEntity(\n workId,\n url,\n getRegularWorkOnItemAttachmentList,\n \"regular_work_item\"\n )\n}\n\nexport async function fetchAttachmentsForCorrectiveWorkOnItemComments(commentId: string) {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n return fetchAttachmentsForEntity(\n commentId,\n url,\n getCorrectiveWorkOnItemCommentAttachmentList,\n \"corrective_work_item_comment\"\n )\n}\n\nexport async function fetchAttachmentsForRegularWorkOnItemComments(commentId: string) {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n return fetchAttachmentsForEntity(\n commentId,\n url,\n getRegularWorkOnItemCommentAttachmentList,\n \"regular_work_item_comment\"\n )\n}\n\nexport async function fetchAttachmentsForIssueOnItem(issueId: string) {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_LIST.replace(\"{issue_id}\", issueId)\n return fetchAttachmentsForEntity(issueId, url, getIssueOnItemAttachmentList, \"issue_item\")\n}\n\nexport async function fetchAttachmentsForIssueOnItemComment(commentId: string) {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\"{comment_id}\", commentId)\n return fetchAttachmentsForEntity(\n commentId,\n url,\n getIssueOnItemCommentAttachmentList,\n \"issue_item_comment\"\n )\n}\n\nexport async function fetchAttachmentsForCorrectiveWorkOrderItem(workOrderId: string) {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n return fetchAttachmentsForEntity(\n workOrderId,\n url,\n getWorkOrderCorrectiveItemAttachmentList,\n \"work_order_corrective_item\"\n )\n}\n\nexport async function fetchAttachmentsForRegularWorkOrderItem(workOrderId: string) {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n return fetchAttachmentsForEntity(\n workOrderId,\n url,\n getWorkOrderRegularItemAttachmentList,\n \"work_order_regular_item\"\n )\n}\n\nexport async function fetchAttachmentsForCorrectiveWorkOrderItemComment(commentId: string) {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n return fetchAttachmentsForEntity(\n commentId,\n url,\n getWorkOrderCorrectiveItemCommentAttachmentList,\n \"work_order_corrective_item_comment\"\n )\n}\n\nexport async function fetchAttachmentsForRegularWorkOrderItemComment(commentId: string) {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n return fetchAttachmentsForEntity(\n commentId,\n url,\n getWorkOrderRegularItemCommentAttachmentList,\n \"work_order_regular_item_comment\"\n )\n}\n\n/**\n * Call the appropriate post function for attachment based on the entity provided.\n * This functions does NO error handling, this should be done on use level.\n * Returns NULL for cases of entity not yet supported.\n *\n * @param entity\n * @param entityId\n * @param attachment\n */\nexport async function postAttachmentForEntity(\n entity: AttachmentContext,\n entityId: string,\n attachment: AttachmentUpload\n): Promise {\n switch (entity) {\n case \"item\":\n return postItemAttachment({}, entityId, attachment)\n\n case \"item_model\":\n return postItemModelAttachment({}, entityId, attachment)\n\n case \"issue_item\":\n return postIssueOnItemAttachment({}, entityId, attachment)\n\n case \"corrective_work_item\":\n return postCorrectiveWorkOnItemAttachment({}, entityId, attachment)\n\n case \"regular_work_item\":\n return postRegularWorkOnItemAttachment({}, entityId, attachment)\n\n case \"issue_item_comment\":\n return postIssueOnItemCommentAttachment({}, entityId, attachment)\n\n case \"corrective_work_item_comment\":\n return postCorrectiveWorkOnItemCommentAttachment({}, entityId, attachment)\n\n case \"regular_work_item_comment\":\n return postRegularWorkOnItemCommentAttachment({}, entityId, attachment)\n\n case \"work_order_corrective_item\":\n return postWorkOrderCorrectiveItemAttachment({}, entityId, attachment)\n\n case \"work_order_regular_item\":\n return postWorkOrderRegularItemAttachment({}, entityId, attachment)\n\n case \"work_order_corrective_item_comment\":\n return postWorkOrderCorrectiveItemCommentAttachment({}, entityId, attachment)\n\n case \"work_order_regular_item_comment\":\n return postWorkOrderRegularItemCommentAttachment({}, entityId, attachment)\n\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"regular_work_area\":\n case \"corrective_work_area\":\n case \"issue_area\":\n case \"area\":\n case \"zone\":\n return null\n }\n}\n\n/**\n * Call the appropriate post batch function for attachment based on the entity provided.\n * This functions does NO error handling, this should be done on use level.\n * Returns NULL for cases of entity not yet supported.\n *\n * @param entity\n * @param entityId\n * @param attachments\n */\nexport async function postAttachmentForEntityBatch(\n entity: AttachmentContext,\n entityId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList | null> {\n switch (entity) {\n case \"item\":\n return postItemAttachmentBatch({}, entityId, attachments)\n\n case \"item_model\":\n return postItemModelAttachmentBatch({}, entityId, attachments)\n\n case \"issue_item\":\n return postIssueOnItemAttachmentBatch({}, entityId, attachments)\n\n case \"corrective_work_item\":\n return postCorrectiveWorkOnItemAttachmentBatch({}, entityId, attachments)\n\n case \"regular_work_item\":\n return postRegularWorkOnItemAttachmentBatch({}, entityId, attachments)\n\n case \"issue_item_comment\":\n return postIssueOnItemCommentAttachmentBatch({}, entityId, attachments)\n\n case \"corrective_work_item_comment\":\n return postCorrectiveWorkOnItemCommentAttachmentBatch({}, entityId, attachments)\n\n case \"regular_work_item_comment\":\n return postRegularWorkOnItemCommentAttachmentBatch({}, entityId, attachments)\n\n case \"work_order_corrective_item\":\n return postWorkOrderCorrectiveItemAttachmentBatch({}, entityId, attachments)\n\n case \"work_order_regular_item\":\n return postWorkOrderRegularItemAttachmentBatch({}, entityId, attachments)\n\n case \"work_order_corrective_item_comment\":\n return postWorkOrderCorrectiveItemCommentAttachmentBatch({}, entityId, attachments)\n\n case \"work_order_regular_item_comment\":\n return postWorkOrderRegularItemCommentAttachmentBatch({}, entityId, attachments)\n\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"regular_work_area\":\n case \"corrective_work_area\":\n case \"issue_area\":\n case \"area\":\n case \"zone\":\n return null\n }\n}\n\n/**\n * Call the appropriate get attachment function for attachment based on the entity provided.\n * This functions does NO error handling, this should be done on use level.\n * Returns NULL for cases of entity not yet supported.\n *\n * @param entity\n * @param entityId\n * @param attachmentId\n */\nexport async function fetchAttachmentsListForEntity(\n entity: AttachmentContext,\n entityId: string\n): Promise {\n switch (entity) {\n case \"item\":\n return fetchAttachmentsForItem(entityId)\n\n case \"item_model\":\n return fetchAttachmentsForItemModel(entityId)\n\n case \"issue_item\":\n return fetchAttachmentsForIssueOnItem(entityId)\n\n case \"corrective_work_item\":\n return fetchAttachmentsForCorrectiveWorkOnItem(entityId)\n\n case \"regular_work_item\":\n return fetchAttachmentsForRegularWorkOnItem(entityId)\n\n case \"issue_item_comment\":\n return fetchAttachmentsForIssueOnItemComment(entityId)\n\n case \"corrective_work_item_comment\":\n return fetchAttachmentsForCorrectiveWorkOrderItemComment(entityId)\n\n case \"regular_work_item_comment\":\n return fetchAttachmentsForRegularWorkOrderItemComment(entityId)\n\n case \"work_order_corrective_item\":\n return fetchAttachmentsForCorrectiveWorkOrderItem(entityId)\n\n case \"work_order_regular_item\":\n return fetchAttachmentsForRegularWorkOrderItem(entityId)\n\n case \"work_order_corrective_item_comment\":\n return fetchAttachmentsForCorrectiveWorkOrderItemComment(entityId)\n\n case \"work_order_regular_item_comment\":\n return fetchAttachmentsForRegularWorkOrderItemComment(entityId)\n\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"regular_work_area\":\n case \"corrective_work_area\":\n case \"issue_area\":\n case \"area\":\n case \"zone\":\n return null\n }\n}\n\n/**\n * Call the appropriate get attachment function for attachment based on the entity provided.\n * This functions does NO error handling, this should be done on use level.\n * Returns NULL for cases of entity not yet supported.\n *\n * @param entity\n * @param entityId\n * @param attachmentId\n */\nexport async function getAttachmentForEntity(\n entity: AttachmentContext,\n entityId: string,\n attachmentId: string\n): Promise {\n switch (entity) {\n case \"item\":\n return getItemAttachment({}, entityId, attachmentId)\n\n case \"item_model\":\n return getItemModelAttachment({}, entityId, attachmentId)\n\n case \"issue_item\":\n return getIssueOnItemAttachment({}, entityId, attachmentId)\n\n case \"corrective_work_item\":\n return getCorrectiveWorkOnItemAttachment({}, entityId, attachmentId)\n\n case \"regular_work_item\":\n return getRegularWorkOnItemAttachment({}, entityId, attachmentId)\n\n case \"issue_item_comment\":\n return getIssueOnItemCommentAttachment({}, entityId, attachmentId)\n\n case \"corrective_work_item_comment\":\n return getCorrectiveWorkOnItemCommentAttachment({}, entityId, attachmentId)\n\n case \"regular_work_item_comment\":\n return getRegularWorkOnItemCommentAttachment({}, entityId, attachmentId)\n\n case \"work_order_corrective_item\":\n return getWorkOrderCorrectiveItemAttachment({}, entityId, attachmentId)\n\n case \"work_order_regular_item\":\n return getWorkOrderRegularItemAttachment({}, entityId, attachmentId)\n\n case \"work_order_corrective_item_comment\":\n return getWorkOrderCorrectiveItemCommentAttachment({}, entityId, attachmentId)\n\n case \"work_order_regular_item_comment\":\n return getWorkOrderRegularItemCommentAttachment({}, entityId, attachmentId)\n\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"regular_work_area\":\n case \"corrective_work_area\":\n case \"issue_area\":\n case \"area\":\n case \"zone\":\n return null\n }\n}\n\n/**\n * Call the appropriate get content function for attachment based on the entity provided.\n * This functions does NO error handling, this should be done on use level.\n * Returns NULL for cases of entity not yet supported.\n *\n * @param entity\n * @param entityId\n * @param attachmentId\n */\nexport async function getAttachmentContentForEntity(\n entity: AttachmentContext,\n entityId: string,\n attachmentId: string\n): Promise {\n switch (entity) {\n case \"item\":\n return getItemAttachmentContent({}, entityId, attachmentId)\n\n case \"item_model\":\n return getItemModelAttachmentContent({}, entityId, attachmentId)\n\n case \"issue_item\":\n return getIssueOnItemAttachmentContent({}, entityId, attachmentId)\n\n case \"corrective_work_item\":\n return getCorrectiveWorkOnItemAttachmentContent({}, entityId, attachmentId)\n\n case \"regular_work_item\":\n return getRegularWorkOnItemAttachmentContent({}, entityId, attachmentId)\n\n case \"issue_item_comment\":\n return getIssueOnItemCommentAttachmentContent({}, entityId, attachmentId)\n\n case \"corrective_work_item_comment\":\n return getCorrectiveWorkOnItemCommentAttachmentContent({}, entityId, attachmentId)\n\n case \"regular_work_item_comment\":\n return getRegularWorkOnItemCommentAttachmentContent({}, entityId, attachmentId)\n\n case \"work_order_corrective_item\":\n return getWorkOrderCorrectiveItemAttachmentContent({}, entityId, attachmentId)\n\n case \"work_order_regular_item\":\n return getWorkOrderRegularItemAttachmentContent({}, entityId, attachmentId)\n\n case \"work_order_corrective_item_comment\":\n return getWorkOrderCorrectiveItemCommentAttachmentContent({}, entityId, attachmentId)\n\n case \"work_order_regular_item_comment\":\n return getWorkOrderRegularItemCommentAttachmentContent({}, entityId, attachmentId)\n\n case \"work_order_corrective_area\":\n case \"work_order_regular_area\":\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\":\n case \"regular_work_area\":\n case \"corrective_work_area\":\n case \"issue_area\":\n case \"area\":\n case \"zone\":\n return null\n }\n}\n\n//endregion\n","import { hash, verify } from \"argon2-browser\"\nimport { generateCodeVerifier } from \"src/auth/pkce\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { Log } from \"src/util/classes/log\"\n\n/**\n * Hashes the password.\n *\n * @param { String | Uint8Array } password\n */\nexport async function hashPassword(password: string | Uint8Array) {\n try {\n return await hash({ pass: password, salt: generateCodeVerifier() })\n } catch (error) {\n Log.error({ message: \"Something went wrong.\", error })\n }\n}\n\n/**\n * Hashes the Unlock Key.\n *\n * @param { String | Uint8Array } key\n */\nexport async function hashUnlockKey(key: string | Uint8Array) {\n try {\n return await hash({ pass: key, salt: generateCodeVerifier() })\n } catch (error) {\n Log.error({ message: \"Something went wrong.\", error })\n }\n}\n\n/**\n * Checks if the password is the same by comparing it to the\n * stored hash.\n *\n * @param { String } password\n *\n * @return { Boolean }\n */\nexport async function checkHashedPassword(password: string): Promise {\n const authStore = useAuthStore()\n if (!authStore.passHashed) return false\n try {\n await verify({ pass: password, encoded: authStore.passHashed.encoded })\n return true\n } catch {\n return false\n }\n}\n","import introJs from \"intro.js\"\nimport { Log } from \"src/util/classes/log\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\n\nconst prevLabel = \"\"\nconst nextLabel = \"\"\nconst doneLabel = \"\"\n\nexport function startHelpTour(steps: unknown[]) {\n introJs()\n .setOptions({\n showBullets: false,\n disableInteraction: true,\n hidePrev: true,\n prevLabel,\n nextLabel,\n doneLabel,\n // Because for some reason they removed the typings for this...\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n steps: steps,\n })\n .start()\n}\n\nexport function helpTourNotImplemented(pageName: string) {\n showNotImplementedNotification()\n Log.info(`Help tour needs to be implemented for ${pageName}.`)\n}\n","import { sanitize } from \"dompurify\"\nimport { i18n } from \"src/boot/i18n\"\nimport { getDB } from \"src/db/databases\"\nimport { Identifier, IdentifierAssociationType } from \"src/util/types/dataModels/identifier\"\n\nexport function getEntityWithDesignation(\n associationType: IdentifierAssociationType,\n name: string\n): string {\n const { t } = i18n.global\n\n const correctedName = sanitize(name)\n\n switch (associationType) {\n case \"item\":\n return t(\"identifyOverlay.subtitle_item\", { name: correctedName })\n case \"area\":\n return t(\"identifyOverlay.subtitle_area\", { name: correctedName })\n case \"location\":\n return t(\"identifyOverlay.subtitle_location\", { name: correctedName })\n }\n}\n\nexport function getIdentifierAssociationType(identifier: Identifier): IdentifierAssociationType {\n // There can only be one association of those 3\n if (identifier.item) {\n return \"item\"\n } else if (identifier.location) {\n return \"location\"\n } else {\n return \"area\"\n }\n}\n\n// TODO: Uncomment once we have them\nexport async function getIdentifierEntityName(identifier: Identifier): Promise {\n const db = await getDB()\n if (identifier.item) {\n const result = await db.item.findOne(identifier.item).exec()\n return result?.designation\n } else if (identifier.location) {\n // const result = await db.location.findOne(identifier.location).exec()\n // return result?.designation\n } else if (identifier.area) {\n // const result = await db.area.findOne(identifier.area).exec()\n // return result?.designation\n }\n}\n","import { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { numberToPriorityClass } from \"src/util/functions/misc\"\nimport { getIssuePriority } from \"src/util/http/csi/issuePriorities\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { PriorityClass } from \"src/util/types/misc\"\n\n/**\n * Maps `issuePriority` to the css classname of the associated color.\n */\nexport function getIssuePriorityColor(issuePriority: IssuePriority): PriorityClass {\n return numberToPriorityClass(issuePriority.risk_factor)\n}\n\nexport async function getIssuePriorityData(\n issuePriorityId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n const priorityInCache = cacheStore.issue_priority.get(issuePriorityId)\n\n if (priorityInCache) {\n return priorityInCache\n } else {\n const db = await getDB()\n const issuePriorityInDb = await db.issue_priority.findOne(issuePriorityId).exec()\n\n if (issuePriorityInDb) {\n const priorityMutable = issuePriorityInDb.toMutableJSON()\n cacheStore.issue_priority.set(priorityMutable.id, priorityMutable)\n return priorityMutable\n } else {\n return await getIssuePriority({}, issuePriorityId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Issue Priority data\",\n error,\n })\n }\n}\n","import { date } from \"quasar\"\nimport { isRxDocument } from \"rxdb\"\nimport { i18n } from \"src/boot/i18n\"\nimport { IssuePriorityDocument } from \"src/db/collectionDefinitions/csi/issuePriorities\"\nimport { getDB } from \"src/db/databases\"\nimport router from \"src/router\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport {\n closeIssueCorrectedDialog,\n closeIssueNotCorrectedDialog,\n rejectIssueDialog,\n workMustBeReviewedDialog,\n} from \"src/util/functions/dialogs\"\nimport {\n getIssuePriorityListData,\n getWorkDomainWorkspaceListData,\n} from \"src/util/functions/entityData\"\nimport { getIssuePriorityColor, getIssuePriorityData } from \"src/util/functions/issuePriority\"\nimport { getItemData } from \"src/util/functions/item\"\nimport { getItemClassData } from \"src/util/functions/itemClass\"\nimport {\n showErrorNotification,\n showNotImplementedNotification,\n showSuccessNotification,\n showWarningNotification,\n simpleUndoNotification,\n} from \"src/util/functions/notifications\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { getWorkDomainWorkspaceData } from \"src/util/functions/workDomain\"\nimport {\n getWorkOrderCorrectiveItemData,\n userHasPermissionToUpdateWorkOrder,\n} from \"src/util/functions/workOrder\"\nimport {\n getWorkOrderPriorityColor,\n getWorkOrderPriorityData,\n} from \"src/util/functions/workOrderPriority\"\nimport { getEntityHistory } from \"src/util/http/csi/history\"\nimport {\n getIssueOnItemComment,\n getIssueOnItemCommentList,\n getIssuesOnItem,\n getIssuesOnItemActionsList,\n patchIssuesOnItem,\n postIssueOnItemComment,\n} from \"src/util/http/csi/issues\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { IconTableRowElement, RowData } from \"src/util/types/components/sfxTable\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport {\n ClosedIssueData,\n Issue,\n IssueCardData,\n IssueDocument,\n IssuesOnItem,\n IssueTableData,\n RejectIssueData,\n} from \"src/util/types/dataModels/issue\"\nimport { IssueComment, IssueCommentPayload } from \"src/util/types/dataModels/issueComment\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_DELETE,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ISSUES,\n} from \"src/util/types/dataModels/user\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\nimport { Item } from \"../types/dataModels/item\"\nimport { filterInvalidWorkDomains } from \"./performedWork\"\n\nexport function userHasPermissionToCreateIssue(): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n}\n\nexport function userHasPermissionToUpdateIssue(issue: IssuesOnItem): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE, {\n workDomainUUID: issue.work_domain,\n })\n}\n\nexport async function getIssueData(issueId: string): Promise {\n try {\n const cacheStore = useCacheStore()\n const issueInCache = cacheStore.issues_on_item.get(issueId)\n\n if (issueInCache) {\n return issueInCache\n } else {\n const db = await getDB()\n const issueInDb = await db.issues_on_item.findOne(issueId).exec()\n\n if (issueInDb) {\n const mutableIssue = issueInDb.toMutableJSON()\n cacheStore.issues_on_item.set(mutableIssue.id, mutableIssue)\n return mutableIssue\n } else {\n return await getIssuesOnItem({}, issueId)\n }\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while fetching Issue data\", error })\n }\n}\n\nexport function getOverdueTime(issue: Issue, priority: IssuePriority): number {\n // The issue is processed, they don't need to have overdue time\n if (issue.concluded_dt) return Number.NEGATIVE_INFINITY\n\n const currentDate = new Date()\n\n const deadline = date.addToDate(new Date(issue.declared_dt || issue.created_dt), {\n days: priority?.days_to_correct || Number.POSITIVE_INFINITY,\n })\n\n return currentDate.getTime() - deadline.getTime()\n}\n\nexport function setOverdueTime(issue: IssueCardData) {\n issue.overdueTime = getOverdueTime(issue.issueData, issue.priorityData)\n}\n\nexport async function getIssueCardData(issueDoc: IssuesOnItem): Promise {\n const cacheStore = useCacheStore()\n\n let priorityData = cacheStore.issue_priority.get(issueDoc.priority)\n if (!priorityData) {\n const db = await getDB()\n const priority = await db.issue_priority.findOne({ selector: { id: issueDoc.priority } }).exec()\n\n priorityData = priority?.toMutableJSON()\n }\n\n if (!priorityData) {\n Log.error({\n message: \"Could not find priority for the Issue\",\n data: { issue: issueDoc.id, priority: issueDoc.priority },\n })\n\n throw \"No priority found\"\n }\n\n let workOrderData\n if (issueDoc.corrective_work_order) {\n workOrderData = await getWorkOrderCorrectiveItemData(issueDoc.corrective_work_order)\n }\n\n let workOrderPriorityData\n if (workOrderData) {\n workOrderPriorityData = await getWorkOrderPriorityData(workOrderData.priority)\n }\n\n const correctiveWork = await getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(issueDoc.id)\n\n return {\n issueData: cacheStore.issues_on_item.get(issueDoc.id) || issueDoc,\n actionableItem: await getItemData(issueDoc.actionable_item),\n priorityData,\n correctiveWorkOrderData: workOrderData,\n workOrderPriorityData,\n correctiveWork: correctiveWork,\n }\n}\n\nexport async function getHighestPriorityFromIssueList(\n list: IssueDocument[] | Issue[]\n): Promise {\n const db = await getDB()\n const ids = list.map((issue) => issue.priority)\n\n const prioritiesMap = await db.issue_priority.findByIds(ids).exec()\n if (prioritiesMap.size === 0) return null\n const priorities = Array.from(prioritiesMap.values()).map((value) => value)\n\n return priorities.reduce((prev, current) =>\n prev.risk_factor > current.risk_factor ? prev : current\n )\n}\n\nfunction getLatestIssueFromCache(itemId: string) {\n const cacheStore = useCacheStore()\n\n const issuesInCache = cacheStore.issues_on_item.values()\n const issuesOnItem = []\n\n for (const issue of issuesInCache) {\n if (issue.actionable_item === itemId) {\n issuesOnItem.push(issue)\n }\n }\n\n if (issuesOnItem.length === 0) return\n\n return issuesOnItem.reduce((a, b) =>\n (a.declared_dt || a.created_dt) > (b.declared_dt || b.created_dt) ? a : b\n )\n}\n\nexport async function getLatestIssueOnItem(itemId: string) {\n const cacheStore = useCacheStore()\n\n if (cacheStore.issues_on_item.size > 0) {\n return getLatestIssueFromCache(itemId)\n } else {\n const db = await getDB()\n const issuesOnItemInDb = await db.issues_on_item\n .find({\n selector: { actionable_item: itemId },\n })\n .exec()\n\n if (issuesOnItemInDb.length === 0) return\n\n const latestIssue = issuesOnItemInDb.reduce((a, b) =>\n (a.declared_dt || a.created_dt) > (b.declared_dt || b.created_dt) ? a : b\n )\n return latestIssue.toMutableJSON()\n }\n}\n\n/**\n * Sort issues on item based on the risk factor\n *\n * @param a\n * @param b\n * @param dir\n *
    \n *
  • 1 ascending
  • \n *
  • -1 descending
  • \n *
\n */\nexport function sortIssuesOnPriority(a: IssueCardData, b: IssueCardData, dir: -1 | 1): number {\n return (b.priorityData?.risk_factor - a.priorityData?.risk_factor) * dir\n}\n\n/***\n * Sort issues on item based on the declared_dt. If declared_dt is not available function uses created_dt\n *\n * @param a\n * @param b\n * @param dir\n *
    \n *
  • 1 ascending
  • \n *
  • -1 descending
  • \n *
\n */\nexport function sortIssuesOnRaised(a: IssueTableData, b: IssueTableData, dir: -1 | 1): number {\n return (\n (new Date(b.issueData.declared_dt || b.issueData.created_dt).getTime() -\n new Date(a.issueData.declared_dt || a.issueData.created_dt).getTime()) *\n dir\n )\n}\n\n/**\n * Sort the items on:\n * 1. Overdue time\n * 2. Issue priority\n * 3. Work Order priority\n * 3. Created/Raised Date\n *\n * @param a\n * @param b\n */\nexport function sortOpenIssuesData(\n a: IssueCardData | IssueTableData,\n b: IssueCardData | IssueTableData\n): number {\n return (\n (b.overdueTime || 0) - (a.overdueTime || 0) ||\n (b.priorityData?.risk_factor || 0) - (a.priorityData?.risk_factor || 0) ||\n (b.workOrderPriorityData?.rank || 0) - (a.workOrderPriorityData?.rank || 0) ||\n new Date(b.issueData.declared_dt || b.issueData.created_dt).getTime() -\n new Date(a.issueData.declared_dt || a.issueData.created_dt).getTime()\n )\n}\n\n/**\n * Sort the issues on:\n * 1. Closed time\n * 2. Issue priority\n * 3. Work Order priority\n * 3. Created/Raised Date\n *\n * @param a\n * @param b\n */\nexport function sortClosedIssuesData(\n a: IssueCardData | IssueTableData,\n b: IssueCardData | IssueTableData\n): number {\n return (\n new Date(b.issueData.concluded_dt || 0).getTime() -\n new Date(a.issueData.concluded_dt || 0).getTime() ||\n (b.priorityData?.risk_factor || 0) - (a.priorityData?.risk_factor || 0) ||\n (b.workOrderPriorityData?.rank || 0) - (a.workOrderPriorityData?.rank || 0) ||\n new Date(b.issueData.declared_dt || b.issueData.created_dt).getTime() -\n new Date(a.issueData.declared_dt || a.issueData.created_dt).getTime()\n )\n}\n\n/**\n * Sort the issues first by open status {@link sortOpenIssuesData},\n * then by closed status {@link sortClosedIssuesData}.\n *\n * This is applicable for both card and table data.\n *\n * @param a\n * @param b\n */\nexport function sortIssueData(\n a: IssueCardData | IssueTableData,\n b: IssueCardData | IssueTableData\n): number {\n if (!a.issueData.concluded_dt && !b.issueData.concluded_dt) {\n return sortOpenIssuesData(a, b)\n } else if (a.issueData.concluded_dt && b.issueData.concluded_dt) {\n return sortClosedIssuesData(a, b)\n } else {\n return a.issueData.concluded_dt ? 1 : -1\n }\n}\n\n/**\n * Returns back the appropriate time for issue cards.\n * If the issue is overdue, it would return back the deadline for correction.\n * Else, it will return the time since raised.\n *\n * @param issue\n */\nexport function getIssueCardTime(issue: IssueCardData) {\n let dateTime = new Date(issue.issueData.declared_dt || issue.issueData.created_dt).toJSON()\n\n if (issue.overdueTime && issue.overdueTime > 0) {\n const daysToCorrect = issue.priorityData?.days_to_correct\n\n // Issue Priority has days to correct (some of them don't have)\n if (daysToCorrect) {\n dateTime = date\n .addToDate(dateTime, {\n days: daysToCorrect,\n })\n .toJSON()\n }\n }\n\n return getTemporalInfo(dateTime, \"card\")\n}\n\nexport async function getOpenCorrectiveWorkOnItemForIssue(\n issueId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWork of cacheStore.corrective_work_on_item.values()) {\n if (correctiveWork.issue === issueId && !correctiveWork.conclusion) {\n return correctiveWork\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkOnItemDoc = await db.corrective_work_on_item\n .findOne({\n selector: {\n issue: issueId,\n conclusion: null,\n },\n })\n .exec()\n\n if (correctiveWorkOnItemDoc) {\n const correctiveWorkOnItemMutable = correctiveWorkOnItemDoc.toMutableJSON()\n cacheStore.corrective_work_on_item.set(\n correctiveWorkOnItemMutable.id,\n correctiveWorkOnItemMutable\n )\n return correctiveWorkOnItemMutable\n } else {\n return await getOpenCorrectiveWorkOnItemFromServer(issueId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching open CorrectiveWorkOnItem data\",\n error,\n })\n }\n}\n\nexport async function getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(\n issueId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n // Corrective work is;\n // accepted when `correctiveWork.conclusion === \"accepted`\n // unreviewed when `correctiveWork.concluded_dt` is null\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWork of cacheStore.corrective_work_on_item.values()) {\n if (\n correctiveWork.issue === issueId &&\n (correctiveWork.conclusion === \"accepted\" || !correctiveWork.concluded_dt)\n ) {\n return correctiveWork\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkOnItemDoc = await db.corrective_work_on_item\n .findOne({\n selector: {\n issue: issueId,\n $or: [{ conclusion: \"accepted\" }, { concluded_dt: null }],\n },\n })\n .exec()\n\n if (correctiveWorkOnItemDoc) {\n const correctiveWorkOnItemMutable = correctiveWorkOnItemDoc.toMutableJSON()\n cacheStore.corrective_work_on_item.set(\n correctiveWorkOnItemMutable.id,\n correctiveWorkOnItemMutable\n )\n\n return correctiveWorkOnItemMutable\n } else {\n const unreviewedCorrectiveWork = await getOpenCorrectiveWorkOnItemFromServer(issueId)\n\n return (\n unreviewedCorrectiveWork ?? (await getAcceptedCorrectiveWorkOnItemFromServer(issueId))\n )\n }\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching CorrectiveWorkOnItem for Issue which is accepted || unreviewed\",\n error,\n })\n }\n}\n\nexport async function hasAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(\n issueId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n // Corrective work is;\n // accepted when `correctiveWork.conclusion === \"accepted`\n // unreviewed when `correctiveWork.concluded_dt` is null\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWork of cacheStore.corrective_work_on_item.values()) {\n if (\n correctiveWork.issue === issueId &&\n (correctiveWork.conclusion === \"accepted\" || !correctiveWork.concluded_dt)\n ) {\n return true\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkOnItemCount = await db.corrective_work_on_item\n .count({\n selector: {\n issue: issueId,\n $or: [{ conclusion: \"accepted\" }, { concluded_dt: null }],\n },\n })\n .exec()\n\n return correctiveWorkOnItemCount > 0\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while checking IssueOnItem having Accepted || Unreviewed CorrectiveWork\",\n error,\n })\n }\n}\n\nexport async function hasAcceptedCorrectiveWorkOnItemForIssue(\n issueId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n // Corrective work is;\n // accepted when `correctiveWork.conclusion === \"accepted`\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWork of cacheStore.corrective_work_on_item.values()) {\n if (correctiveWork.issue === issueId && correctiveWork.conclusion === \"accepted\") {\n return true\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkOnItemCount = await db.corrective_work_on_item\n .count({\n selector: {\n issue: issueId,\n conclusion: \"accepted\",\n },\n })\n .exec()\n\n return correctiveWorkOnItemCount > 0\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while checking IssueOnItem having Accepted CorrectiveWork\",\n error,\n })\n }\n}\n\nexport async function hasCorrectiveWorkForIssue(issueId: string): Promise {\n try {\n const cacheStore = useCacheStore()\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWork of cacheStore.corrective_work_on_item.values()) {\n if (correctiveWork.issue === issueId) {\n return true\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkCount = await db.corrective_work_on_item\n .count()\n .where(\"issue\")\n .eq(issueId)\n .exec()\n\n return Boolean(correctiveWorkCount)\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while checking IssueOnItem having CorrectiveWork\",\n error,\n })\n }\n}\n\nasync function getOpenCorrectiveWorkOnItemFromServer(issueId: string) {\n try {\n const { getCorrectiveWorkOnItemList } = await import(\"src/util/http/csi/performedWork\")\n const filterParams = {\n issue__id: issueId,\n concluded_dt__isnull: \"True\",\n }\n const correctiveWork = await getCorrectiveWorkOnItemList({ filterParams })\n return correctiveWork.results[0]\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while getting CorrectiveWork for IssueOnItem from server where concluded_dt is null\",\n error,\n })\n }\n}\n\nasync function getAcceptedCorrectiveWorkOnItemFromServer(issueId: string) {\n try {\n const { getCorrectiveWorkOnItemList } = await import(\"src/util/http/csi/performedWork\")\n const mainParams = {\n page: 1,\n page_size: 1,\n }\n const filterParams = {\n issue__id: issueId,\n conclusion: \"accepted\",\n }\n\n const correctiveWork = await getCorrectiveWorkOnItemList({ mainParams, filterParams })\n return correctiveWork.results[0]\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while getting accepted CorrectiveWorkOnItem for Issue from server\",\n error,\n })\n }\n}\n\n/**\n * Returns whether the given Issue is in raised state or not\n *\n * SA: Definition of \"Issue in raised state\" =>\n * concluded_dt === null &&\n * corrective_work_order === null &&\n * No CorrectiveWork exists for the given Issue where conclusion !== \"rejected\"\n *\n * @param issue\n */\nexport async function isIssueInRaisedState(issue: IssuesOnItem) {\n const issueClosed = issue.concluded_dt === null\n const issueInWorkOrder = issue.corrective_work_order === null\n\n return (\n issueClosed &&\n issueInWorkOrder &&\n !(await hasAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(issue.id))\n )\n}\n\n/**\n * Attempts to reject an issue.\n * If the user does not approve of that, it returns nothing.\n * If the user approves the rejection, it returns the issue if it is successful, or null if not.\n * Shows notifications on various outcomes, including failure and success.\n *\n * @param issue\n */\nexport async function rejectIssue(issue: IssuesOnItem): Promise {\n const userIsAllowed = await canIssueBeRejectedOrSuperseded(issue, true)\n if (!userIsAllowed) return\n\n const rejectReason = await rejectIssueDialog()\n if (!rejectReason) return\n\n const { t } = i18n.global\n\n const undoMessage = t(\"notifications.issue_rejected\")\n return simpleUndoNotification(undoMessage, () => rejectIssueOperations(issue.id, rejectReason))\n}\n\n/**\n * Patches the issue with relevant closing statement data.\n * It then updates the DB and cache store.\n * Finally, a comment with a closing statement is sent.\n *\n * Returns the updated issue on success and null on fail.\n * Shows notifications in either scenario.\n *\n * @param issueId\n * @param rejectReason\n */\nasync function rejectIssueOperations(\n issueId: string,\n rejectReason: string\n): Promise {\n const { t } = i18n.global\n const userStore = useUserStore()\n const cacheStore = useCacheStore()\n\n try {\n // First we need to send the rejecting comment since we cannot comment after issue is closed\n\n // Get the reject reason as a comment\n const issueComment = await saveIssueOnItemComment(issueId, rejectReason)\n\n // Update the Issue\n\n const issue: PayloadEntity> = {\n concluded_dt: new Date().toJSON(),\n conclusion: \"rejected\",\n concluded_by_user: userStore.id,\n corrective_work_order: null,\n }\n\n const updatedIssue = await patchIssuesOnItem({}, issueId, issue)\n\n if (updatedIssue) {\n const db = await getDB()\n await db.issues_on_item.upsert(updatedIssue)\n\n // Manually update the issue card data\n const issueCardData = await getIssueCardData(updatedIssue)\n cacheStore.issueCard.set(issueId, issueCardData)\n\n if (issueComment) {\n showSuccessNotification(t(\"notifications.issue_rejected_success\"))\n\n return {\n rejectedIssue: updatedIssue,\n rejectingComment: issueComment,\n }\n }\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_rejecting_issue\"))\n Log.error({ message: \"An error occurred during issue rejection data operations\", error })\n }\n\n return null\n}\n\n/**\n * Check whether an Issue can be Rejected or Superseded\n *\n * @param issue The issue which gonna be Rejected or Superseded\n * @param rejectOperation A boolean to specify why this function is called for\n * Whether to Reject an Issue or to Supersede an Issue\n * When Rejecting an Issue\n * rejectOperation -> True\n * When Superseding an Issue\n * rejectOperation -> False\n */\nexport async function canIssueBeRejectedOrSuperseded(\n issue: IssuesOnItem,\n rejectOperation: boolean\n): Promise {\n const { t } = i18n.global\n\n if (!userHasPermissionToUpdateIssue(issue)) {\n showWarningNotification(t(\"permissionNotifications.no_access\"))\n return false\n }\n\n if (issue.concluded_dt !== null) {\n showWarningNotification(t(\"notifications.issue_closed\"), true)\n return false\n }\n\n if (issue.corrective_work_order && !userHasPermissionToUpdateWorkOrder(issue.work_domain)) {\n showWarningNotification(t(\"permissionNotifications.issue_in_work_order\"))\n return false\n }\n\n const acceptedCorrectiveWork = await hasAcceptedCorrectiveWorkOnItemForIssue(issue.id)\n\n if (acceptedCorrectiveWork) {\n showWarningNotification(t(\"notifications.issue_has_accepted_corrective_work\"), true)\n\n return false\n } else if (await getOpenCorrectiveWorkOnItemForIssue(issue.id)) {\n const operation = rejectOperation ? \"reject\" : \"supersede\"\n\n await workMustBeReviewedDialog(operation)\n return false\n } else {\n return true\n }\n}\n\nexport function userHasPermissionToDeleteIssue(issue: IssuesOnItem): boolean {\n const userStore = useUserStore()\n\n const userHasPermission = userStore.checkUserPermission(\n PERMISSION_ISSUES,\n PERMISSION_ACCESS_DELETE,\n { workDomainUUID: issue.work_domain }\n )\n\n if (userHasPermission && userStore.id === issue.raised_by_user) {\n return true\n } else {\n const { t } = i18n.global\n showWarningNotification(t(\"permissionNotifications.no_access\"))\n return false\n }\n}\n\n/**\n * Attempts to close an issue.\n *\n * User needs to have UPDATE permissions for Issue.\n * Additionally, if the issue is a part of a Work Order, the user would also need UPDATE permissions for Work Order.\n *\n * Depending on if the issue is corrected or not, it displays the appropriate dialog.\n * Then it triggers an undo notification, allowing the user to undo their action.\n *\n * If the undo action is taken, then it returns undefined.\n * Else it will attempt to close the issue and submit a comment if one is written.\n * Then it returns the ClosedIssueData or NULL if it failed for whatever reason.\n *\n * @param issue\n */\nexport async function closeIssue(issue: IssuesOnItem): Promise {\n const { t } = i18n.global\n\n if (!userHasPermissionToUpdateIssue(issue)) {\n showWarningNotification(t(\"permissionNotifications.no_access\"))\n return\n }\n\n if (issue.corrective_work_order && !userHasPermissionToUpdateWorkOrder(issue.work_domain)) {\n showWarningNotification(t(\"permissionNotifications.issue_in_work_order\"))\n return\n }\n\n const unreviewedCorrectiveWork = await getOpenCorrectiveWorkOnItemForIssue(issue.id)\n\n if (unreviewedCorrectiveWork) {\n await workMustBeReviewedDialog(\"close\")\n return\n }\n\n const correctiveWork = await getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(issue.id)\n\n const closingComment =\n correctiveWork?.conclusion === \"accepted\"\n ? await closeIssueCorrectedDialog()\n : await closeIssueNotCorrectedDialog()\n\n // If the user presses cancel, then it returns null. In any other case it would return a string, even an empty one.\n if (closingComment === null) return\n\n const undoMessage = correctiveWork\n ? t(\"notifications.closed_corrected_issue\")\n : t(\"notifications.closed_issue\")\n\n return simpleUndoNotification(undoMessage, () =>\n closeIssueOperations(issue, correctiveWork, closingComment)\n )\n}\n\nexport async function closeIssueOperations(\n issue: IssuesOnItem,\n correctiveWork: CorrectiveWorkOnItem | undefined,\n closingComment: string | null\n): Promise {\n const { t } = i18n.global\n\n try {\n const userStore = useUserStore()\n const currentDate = new Date().toJSON()\n const cacheStore = useCacheStore()\n\n // If the use gave a reason for closing the Issue, save it as a IssueComment\n let issueComment\n if (closingComment) issueComment = await saveIssueOnItemComment(issue.id, closingComment)\n\n const modifiedIssue: Partial = {\n concluded_dt: currentDate,\n conclusion: correctiveWork?.conclusion === \"accepted\" ? \"closed_resolved\" : \"closed\",\n concluded_by_user: userStore.id,\n }\n\n if (correctiveWork?.conclusion !== \"accepted\") {\n modifiedIssue.corrective_work_order = null\n }\n\n const closedIssue = await patchIssuesOnItem({}, issue.id, modifiedIssue)\n const db = await getDB()\n await db.issues_on_item.upsert(closedIssue)\n\n const issueCardData = await getIssueCardData(closedIssue)\n cacheStore.issueCard.set(closedIssue.id, issueCardData)\n\n showSuccessNotification(t(\"notifications.issue_closed_success\"))\n\n return {\n closedIssue: closedIssue,\n closingComment: issueComment,\n correctiveWork: correctiveWork,\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_closing_issue\"))\n Log.error({ message: \"An error occurred during issue closing data operations\", error })\n }\n\n return null\n}\n\n/**\n * Check that there is a valid work domain to raise an issue within.\n */\nexport async function hasWorkDomainToRaiseIssue(item: Item | undefined): Promise {\n //\n // Otherwise we need to disable raise issue.\n const workDomainDocuments = await getWorkDomainWorkspaceListData()\n const issuePriorityDocuments = await getIssuePriorityListData()\n const issuePriorityData = issuePriorityDocuments.map((element) => element.toJSON())\n const validWorkDomainOptions = await filterInvalidWorkDomains(\n workDomainDocuments,\n item,\n issuePriorityData\n )\n return validWorkDomainOptions.length > 0\n}\n\nexport async function deleteIssue(issue: IssuesOnItem) {\n try {\n if (!userHasPermissionToDeleteIssue(issue)) return\n\n const { t } = i18n.global\n\n if (issue.concluded_dt !== null) {\n showWarningNotification(t(\"notifications.issue_closed\"), true)\n return\n }\n\n // Check if any other user interacted with the Issue other than the one who raised it\n const userStore = useUserStore()\n const issueHistory = await getEntityHistory({}, \"issues/onitem\", issue.id)\n const hasMoreThanOneUser = issueHistory.results.some((entry) => entry.user_id !== userStore.id)\n\n if (hasMoreThanOneUser) {\n showWarningNotification(t(\"notifications.issue_has_multiple_user_interactions\"))\n return\n }\n\n const acceptedCorrectiveWork = await hasAcceptedCorrectiveWorkOnItemForIssue(issue.id)\n\n if (acceptedCorrectiveWork) {\n showWarningNotification(t(\"notifications.issue_has_accepted_corrective_work\"), true)\n } else if (await getOpenCorrectiveWorkOnItemForIssue(issue.id)) {\n await workMustBeReviewedDialog(\"delete\")\n } else {\n // TODO: Implement the Issue delete process\n showNotImplementedNotification()\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while trying to delete the Issue\", error: error })\n }\n}\n\n/**\n * Returns the old issue which the new issue got superseded.\n * If not available, returns undefined.\n *\n * @param issueId\n */\nexport async function getSupersededIssueData(issueId: string): Promise {\n try {\n const db = await getDB()\n const issueInDb = await db.issues_on_item\n .findOne({\n selector: {\n superseded_by: issueId,\n },\n })\n .exec()\n\n if (issueInDb) {\n return issueInDb.toMutableJSON()\n } else {\n const { getIssuesOnItemList } = await import(\"src/util/http/csi/issues\")\n const filterParams = {\n superseded_by: issueId,\n }\n const issueInServer = await getIssuesOnItemList({ filterParams })\n return issueInServer.results[0]\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching the old issue which the new issue got superseded\",\n error,\n data: { issueId },\n })\n }\n}\n\nexport async function saveIssueOnItemComment(\n issueId: string,\n commentText: string,\n commentImages?: AttachmentUpload[],\n reaffirmed?: boolean\n): Promise {\n const userStore = useUserStore()\n\n try {\n const comment: IssueCommentPayload = {\n text: commentText,\n reaffirmed: Boolean(reaffirmed),\n user: userStore.id,\n issue: issueId,\n }\n\n const commentInServer = await postIssueOnItemComment({}, comment)\n\n if (commentInServer) {\n if (commentImages && commentImages.length > 0) {\n const { uploadImages } = await import(\"src/util/functions/attachments\")\n\n commentInServer.attachments =\n (await uploadImages(\"issue_item_comment\", commentInServer.id, commentImages)) || []\n }\n\n const db = await getDB()\n await db.issue_on_item_comments.insert(commentInServer)\n\n return commentInServer\n }\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_adding_comment\"))\n\n Log.error({\n message: \"An error occurred while saving the IssueOnItem comment/attachments\",\n error,\n data: { issueId: issueId },\n })\n }\n}\n\nexport async function getIssueCommentData(commentId: string): Promise {\n try {\n const cacheStore = useCacheStore()\n const issueCommentInCache = cacheStore.issue_on_item_comments.get(commentId)\n\n if (issueCommentInCache) {\n return issueCommentInCache\n } else {\n const db = await getDB()\n const commentInDb = await db.issue_on_item_comments.findOne(commentId).exec()\n\n if (commentInDb) {\n const mutableComment = commentInDb.toMutableJSON()\n cacheStore.issue_on_item_comments.set(mutableComment.id, mutableComment)\n return mutableComment\n } else {\n return await getIssueOnItemComment({}, commentId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching IssueOnItemComment data for a given commentId\",\n error,\n data: { commentId: commentId },\n })\n }\n}\n\nexport async function getIssueCommentListForIssueOnItem(\n issueId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let commentList: IssueComment[] = []\n\n if (cacheStore.issue_on_item_comments.size > 0) {\n for (const commentInCache of cacheStore.issue_on_item_comments.values()) {\n if (commentInCache.issue === issueId) {\n commentList.push(commentInCache)\n }\n }\n } else {\n const db = await getDB()\n const commentsInDb = await db.issue_on_item_comments\n .find({ selector: { issue: issueId } })\n .exec()\n\n if (commentsInDb.length > 0) {\n for (const comment of commentsInDb) {\n const commentMutable = comment.toMutableJSON()\n cacheStore.issue_on_item_comments.set(commentMutable.id, commentMutable)\n commentList.push(comment)\n }\n } else {\n const commentsInServer = await getIssueOnItemCommentList({\n mainParams: undefined,\n filterParams: { issue: issueId },\n })\n commentList = commentsInServer.results\n }\n }\n return commentList.sort((a, b) => b.created_dt.localeCompare(a.created_dt))\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching IssueOnItemComment data for the given Issue\",\n error,\n data: { issueId: issueId },\n })\n }\n}\n\nexport async function getCommentForClosedIssueOnItem(issueId: string) {\n const issueCommentList = await getIssueCommentListForIssueOnItem(issueId)\n\n // Since the comment section get disabled for 'concluded' Issues,\n // we can take the last comment as the closing comment\n if (issueCommentList && issueCommentList.length > 0) return issueCommentList[0].text\n}\n\nexport async function getIssueOnItemActionForIssue(issueId: string) {\n try {\n const cacheStore = useCacheStore()\n if (cacheStore.issue_on_item_actions.size > 0) {\n for (const actionInCache of cacheStore.issue_on_item_actions.values()) {\n if (actionInCache.issue === issueId) {\n return actionInCache\n }\n }\n } else {\n const db = await getDB()\n const actionInDb = await db.issue_on_item_actions\n .findOne({\n selector: {\n issue: issueId,\n },\n })\n .exec()\n\n if (actionInDb) {\n const actionMutable = actionInDb.toMutableJSON()\n cacheStore.issue_on_item_actions.set(actionMutable.id, actionMutable)\n return actionMutable\n } else {\n const actionInList = await getIssuesOnItemActionsList({\n mainParams: undefined,\n filterParams: { issue: issueId },\n })\n return actionInList.results[0]\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching IssueOnItemAction data for Issue\",\n error,\n })\n }\n}\n\nexport async function getIssuesOnItemForCorrectiveWorkOrder(\n workOrderId: string\n): Promise {\n const cacheStore = useCacheStore()\n\n if (cacheStore.issues_on_item.size > 0) {\n const issuesInCache = cacheStore.issues_on_item.values()\n const issuesForWorkOrder: IssuesOnItem[] = []\n\n for (const issue of issuesInCache) {\n if (issue.corrective_work_order === workOrderId) {\n issuesForWorkOrder.push(issue)\n }\n }\n\n return issuesForWorkOrder\n } else {\n const db = await getDB()\n const issues = await db.issues_on_item\n .find({ selector: { corrective_work_order: workOrderId } })\n .exec()\n\n return issues.map((i) => i.toMutableJSON())\n }\n}\n\n// From left to right, the icon order is:\n// 1. Issue Priority\n// 2. Work Order priority\n// 3. Performed Corrected Work / Accepted Performed Corrective Work\nexport function getIssueCardIcons(\n issuePriority?: IssuePriority,\n workOrderPriority?: WorkOrderPriority,\n correctiveWork?: CorrectiveWorkOnItem\n): IconRowElement[] {\n const isCorrected = Boolean(correctiveWork)\n const isAccepted = correctiveWork?.conclusion === \"accepted\"\n\n return [\n {\n name: Icons.ISSUE,\n color: Boolean(issuePriority) ? getIssuePriorityColor(issuePriority!) : undefined,\n },\n {\n name: Icons.WORK_ORDERS,\n color: Boolean(workOrderPriority) ? getWorkOrderPriorityColor(workOrderPriority!) : undefined,\n },\n {\n name: isAccepted ? Icons.ACCEPT : Icons.WORK_CORRECTIVE,\n color: !isCorrected ? undefined : isAccepted ? \"positive\" : \"secondary\",\n },\n ]\n}\n\n/**\n * Removes an issue from its work order by patching the issue\n * .\n * @param issue The issue to be removed from its work order.\n */\nexport async function removeIssueFromWorkOrder(\n issue: IssuesOnItem\n): Promise {\n const { t } = i18n.global\n\n try {\n const updatedIssue = await patchIssuesOnItem({}, issue.id, {\n corrective_work_order: null,\n })\n if (updatedIssue) {\n const db = await getDB()\n await db.issues_on_item.upsert(updatedIssue)\n }\n showSuccessNotification(t(\"notifications.issue_removed_from_work_order\"))\n return updatedIssue\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_update_issue\"))\n Log.error({ message: \"An error occurred when removing issue from its work order.\", error })\n }\n\n return undefined\n}\n\nexport async function updateIssueOnItemWithNewWorkOrderId(issueId: string, workOrderId: string) {\n try {\n const data = await patchIssuesOnItem({}, issueId, { corrective_work_order: workOrderId })\n\n const db = await getDB()\n await db.issues_on_item.upsert(data)\n\n return data\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_updating_issue_on_item\"))\n Log.error({\n message: \"An error occurred while updating the IssueOnItem in IssueContainer\",\n error,\n })\n }\n}\n\n//region Issue Table\n\nexport async function toIssueTableData(\n issueRaw: Issue | IssueDocument\n): Promise> {\n const issue = isRxDocument(issueRaw) ? (issueRaw as IssueDocument).toMutableJSON() : issueRaw\n const priorityData = await getIssuePriorityData(issue.priority)\n const actionableItem = await getItemData(issue.actionable_item)\n const correctiveWorkOrderData = issue.corrective_work_order\n ? await getWorkOrderCorrectiveItemData(issue.corrective_work_order)\n : undefined\n\n if (!priorityData) throw new Error(\"Missing Issue Priority Data\")\n\n const data: RowData = {\n issueData: issue,\n priorityData: priorityData,\n actionableItem: actionableItem,\n workDomainData: await getWorkDomainWorkspaceData(issue.work_domain),\n correctiveWorkOrderData: correctiveWorkOrderData,\n overdueTime: getOverdueTime(issue, priorityData),\n itemClassData: actionableItem ? await getItemClassData(actionableItem?.item_class) : undefined,\n workOrderPriorityData: correctiveWorkOrderData\n ? await getWorkOrderPriorityData(correctiveWorkOrderData.priority)\n : undefined,\n link: router.resolve({\n name: NamedManagerPath.ISSUE,\n params: { issueId: issue.id },\n }).href,\n }\n\n if (issue.main_image) {\n data.rowImage = { uuid: issue.main_image }\n }\n\n data.status = await addIssueTableStatusData(data)\n\n return data\n}\n\nasync function addIssueTableStatusData(issue: IssueTableData) {\n const db = await getDB()\n const correctiveWork = await db.corrective_work_on_item\n .findOne({\n selector: {\n issue: issue.issueData.id,\n conclusion: { $ne: \"rejected\" },\n },\n })\n .exec()\n\n const workOrderIcon: IconTableRowElement = {\n column: \"work-order\",\n sortData: null,\n name: Icons.WORK_ORDERS,\n color: \"transparent\",\n }\n\n if (issue.workOrderPriorityData) {\n workOrderIcon.color = getWorkOrderPriorityColor(issue.workOrderPriorityData)\n workOrderIcon.sortData = issue.workOrderPriorityData.rank\n }\n\n const correctiveWorkStatus: IconTableRowElement = {\n column: \"corrective-work-accepted\",\n sortData: 0,\n color: \"transparent\",\n }\n\n if (correctiveWork?.conclusion) {\n correctiveWorkStatus.color = \"transparent\"\n\n if (correctiveWork?.conclusion === \"accepted\") {\n correctiveWorkStatus.color = \"positive\"\n correctiveWorkStatus.name = Icons.ACCEPT\n correctiveWorkStatus.sortData = 1\n } else if (correctiveWork?.conclusion === \"rejected\") {\n correctiveWorkStatus.color = \"fun-label-and-icon\"\n correctiveWorkStatus.name = Icons.REJECT_CIRCLE\n correctiveWorkStatus.sortData = -1\n }\n }\n\n const status: IconTableRowElement[] = []\n\n status.push(\n {\n column: \"issue-overdue\",\n // Negative overdue means this still has time to be completed\n sortData: issue.overdueTime && issue.overdueTime > 0 ? issue.overdueTime : null,\n name: Icons.WARNING,\n color: Boolean(issue.overdueTime && issue.overdueTime > 0) ? \"negative\" : \"transparent\",\n },\n workOrderIcon,\n {\n column: \"corrective-work\",\n sortData: Number(correctiveWork !== null),\n name: Icons.WORK_CORRECTIVE,\n color: Boolean(correctiveWork) ? \"fun-label-and-icon\" : \"transparent\",\n },\n correctiveWorkStatus,\n {\n column: \"closed\",\n sortData: Number(issue.issueData.concluded_dt !== null),\n ignoreRendering: true,\n }\n )\n\n return status\n}\n\n//endregion\n","import { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { getItemModel } from \"src/util/http/csi/itemModels\"\n\nexport async function getItemModelData(itemModelId: string | null) {\n if (itemModelId) {\n try {\n const cacheStore = useCacheStore()\n const itemModelInCache = cacheStore.item_model.get(itemModelId)\n\n if (itemModelInCache) {\n return itemModelInCache\n } else {\n const db = await getDB()\n const itemModelInDB = await db.item_model.findOne(itemModelId).exec()\n\n if (itemModelInDB) {\n const model = itemModelInDB.toMutableJSON()\n cacheStore.item_model.set(model.id, model)\n return model\n } else {\n return await getItemModel({}, itemModelId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Item Model data\",\n error,\n })\n }\n }\n}\n","import { isRxDocument } from \"rxdb\"\nimport { i18n } from \"src/boot/i18n\"\nimport { ItemDocument } from \"src/db/collectionDefinitions/csi/item\"\nimport { getDB } from \"src/db/databases\"\nimport router from \"src/router\"\nimport { getAttributeValueIDFromEntity, useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { attributeSelectToString, attributeTemporalToString } from \"src/util/functions/attributes\"\nimport { getIssuePriorityColor } from \"src/util/functions/issuePriority\"\nimport { getHighestPriorityFromIssueList } from \"src/util/functions/issues\"\nimport { getItemClassData } from \"src/util/functions/itemClass\"\nimport { getItemModelData } from \"src/util/functions/itemModel\"\nimport { getHighestPriorityFromWorkOrderList } from \"src/util/functions/workOrder\"\nimport { getWorkOrderPriorityColor } from \"src/util/functions/workOrderPriority\"\nimport { getItem } from \"src/util/http/csi/items\"\nimport { IconTableRowElement, RowData, TableColumn } from \"src/util/types/components/sfxTable\"\nimport {\n AttributeValueCharFull,\n AttributeValueNumericFull,\n AttributeValueSelectFull,\n AttributeValueTemporalFull,\n} from \"src/util/types/dataModels/attribute\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { Item, ItemCardData, ItemTableData } from \"src/util/types/dataModels/item\"\nimport { WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\n\nexport async function getItemData(itemId: string): Promise {\n try {\n const cacheStore = useCacheStore()\n const itemInCache = cacheStore.item.get(itemId)\n\n if (itemInCache) {\n return itemInCache\n } else {\n const db = await getDB()\n const itemInDb = await db.item.findOne(itemId).exec()\n\n if (itemInDb) {\n const mutableItem = itemInDb.toMutableJSON()\n cacheStore.item.set(mutableItem.id, mutableItem)\n return mutableItem\n } else {\n return await getItem({}, itemId)\n }\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while fetching Item data\", error })\n }\n}\n\nexport async function getItemDataByIds(itemIds: string[]): Promise {\n const cacheStore = useCacheStore()\n let missingIds: string[] = []\n let foundItems: Item[] = []\n\n for (const itemId of itemIds) {\n const cachedItem = cacheStore.item.get(itemId)\n if (cachedItem) {\n foundItems.push(cachedItem)\n } else {\n missingIds.push(itemId)\n }\n }\n\n if (missingIds.length > 0) {\n const db = await getDB()\n const itemsInDbMap = await db.item.findByIds(missingIds).exec()\n const itemsInDb = Array.from(itemsInDbMap.values()).map((value) => value.toMutableJSON())\n\n foundItems = foundItems.concat(itemsInDb)\n\n if (itemsInDb.length !== missingIds.length) {\n missingIds = missingIds.filter((id) => !itemsInDbMap.has(id))\n\n // We need to ensure that this function is called sparsely and item data is always up-to-date\n // Else we need to bother doing individual fetch requests for each missing ID\n Log.error({ message: \"Missing item IDs found\", data: { ids: missingIds } })\n }\n }\n\n return foundItems\n}\n\nexport async function getItemCardBaseData(item: Item): Promise {\n const cacheStore = useCacheStore()\n\n return {\n itemData: cacheStore.item.get(item.id) || item,\n issuePriorityData: await getIssuePriorityDataForItem(item.id),\n workOrderPriorityData: await getWorkOrderPriorityDataForItem(item.id),\n }\n}\n\n/**\n * Sort the items on:\n * 1. Work Order priority (not implemented)\n * 2. Issue priority\n * 3. Change Requests (not implemented)\n * 4. Name\n *\n * This is applicable for both card and table data.\n *\n * @param a\n * @param b\n */\nexport function sortItemData(\n a: ItemCardData | ItemTableData,\n b: ItemCardData | ItemTableData\n): number {\n return (\n (b.workOrderPriorityData?.rank || 0) - (a.workOrderPriorityData?.rank || 0) ||\n (b.issuePriorityData?.risk_factor || 0) - (a.issuePriorityData?.risk_factor || 0) ||\n a.itemData.designation.localeCompare(b.itemData.designation)\n )\n}\n\n/**\n * @deprecated Use the cacheStore directly instead\n * @param itemId\n */\nexport async function getItemWorkOrderListData(\n itemId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const itemWorkOrdersInCache = cacheStore.itemWorkOrders.get(itemId)\n\n if (itemWorkOrdersInCache) {\n return itemWorkOrdersInCache\n } else {\n const db = await getDB()\n const itemWorkOrdersInDB = await db.item_work_orders.findOne(itemId).exec()\n\n if (itemWorkOrdersInDB) {\n const itemWorkOrderMutable = itemWorkOrdersInDB.toMutableJSON()\n cacheStore.itemWorkOrders.set(\n itemWorkOrderMutable.item_id,\n itemWorkOrderMutable.work_orders\n )\n return itemWorkOrderMutable.work_orders\n }\n\n const { getWorkOrderListForItem } = await import(\"src/util/http/csi/items\")\n const itemWorkOrdersInServer = await getWorkOrderListForItem({}, itemId)\n\n if (itemWorkOrdersInServer.results.length > 0) {\n cacheStore.itemWorkOrders.set(itemId, itemWorkOrdersInServer.results)\n return itemWorkOrdersInServer.results\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Work Order list for itemID\",\n data: { itemId: itemId },\n error,\n })\n }\n}\n\nexport async function getIssuePriorityDataForItem(\n itemId: string\n): Promise {\n const cacheStore = useCacheStore()\n const issues = cacheStore.itemIssues.get(itemId)\n if (issues) {\n const issuePriority = await getHighestPriorityFromIssueList(issues)\n if (issuePriority) {\n return cacheStore.issue_priority.get(issuePriority.id) || issuePriority.toMutableJSON()\n }\n }\n}\n\nexport async function getWorkOrderPriorityDataForItem(\n itemId: string\n): Promise {\n const cacheStore = useCacheStore()\n const cachedWorkOrders = cacheStore.itemWorkOrders.get(itemId)\n if (cachedWorkOrders) {\n const workOrders = Array.from(cachedWorkOrders.values())\n const workOrderPriority = await getHighestPriorityFromWorkOrderList(workOrders || [])\n if (workOrderPriority) {\n return (\n cacheStore.work_order_priority.get(workOrderPriority.id) ||\n workOrderPriority.toMutableJSON()\n )\n }\n }\n}\n\n//region Item Table\n\nexport async function toItemTableData(\n itemRaw: Item | ItemDocument\n): Promise> {\n const item = isRxDocument(itemRaw) ? (itemRaw as ItemDocument).toMutableJSON() : itemRaw\n\n const itemClassData = await getItemClassData(item.item_class)\n\n const data: RowData = {\n itemData: item,\n itemClassData,\n issuePriorityData: await getIssuePriorityDataForItem(item.id),\n workOrderPriorityData: await getWorkOrderPriorityDataForItem(item.id),\n itemModelData: await getItemModelData(item.item_model || null),\n hasIdentifier: await getItemTableIdentifiers(item.id, item.location || null),\n attributeChar: getItemTableAttributeCharValues(\n item.id,\n itemClassData?.attributes_char_item || []\n ),\n attributeNumeric: getItemTableAttributeNumericValues(\n item.id,\n itemClassData?.attributes_numeric_item || []\n ),\n attributeSelect: getItemTableAttributeSelectValues(\n item.id,\n itemClassData?.attributes_select_item || []\n ),\n attributeTemporal: getItemTableAttributeTemporalValues(\n item.id,\n itemClassData?.attributes_temporal_item || []\n ),\n link: router.resolve({ name: NamedManagerPath.ITEM, params: { itemId: item.id } }).href,\n }\n\n if (item.main_image) {\n data.rowImage = { uuid: item.main_image }\n }\n\n data.status = addItemTableStatusData(data)\n\n return data\n}\n\n//TODO: Identifiers needs to come from cache store when the following Issue is completed\n//https://gitlab.com/safeex/safeex-cloud-team/cloud-service-instance-g4/-/issues/48\nasync function getItemTableIdentifiers(\n itemId: string,\n locationId: string | null\n): Promise {\n const db = await getDB()\n const hasItemIdentifier = await db.identifier.checkForIdentifier(itemId, \"item\")\n\n if (hasItemIdentifier) return true\n\n if (locationId) {\n return await db.identifier.checkForIdentifier(locationId, \"location\")\n }\n\n return false\n}\n\nfunction getItemTableAttributeCharValues(\n itemId: string,\n attributeIDs: string[]\n): Map {\n const attributeMap = new Map()\n const cacheStore = useCacheStore()\n\n for (const attributeID of attributeIDs) {\n const id = getAttributeValueIDFromEntity(itemId, attributeID)\n const value = cacheStore.attribute_char_value.get(id)\n if (value) attributeMap.set(attributeID, value)\n }\n\n return attributeMap\n}\n\nfunction getItemTableAttributeNumericValues(\n itemId: string,\n attributeIDs: string[]\n): Map {\n const attributeMap = new Map()\n const cacheStore = useCacheStore()\n\n for (const attributeID of attributeIDs) {\n const id = getAttributeValueIDFromEntity(itemId, attributeID)\n const value = cacheStore.attribute_numeric_value.get(id)\n if (value) attributeMap.set(attributeID, value)\n }\n\n return attributeMap\n}\n\nfunction getItemTableAttributeSelectValues(\n itemId: string,\n attributeIDs: string[]\n): Map {\n const attributeMap = new Map()\n const cacheStore = useCacheStore()\n\n for (const attributeID of attributeIDs) {\n const id = getAttributeValueIDFromEntity(itemId, attributeID)\n const value = cacheStore.attribute_select_value.get(id)\n if (value) attributeMap.set(attributeID, value)\n }\n\n return attributeMap\n}\n\nfunction getItemTableAttributeTemporalValues(\n itemId: string,\n attributeIDs: string[]\n): Map {\n const attributeMap = new Map()\n const cacheStore = useCacheStore()\n\n for (const attributeID of attributeIDs) {\n const id = getAttributeValueIDFromEntity(itemId, attributeID)\n const value = cacheStore.attribute_temporal_value.get(id)\n if (value) attributeMap.set(attributeID, value)\n }\n\n return attributeMap\n}\n\nfunction addItemTableStatusData(item: ItemTableData): IconTableRowElement[] {\n const issueIcon: IconTableRowElement = {\n column: \"issue\",\n sortData: item.issuePriorityData?.risk_factor || null,\n name: Icons.ISSUE,\n color: Boolean(item.issuePriorityData)\n ? getIssuePriorityColor(item.issuePriorityData!)\n : undefined,\n }\n\n const workOrderIcon: IconTableRowElement = {\n column: \"work-order\",\n sortData: item.workOrderPriorityData?.rank || null,\n name: Icons.WORK_ORDERS,\n color: Boolean(item.workOrderPriorityData)\n ? getWorkOrderPriorityColor(item.workOrderPriorityData!)\n : undefined,\n }\n\n return [issueIcon, workOrderIcon]\n}\n\nexport async function getItemTableAttributesColumns(): Promise {\n let cols: Array = []\n\n cols = await addItemTableCharColumns(cols)\n cols = await addItemTableNumericColumns(cols)\n cols = await addItemTableSelectColumns(cols)\n cols = await addItemTableTemporalColumns(cols)\n\n return cols\n}\n\nexport async function addItemTableCharColumns(cols: Array) {\n const db = await getDB()\n const attr = await db.attribute_char.find().exec()\n const { t } = i18n.global\n\n for (const el of attr) {\n cols.push({\n name: el.id,\n id: el.id,\n switchable: true,\n sortable: true,\n label: el.name,\n emptyText: (row: ItemTableData) =>\n !row.itemClassData?.attributes_char_item.includes(el.id)\n ? t(\"sfxTable.empty_incompatible\")\n : undefined,\n field: (row: ItemTableData) => row.attributeChar?.get(el.id)?.value || null,\n })\n }\n\n return cols\n}\n\nexport async function addItemTableNumericColumns(cols: Array) {\n const db = await getDB()\n const attr = await db.attribute_numeric.find().exec()\n const { t } = i18n.global\n\n for (const el of attr) {\n cols.push({\n name: el.id,\n switchable: true,\n sortable: true,\n label: el.name,\n emptyText: (row: ItemTableData) =>\n !row.itemClassData?.attributes_numeric_item.includes(el.id)\n ? t(\"sfxTable.empty_incompatible\")\n : undefined,\n field: (row: ItemTableData) => row.attributeNumeric?.get(el.id)?.value || null,\n })\n }\n\n return cols\n}\n\nexport async function addItemTableSelectColumns(cols: Array) {\n const db = await getDB()\n const attr = await db.attribute_select.find().exec()\n const { t } = i18n.global\n\n for (const el of attr) {\n cols.push({\n name: el.id,\n switchable: true,\n sortable: true,\n label: el.name,\n emptyText: (row: ItemTableData) =>\n !row.itemClassData?.attributes_select_item.includes(el.id)\n ? t(\"sfxTable.empty_incompatible\")\n : undefined,\n field: (row: ItemTableData) => {\n const selectAttr = row.attributeSelect?.get(el.id)\n return selectAttr ? attributeSelectToString(selectAttr.attribute_select_options) : null\n },\n })\n }\n\n return cols\n}\n\nexport async function addItemTableTemporalColumns(cols: Array) {\n const db = await getDB()\n const attr = await db.attribute_temporal.find().exec()\n const { t } = i18n.global\n\n for (const el of attr) {\n cols.push({\n name: el.id,\n switchable: true,\n sortable: true,\n label: el.name,\n emptyText: (row: ItemTableData) =>\n !row.itemClassData?.attributes_temporal_item.includes(el.id)\n ? t(\"sfxTable.empty_incompatible\")\n : undefined,\n field: (row: ItemTableData) => {\n const temporalAttr = row.attributeTemporal?.get(el.id)\n return temporalAttr ? attributeTemporalToString(temporalAttr.date, temporalAttr.time) : null\n },\n })\n }\n\n return cols\n}\n\n//endregion\n","import { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { getItemClass } from \"src/util/http/csi/itemClasses\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\n\nexport async function getItemClassData(itemClassId: string): Promise {\n const cacheStore = useCacheStore()\n\n try {\n const itemClassInCache = cacheStore.item_class.get(itemClassId)\n\n if (itemClassInCache) {\n return itemClassInCache\n } else {\n const db = await getDB()\n const itemClassInDB = await db.item_class.findOne(itemClassId).exec()\n\n if (itemClassInDB) {\n const itemClassMutated = itemClassInDB.toMutableJSON()\n cacheStore.item_class.set(itemClassMutated.id, itemClassMutated)\n return itemClassMutated\n } else {\n return await getItemClass({}, itemClassId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Item Class data\",\n error,\n })\n }\n}\n","// Based on the color palette from Quasar - https://quasar.dev/style/color-palette#color-list\nexport const COLOR_LIST = [\n \"red\",\n \"pink\",\n \"purple\",\n \"deep-purple\",\n \"indigo\",\n \"blue\",\n \"light-blue\",\n \"cyan\",\n \"teal\",\n \"green\",\n \"light-green\",\n \"lime\",\n \"yellow\",\n \"amber\",\n \"orange\",\n \"deep-orange\",\n \"brown\",\n]\n","import { Log } from \"src/util/classes/log\"\nimport { COLOR_LIST } from \"src/util/constants/colorList\"\nimport { PriorityClass } from \"src/util/types/misc\"\n\n/**\n * Linear interpolation between 2 points, gives a value T.\n * In layman's terms - return a value based on T, that is between the 2 points.\n *\n * @param v0 - Point 1.\n * @param v1 - Point 2.\n * @param t - Value between [0, 1].\n */\nexport function lerp(v0: number, v1: number, t: number) {\n return v0 + t * (v1 - v0)\n}\n\n/**\n * Takes a value short or long hex colour string and returns an array of RGB values.\n *\n * @param hexString - valid short or long colour hex string.\n */\nexport function hexToRgb(hexString: string): Array {\n hexString = hexString.slice(1) // Remove the #\n\n if (hexString.length === 3) {\n return hexString\n .split(\"\") // Split on every character\n .map((x) => Number.parseInt(x + x, 16)) // To convert to full form - just multiply each value by 2\n } else {\n return hexString\n .split(/(?=(?:..)*$)/) // Split on even characters\n .map((x) => Number.parseInt(x, 16))\n }\n}\n\n/**\n * Returns the RGB value of the percentage between the two provided colours.\n *\n * @param color1\n * @param color2\n * @param percentage\n * @return - Format is: ***rgb(v1, v2, v3)***.\n */\nexport function calculateRGBLerp(\n color1: string,\n color2: string,\n percentage: number\n): [number, number, number] {\n const [r1, g1, b1] = hexToRgb(color1)\n const [r2, g2, b2] = hexToRgb(color2)\n\n const r = lerp(r1, r2, percentage)\n const g = lerp(g1, g2, percentage)\n const b = lerp(b1, b2, percentage)\n\n return [r, g, b]\n}\n\n/**\n * Transforms the colour list to a gradient and then returns the appropriate colour based on the provided percentage.\n *\n * @param percentage - Expected value is [0, 1].\n * @param colorList - Order matters.\n */\nexport function getColorFromGradient(percentage: number, colorList: string[]) {\n // There are no colours, so we don't deal with anything.\n if (colorList.length === 0) return\n\n // If only one colour, return said colour.\n if (colorList.length === 1) {\n const [r, g, b] = hexToRgb(colorList[0])\n return [r, g, b]\n }\n\n const numberOfColors = colorList.length - 1\n\n for (const [index, color] of colorList.entries()) {\n if (index === 0) continue // skip first one\n\n const minVal = roundTo2((index - 1) / numberOfColors)\n const maxVal = roundTo2(index / numberOfColors)\n\n if (percentage >= minVal && percentage <= maxVal) {\n // The range in which we want to look for colours.\n // F.x. if we have 3 colours, we want the first one to be at 0, the second to be at 0.5 and the third at 1.\n // This will return the appropriate range, which will be used to adjust the percentages.\n // In the example with 3 colours - it would return either 0 or 0.5.\n // If we have 4 - it will be 0, 0.33, 0.66 and 1.\n const adjustedRange = (index - 1) / numberOfColors\n\n // Adjusted percentage based on the specified region.\n // In order for smooth transition between colours, we need to have 0 to 100% transition between each colour region.\n // This will adjust the current percentage to map from 0 to 1 based on the selected region.\n const adjustedPercentage = (percentage - adjustedRange) * numberOfColors\n\n // Returns the RGB values based on the percentage between the previous colour in the list and the current one.\n return calculateRGBLerp(colorList[index - 1], color, adjustedPercentage)\n }\n }\n}\n\n/**\n * Round to 2 decimal places.\n *\n * @param num\n */\nexport function roundTo2(num: number) {\n // Add EPSILON to adjusted for 0.5 case.\n return Math.round((num + Number.EPSILON) * 100) / 100\n}\n\n/**\n * Checks if the provided value is an empty string, undefined or null.\n *\n * @param val\n */\nexport function isEmptyOrNull(val: string | null | undefined) {\n // We check for == null as this also includes undefined\n return val == null || val === \"\"\n}\n\n/**\n * Checks for the number of digits after the decimal point (precision).\n * If the input is not a float, then it returns null.\n * Note: Strings with numeric separators don't work for some reason.\n * @param val\n */\nexport function getPrecision(val: string | number): number | null {\n if (Number.isNaN(val) || !Number.isFinite(Number(val))) return null\n\n // So we fix exponents\n val = Number(val)\n\n const valueAfterDecimal = val.toString().split(\".\")[1]\n if (!valueAfterDecimal) return null\n\n return valueAfterDecimal.length\n}\n\n/**\n * Gives the smallest number based on number of decimals.\n * @param decimals\n */\nexport function decimalStep(decimals: number): string {\n return (0.1 ** decimals).toFixed(decimals)\n}\n\nexport function blobToBase64(blob: Blob): Promise {\n const reader = new FileReader()\n reader.readAsDataURL(blob)\n return new Promise((resolve) => {\n reader.addEventListener(\"load\", () => {\n resolve(reader.result)\n })\n })\n}\n\nexport function base64ToBlob(base64: string, type: string): Promise {\n return fetch(`data:${type};base64,${base64}`).then((response) => response.blob())\n}\n\n// Escapes bad HTML characters\nexport function escapeHTML(badString: string) {\n return badString\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n\n/**\n * Filter out `undefined` values from a `T | undefined` type object array\n *\n * @param objArray\n */\nexport function filterOutUndefined(objArray: (T | undefined)[]): T[] {\n return objArray.filter((obj: T | undefined): obj is T => obj !== undefined)\n}\n\nexport function getContrastingColorForBackground(background: string): string {\n const [r, g, b] = hexToRgb(background)\n // Based on the wild magic of this thread:\n // https://gamedev.stackexchange.com/questions/38536/given-a-rgb-color-x-how-to-find-the-most-contrasting-color-y/38542#38542\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n return luminance > 0.5 ? \"#000\" : \"#FFF\"\n}\n\n/**\n * Extracts the initials of the full name provided.\n * If the number of names is more than the max number of initials,\n * then it takes enough initials from the first names and the last one,\n * to satisfy the max initial rule.\n * Works only on latin characters.\n *\n * @param fullName The string on which initials are to be extracted\n * @param delimiter What to put between the initials\n * @param maxInitials The maximum number of initials extracted\n *\n * @returns Capitalised initials with specified delimiter. Returns undefined if string is bad.\n */\nexport function extractInitials(\n fullName: string,\n delimiter = \"\",\n maxInitials = 3\n): string | undefined {\n // Invalid input\n if (!fullName) return undefined\n\n /**\n * Detect only latin characters in the beginning of a string or between whitespace.\n *\n * Regex explanation:\n *\n * (?<=B)A - Positive look behind - Find expression A where expression B precedes.\n * ^ - Start of string.\n * \\s - Any white space character.\n *\n * (?<=^|\\s) - Find all expressions that are at the begging of the string or\n * have whitespace before them. Does not consume characters.\n *\n * ([a-zA-Z]) - Capture group will take only latin characters.\n *\n * /g - Do not stop after first match.\n */\n const initialsRegex = /(?<=^|\\s)([A-Za-z])/g\n let regexMatches: string[] | null = fullName.match(initialsRegex)\n\n // No matches found\n if (regexMatches === null || regexMatches.length === 0) return undefined\n\n if (regexMatches.length > maxInitials) {\n const lastInitial = regexMatches.pop()\n // Remove enough so that when we add the last element, it satisfies the max initials\n regexMatches = regexMatches.splice(0, maxInitials - 1)\n\n // We know lastInitial is not undefined, but pop typing requires us to check\n if (lastInitial) {\n regexMatches.push(lastInitial)\n }\n }\n\n let initials = regexMatches.map((initial: string) => initial.toUpperCase()).join(delimiter)\n\n // In case we have non-empty delimiter - put it also at the end. F.x. - J.D.\n if (delimiter) initials += delimiter\n\n return initials\n}\n\n/**\n * Determines the color of the profile picture if initials are used.\n * On fail or any other case, returns \"grey\".\n *\n * TODO: Unit test me\n */\nexport function determineProfilePictureColor(initials: string) {\n if (COLOR_LIST.length > 0) {\n const sum = [...initials].reduce((partialSum, a) => {\n const charCode = a.codePointAt(0)\n return charCode ? partialSum + charCode : 0\n }, 0)\n const colorIndex = sum % COLOR_LIST.length\n const selectedColor = COLOR_LIST[colorIndex]\n\n if (selectedColor) return selectedColor\n }\n return \"grey\"\n}\n\n/**\n * Converts a `number` to one of five priority classes.\n * The function will accept any number, but is intended for numbers in the range 1-100.\n * 1 - 20: priority1\n * 21 - 40: priority2\n * 41 - 60: priority3\n * 61 - 80: priority4\n * 81 - 100: priority5\n */\nexport function numberToPriorityClass(number: number): PriorityClass {\n if (number < 0) {\n Log.warning({ message: `priority number out of range [1 - 100]: ${number}` })\n return \"priority1\"\n }\n if (100 < number) {\n Log.warning({ message: `priority number out of range [1 - 100]: ${number}` })\n return \"priority5\"\n }\n\n if (number < 21) {\n return \"priority1\"\n } else if (number < 41) {\n return \"priority2\"\n } else if (number < 61) {\n return \"priority3\"\n } else if (number < 81) {\n return \"priority4\"\n } else {\n return \"priority5\"\n }\n}\n\n/**\n * Helper function in which you can pass any primiteve type and search term,\n * and it will return a boolean if the term is contained in the value.\n * If the value is null or undefined, it automatically returns false.\n * Used primaraly as a simple search substitude for SearchMaps in technician mode.\n * Based on search functionality in SfxTable.\n *\n * @param value\n * @param term\n */\nexport function primitiveValueSearch(\n value: string | number | boolean | null | undefined,\n term: string\n): boolean {\n // Term never matches unset fields.\n if (value === undefined || value === null) {\n return false\n }\n\n // Look for term in value. Using lower casing to make matches more likely.\n const haystack = String(value).toLowerCase()\n const lowerTerms = term.toLowerCase()\n\n return haystack.includes(lowerTerms)\n}\n","import { date, Notify, QNotifyCreateOptions } from \"quasar\"\nimport { i18n } from \"src/boot/i18n\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { CardNotificationEvent, NotificationActionMessage } from \"src/util/enums/notifications\"\nimport { undoNotificationDialog } from \"src/util/functions/dialogs\"\nimport { BatchErrors } from \"src/util/types/dataModels/genericObject\"\nimport { UserPermissionAccess, UserPermissionType } from \"src/util/types/dataModels/user\"\nimport { NotificationCardData, SystemNotificationCardData } from \"src/util/types/notifications\"\n\n/**\n * Displays a notification message for successful action.\n *\n * @param message Text of the message.\n * @param html Allow HTML in the text message.\n */\nexport function showSuccessNotification(\n message: NotificationActionMessage | string,\n html?: boolean\n) {\n const msg = Object.values(NotificationActionMessage).includes(message)\n ? translateMessage(message as NotificationActionMessage)\n : (message as string)\n\n Notify.create({\n type: \"sfx-notification\",\n message: msg,\n icon: Icons.SUCCEEDED,\n html: html,\n })\n}\n\n//Standard error notification with message\nexport function showErrorNotification(message: string) {\n Notify.create({\n type: \"sfx-notification-error\",\n message: message,\n icon: Icons.ERROR,\n })\n}\n\n//Standard info notification with message\nexport function showInfoNotification(message: string) {\n Notify.create({\n type: \"sfx-notification\",\n message: message,\n icon: Icons.INFORMATION,\n })\n}\n\n//Standard warning notification with message\nexport function showWarningNotification(message: string, html?: boolean) {\n Notify.create({\n type: \"sfx-notification-warning\",\n message: message,\n html: html,\n })\n}\n\nexport function showDragAndDropFail() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification-accent\",\n message: t(\"notifications.bad_file_read\"),\n })\n}\n\nexport function showDragAndDropEmptyFiles() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification-accent\",\n message: t(\"notifications.files_empty\"),\n })\n}\n\nexport function showDragAndDropEmptyFile() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification-accent\",\n message: t(\"notifications.file_empty\"),\n })\n}\n\nexport async function showMaxFileSizeExceededNotification() {\n const { t } = i18n.global\n const { MAX_UPLOAD_FILE_SIZE } = await import(\"src/util/constants/files\")\n const maxFileSizeInMB = MAX_UPLOAD_FILE_SIZE / 1000000\n\n Notify.create({\n type: \"sfx-notification-error\",\n message: t(\"notifications.file_size_exceeded\", { maxFileSize: maxFileSizeInMB }),\n icon: Icons.ERROR,\n })\n}\n\nexport async function showMaxProfilePicSizeExceededNotification() {\n const { t } = i18n.global\n const { MAX_UPLOAD_PROFILE_PIC_SIZE } = await import(\"src/util/constants/files\")\n const maxFileSizeInMB = MAX_UPLOAD_PROFILE_PIC_SIZE / 1000000\n\n Notify.create({\n type: \"sfx-notification-error\",\n message: t(\"notifications.file_size_exceeded\", { maxFileSize: maxFileSizeInMB }),\n icon: Icons.ERROR,\n })\n}\n\nexport async function showFileTypeNotAllowedNotification() {\n const { t } = i18n.global\n const { ATTACHMENT_ALLOWED_EXTENSIONS } = await import(\"src/util/constants/files\")\n const allowedFileTypes = ATTACHMENT_ALLOWED_EXTENSIONS.join(\", \")\n\n Notify.create({\n type: \"sfx-notification-error\",\n message: t(\"notifications.file_type_not_allowed\", { fileTypes: allowedFileTypes }),\n icon: Icons.ERROR,\n })\n}\n\nexport async function showFileTypeNotAllowedPartialNotification(files: File[]) {\n const { t } = i18n.global\n const { ATTACHMENT_ALLOWED_EXTENSIONS } = await import(\"src/util/constants/files\")\n const allowedFileTypes = ATTACHMENT_ALLOWED_EXTENSIONS.join(\", \")\n const fileTypesNotAllowed = t(\"notifications.file_type_not_allowed\", {\n fileTypes: allowedFileTypes,\n })\n\n const fileNames = files.map((f) => f.name).join(\", \")\n\n const filesNotUploaded = t(\"notifications.files_not_accepted\", { files: fileNames })\n const message = fileTypesNotAllowed + \". \" + filesNotUploaded\n\n Notify.create({\n type: \"sfx-notification-error\",\n message,\n icon: Icons.ERROR,\n multiLine: true,\n timeout: 10000, // 10sec\n })\n}\n\nexport function showIssueDownloadingFileNotification() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification-error\",\n message: t(\"notifications.bad_file_download\"),\n })\n}\n\nexport function showNotImplementedNotification() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification-accent\",\n message: t(\"notifications.not_implemented\"),\n icon: Icons.WRENCH,\n })\n}\n\nexport function showUnsubmittedWorkNotification() {\n const msg = translateMessage(NotificationActionMessage.UNSUBMITTED_WORK)\n\n Notify.create({\n type: \"sfx-notification\",\n message: msg,\n icon: Icons.LIST_DISPLAY,\n iconColor: \"navy-base\",\n })\n}\n\n/**\n * This function has a notification that is infinitely long.\n * You NEED to manually close it by assigning the return value to c variable and calling it.\n *\n * @param singleImage\n */\nexport function showAttachmentUploadingNotification(singleImage: boolean) {\n const { t } = i18n.global\n\n const msg = singleImage\n ? t(\"notifications.image_uploading\", 1)\n : t(\"notifications.image_uploading\", 2)\n\n return Notify.create({\n type: \"sfx-notification\",\n message: msg,\n timeout: 0, // Infinite\n })\n}\nexport function showConnectionLostNotification() {\n const { t } = i18n.global\n\n Notify.create({\n group: \"group-internet\",\n message: t(\"notifications.connection_lost\"),\n color: \"warning-back\",\n textColor: \"navy-base\",\n iconColor: \"warning\",\n classes: \"sfx-notification sfx-notification_lost-internet text-subtitle1 full-width\",\n icon: Icons.OFFLINE,\n position: \"top\",\n })\n}\n\nexport function showConnectionReestablishedNotification() {\n const { t } = i18n.global\n\n Notify.create({\n type: \"sfx-notification\",\n group: \"group-internet\",\n message: t(\"notifications.connection_reestablished\"),\n icon: Icons.ONLINE,\n classes: \"sfx-notification full-width\",\n position: \"top\",\n })\n}\n\nexport function showEasterEggNotification(message: string) {\n Notify.create({\n type: \"sfx-notification\",\n message: message,\n icon: Icons.WIZARD_WHITE,\n })\n}\n\nexport function showRemovedTodoNotification(callbackFn: () => void, removedItem?: string) {\n const { t } = i18n.global\n const msg = t(\"notifications.removed_todo\", { removedItem: removedItem })\n return undoNotificationDialog(msg, callbackFn)\n}\n\nexport function showRevertSelectionNotification(callbackFn: () => void) {\n const { t } = i18n.global\n const msg = t(\"notifications.deselected_previous_selection\")\n return undoNotificationDialog(msg, callbackFn)\n}\n\nexport function identifyProposeUndo(callbackDismissFn: () => void) {\n const { t } = i18n.global\n const msg = t(\"notifications.identify_propose\")\n return simpleUndoNotification(msg, callbackDismissFn)\n}\n\nexport function identifyAssociatedUndo(callbackDismissFn: () => void) {\n const { t } = i18n.global\n const msg = t(\"notifications.identify_associated\")\n return simpleUndoNotification(msg, callbackDismissFn)\n}\n\nexport function identifyAssociationChangedUndo(callbackDismissFn: () => void) {\n const { t } = i18n.global\n const msg = t(\"notifications.identify_association_changed\")\n return simpleUndoNotification(msg, callbackDismissFn)\n}\n\nexport function identifyDissociateUndo(callbackDismissFn: () => void) {\n const { t } = i18n.global\n const msg = t(\"notifications.identify_dissociate\")\n return simpleUndoNotification(msg, callbackDismissFn)\n}\n\nexport function showUserNotification(user: string) {\n const { t } = i18n.global\n const userStore = useUserStore()\n const profilePicture = userStore.profilePicture\n const username = `${user}`\n const msg = t(\"notifications.direct_notification\") + \" \" + username + \"!\"\n\n const notifyConfig: QNotifyCreateOptions = {\n type: \"sfx-notification\",\n html: true,\n message: msg,\n classes: \"sfx-user-notification__message text-subtitle1\",\n }\n\n if (profilePicture) {\n notifyConfig.avatar = profilePicture\n } else {\n notifyConfig.icon = \"fa-solid fa-circle-user\"\n }\n\n Notify.create(notifyConfig)\n}\n\n// Getting translated strings\n\nfunction translateMessage(message: NotificationActionMessage): string {\n const { t } = i18n.global\n switch (message) {\n case NotificationActionMessage.PERFORMED_WORK:\n return t(\"notifications.performed_work\")\n case NotificationActionMessage.ISSUES_RAISED:\n return t(\"notifications.issues_raised\")\n case NotificationActionMessage.ALL_RAISED:\n return t(\"notifications.all_raised\")\n case NotificationActionMessage.UNSUBMITTED_WORK:\n return t(\"notifications.unsubmitted_work\")\n default:\n return t(\"notifications.new_notification\")\n }\n}\n\nexport function translateEventName(event: CardNotificationEvent): string {\n const { t } = i18n.global\n switch (event) {\n case CardNotificationEvent.ASSIGNED_WORK_ORDER:\n return t(\"notifications.assigned_work_order\")\n case CardNotificationEvent.COMMENTED_WORK_ORDER:\n return t(\"notifications.commented_work_order\")\n case CardNotificationEvent.COMMENTED_PERFORMED_WORK:\n return t(\"notifications.commented_performed_work\")\n case CardNotificationEvent.REJECTED_ISSUE:\n return t(\"notifications.rejected_issue\")\n case CardNotificationEvent.REJECTED_WORK:\n return t(\"notifications.rejected_work\")\n case CardNotificationEvent.ACCEPTED_WORK:\n return t(\"notifications.accepted_work\")\n case CardNotificationEvent.CORRECTED_ISSUE:\n return t(\"notifications.corrected_issue\")\n case CardNotificationEvent.ADDED_ISSUE:\n return t(\"notifications.added_issue\")\n default:\n return t(\"notifications.default_event_name\")\n }\n}\n\n// TODO: To be removed when we have data from the server\n\nexport function getPriorityColor(priority: number) {\n switch (priority) {\n case 1:\n return \"red\"\n case 2:\n return \"orange\"\n case 3:\n return \"blue\"\n default:\n return \"grey\"\n }\n}\n\n/**\n * Exclude the system notifications whose endTime is in the past\n *\n * @param notification\n */\nexport function filterOldNotifications(notification: NotificationCardData) {\n return isSystemNotification(notification)\n ? new Date(notification.endTime) > new Date()\n : new Date(notification.timeSinceReceived) > date.subtractFromDate(new Date(), { days: 90 })\n}\n\n/**\n * Sort based on system notifications and then on date\n */\nexport function compareData(a: NotificationCardData, b: NotificationCardData) {\n // Check if either of them is not a system notification\n return Number(isSystemNotification(a)) ^ Number(isSystemNotification(b))\n ? Number(isSystemNotification(b)) - Number(isSystemNotification(a))\n : Number(new Date(b.timeSinceReceived)) - Number(new Date(a.timeSinceReceived))\n}\n\nexport function isSystemNotification(\n notification: NotificationCardData\n): notification is SystemNotificationCardData {\n return notification.isSystemCardNotification\n}\n\nexport function showBatchErrors(errors: BatchErrors[], hasSuccessEntries: boolean) {\n const { t } = i18n.global\n\n const errorList = errors.map((e) => e.error).join(\"/n\")\n const translationTemplate = hasSuccessEntries\n ? \"notifications.batch_error_partial\"\n : \"notifications.batch_error_full\"\n\n const message = t(translationTemplate, { entries: errorList })\n\n Notify.create({\n type: \"sfx-notification-error\",\n message,\n icon: Icons.ERROR,\n multiLine: true,\n timeout: 10000, // 10sec\n })\n}\n\n/**\n * Simple undo notification that will execute the function only on dismissal or timer running out,\n * and not on clicking \"undo\".\n *\n * Returns back the result of the dismissal function.\n *\n * @param msg\n * @param callbackDismissFn\n */\nexport function simpleUndoNotification(\n msg: string,\n callbackDismissFn: (...args: unknown[]) => CallbackReturnType\n): Promise | undefined> {\n let undoClickedStatus = false\n const undoClick = () => {\n undoClickedStatus = true\n }\n\n const dismissHandler = (): ReturnType | undefined => {\n if (undoClickedStatus) return\n return callbackDismissFn()\n }\n\n return new Promise((resolve) =>\n undoNotificationDialog(msg, undoClick, dismissHandler).onOk(\n (data: ReturnType) => resolve(data)\n )\n )\n}\n\nexport function showNoAccess(\n permissionType: UserPermissionType,\n accessLevel: UserPermissionAccess\n) {\n const { t } = i18n.global\n const noAccessBaseMessage = t(\"permissionNotifications.no_access\")\n const translatedPermission = getPermissionTypeTranslation(permissionType)\n const translatedAccess = getAccessLevelTranslation(accessLevel)\n\n const message = `${noAccessBaseMessage}: ${translatedAccess} - ${translatedPermission}`\n\n return Notify.create({\n type: \"sfx-notification-error\",\n message,\n multiLine: true,\n })\n}\n\nfunction getAccessLevelTranslation(accessLevel: UserPermissionAccess): string {\n const { t } = i18n.global\n switch (accessLevel) {\n case \"c\":\n return t(\"permissionNotifications.access_create\")\n case \"r\":\n return t(\"permissionNotifications.access_read\")\n case \"u\":\n return t(\"permissionNotifications.access_update\")\n case \"d\":\n return t(\"permissionNotifications.access_delete\")\n case \"+\":\n return t(\"permissionNotifications.access_admin\")\n }\n}\n\nfunction getPermissionTypeTranslation(permissionType: UserPermissionType): string {\n const { t } = i18n.global\n return t(`permissionNotifications.permission_${permissionType}`)\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex column no-wrap full-width full-height\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"flex column no-wrap full-width full-height items-center justify-center\"\n}\nconst _hoisted_3 = { class: \"column absolute-full flex-center transparent\" }\nconst _hoisted_4 = { class: \"text-error\" }\nconst _hoisted_5 = { class: \"text-caption text-navy-base q-mb-lg\" }\nconst _hoisted_6 = { class: \"absolute-full column flex-center transparent image-gallery-item--error\" }\nconst _hoisted_7 = { class: \"text-error\" }\n\nimport { App } from \"@src-capacitor/@capacitor/app\"\nimport { PluginListenerHandle } from \"@src-capacitor/@capacitor/core\"\nimport PinchZoom from \"pinch-zoom-js\"\nimport { date, QImg, useDialogPluginComponent } from \"quasar\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { computed, onMounted, onUnmounted, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxBtnOutline from \"../button/SfxBtnOutline.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxImageViewOverlay',\n props: {\n /**\n * List of images that should be shown in the gallery.\n */\n images: { type: Array as PropType>, required: true },\n\n /**\n * The index of the images within `images` to be selected initially.\n */\n selectedIdx: { type: Number, required: true },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst selectedIdx = ref(clampImageIdx(props.selectedIdx))\nconst selectedImage = computed(() => props.images[selectedIdx.value])\n\n// Indicates if the user has zoomed in on the selected image.\n// If there is only a single image in the gallery we are always zoomed.\nconst isZoomedIn = ref(props.images.length === 1)\n\nlet androidBackButtonListener: PluginListenerHandle | undefined\nconst pinchZoomTarget = ref(null)\nlet pinchZoom: PinchZoom | undefined\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n // Add android back button listener\n if (process.env.MODE === \"capacitor\") {\n androidBackButtonListener = await App.addListener(\"backButton\", onAndroidBack)\n }\n})\n\nonUnmounted(async () => {\n // Remove listener on android back button.\n if (process.env.MODE === \"capacitor\") {\n await androidBackButtonListener?.remove()\n }\n // Destroy pinch zoom instance.\n pinchZoom?.destroy()\n})\n\n// endregion\n\n//region Functions\n\n/**\n * Helper for clamping an index to the range of props.images.\n * Used to guarantee that props.selectedIdx always points to and index in props.images.\n */\nfunction clampImageIdx(idx: number) {\n return Math.max(Math.min(idx, props.images.length), 0)\n}\n\n/**\n * Go to an image in the carousel by index\n */\nfunction onGoTo(idx: number) {\n selectedIdx.value = clampImageIdx(idx)\n}\n\n/**\n * Toggles whether to zoom in on the selected image or not.\n */\nfunction onToggleZoom() {\n isZoomedIn.value = !isZoomedIn.value\n}\n\n/**\n * On android back button press, close zoom if open, otherwise close the dialogue itself.\n */\nfunction onAndroidBack() {\n if (isZoomedIn.value) {\n onToggleZoom()\n } else {\n onDialogCancel()\n }\n}\n\n//endregion\n\n//region Setup Code\n\n// Enable pinch zooming when we are zoomed in\nwatch(\n isZoomedIn,\n (newIsZoomedIn) => {\n if (newIsZoomedIn) {\n pinchZoom = new PinchZoom(pinchZoomTarget.value?.$el)\n pinchZoom.enable()\n } else {\n pinchZoom?.destroy()\n }\n },\n { flush: \"post\" }\n)\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_carousel_slide = _resolveComponent(\"q-carousel-slide\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_carousel_control = _resolveComponent(\"q-carousel-control\")!\n const _component_q_carousel = _resolveComponent(\"q-carousel\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin column no-wrap\" }, {\n default: _withCtx(() => [\n _createVNode(SfxTopNavigation, {\n title: _unref(t)('imageViewOverlay.title'),\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n onClose: _unref(onDialogCancel),\n class: \"shadow\",\n \"hide-context-menu\": \"\",\n \"hide-separator\": \"\",\n \"hide-notifications\": \"\",\n \"quick-action\": isZoomedIn.value ? _unref(ContextAction).IMAGE_ZOOM_OUT : _unref(ContextAction).IMAGE_ZOOM_IN,\n onContextSelect: _cache[0] || (_cache[0] = ($event: any) => (onToggleZoom()))\n }, {\n subtitle: _withCtx(() => [\n _createTextVNode(_toDisplayString(selectedImage.value.attachmentData.name), 1)\n ]),\n _: 1\n }, 8, [\"title\", \"navigation-action\", \"onClose\", \"quick-action\"]),\n (isZoomedIn.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_q_carousel_slide, {\n name: selectedImage.value.attachmentData.name,\n class: \"image-overlay--slide-fullscreen full-height full-width\"\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(QImg), {\n ref_key: \"pinchZoomTarget\",\n ref: pinchZoomTarget,\n src: selectedImage.value.src,\n fit: \"contain\",\n class: \"fit\"\n }, null, 8, [\"src\"])\n ]),\n _: 1\n }, 8, [\"name\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_q_carousel, {\n ref: \"carousel\",\n modelValue: selectedIdx.value,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((selectedIdx).value = $event)),\n class: \"transparent full-width\",\n swipeable: \"\",\n infinite: \"\",\n animated: \"\",\n \"transition-prev\": \"slide-right\",\n \"transition-next\": \"slide-left\"\n }, {\n control: _withCtx(() => [\n _createVNode(_component_q_carousel_control, {\n position: \"left\",\n class: \"column justify-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"bg-white\",\n icon: _unref(Icons).CHEVRON_LEFT,\n onClick: _cache[1] || (_cache[1] = ($event: any) => ((_ctx.$refs.carousel! as any).previous()))\n }, null, 8, [\"icon\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_carousel_control, {\n position: \"right\",\n class: \"column justify-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"bg-white\",\n icon: _unref(Icons).CHEVRON_RIGHT,\n onClick: _cache[2] || (_cache[2] = ($event: any) => ((_ctx.$refs.carousel! as any).next()))\n }, null, 8, [\"icon\"])\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.images, (image, index) => {\n return (_openBlock(), _createBlock(_component_q_carousel_slide, {\n key: index,\n name: index\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(QImg), {\n src: image.src,\n fit: \"contain\",\n class: \"fit\",\n ratio: \"1\"\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: \"48px\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_4, _toDisplayString(_ctx.$t(\"sfxImage.no_image\")), 1)\n ])\n ]),\n _: 2\n }, 1032, [\"src\"])\n ]),\n _: 2\n }, 1032, [\"name\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(date).formatDate(selectedImage.value.attachmentData.created_dt, _unref(DATE_TIME_FULL_MASK))), 1),\n _createVNode(_component_q_list, {\n ref: \"thumbnails\",\n class: \"row no-wrap scroll image-gallery q-pb-md q-pl-lg q-pr-lg\",\n style: {\"max-width\":\"100%\"}\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.images, (image, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"image-gallery-item\",\n key: index\n }, [\n _createVNode(_unref(QImg), {\n src: image.src,\n height: \"72px\",\n width: \"72px\",\n class: _normalizeClass([\"image-gallery-item--image image-overview-thumbnail\", { 'image-gallery-item--image-selected': index === selectedIdx.value }]),\n onClick: ($event: any) => (onGoTo(index))\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: \"25px\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_7, _toDisplayString(_ctx.$t(\"sfxImage.no_image_small\")), 1)\n ])\n ]),\n _: 2\n }, 1032, [\"src\", \"class\", \"onClick\"])\n ]))\n }), 128))\n ]),\n _: 1\n }, 512)\n ]))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxImageViewOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxImageViewOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCarouselSlide from 'quasar/src/components/carousel/QCarouselSlide.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QCarousel from 'quasar/src/components/carousel/QCarousel.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCarouselControl from 'quasar/src/components/carousel/QCarouselControl.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCarouselSlide,QImg,QCarousel,QIcon,QCarouselControl,QList});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, withCtx as _withCtx, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, withKeys as _withKeys } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { key: 0 }\n\nimport { App } from \"@src-capacitor/@capacitor/app\"\nimport { PluginListenerHandle } from \"@src-capacitor/@capacitor/core\"\nimport { DialogChainObject, QCard, useDialogPluginComponent } from \"quasar\"\nimport SfxCardNotificationSystem from \"src/components/card/SfxCardNotificationSystem.vue\"\nimport SfxCardNotificationUser from \"src/components/card/SfxCardNotificationUser.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxTab from \"src/components/navigation/SfxTab.vue\"\nimport SfxTabs from \"src/components/navigation/SfxTabs.vue\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport { useNotificationsStore } from \"src/stores/notificationsStore\"\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { ContextAction, MissingEntityType } from \"src/util/enums/entityType\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { confirmationDialog, showFeedback, systemDialog } from \"src/util/functions/dialogs\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport {\n compareData,\n filterOldNotifications,\n isSystemNotification,\n showRevertSelectionNotification,\n showSuccessNotification,\n} from \"src/util/functions/notifications\"\nimport { getNotificationMockData } from \"src/util/mockData/notifications\"\nimport {\n NotificationCardData,\n SystemNotificationCardData,\n UserNotificationCardData,\n} from \"src/util/types/notifications\"\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxOverlayNotifications',\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst notificationsStore = useNotificationsStore()\n\nconst pageTitle = t(\"sfxOverlayNotifications.title\")\nconst topNavigationContainer = ref(null)\n\nconst readTab = t(\"sfxOverlayNotifications.read_notifications\")\nconst unreadTab = t(\"sfxOverlayNotifications.unread_notifications\")\nconst activeTab = ref(unreadTab)\n\nconst unreadCount = computed(() => `${unreadTab} (${unreadNotifications.value.length})`)\n\nconst tabs = reactive([\n { name: unreadTab, label: unreadCount },\n { name: readTab, label: readTab },\n])\n\nconst quickAction = computed(() => {\n const result = ref()\n if (activeTab.value === readTab) {\n if (readNotifications.value.length > 0) {\n result.value = ContextAction.MARK_ALL_UNREAD\n }\n } else {\n if (unreadNotifications.value.length > 0) {\n result.value = ContextAction.MARK_ALL_READ\n }\n }\n return result.value\n})\n\nconst scrollAreaHeight = computed(() => {\n const topNavigationHeight = topNavigationContainer.value?.offsetHeight || 0\n return { height: `calc(100% - ${topNavigationHeight}px)` }\n})\n\nconst { dialogRef, onDialogCancel } = useDialogPluginComponent()\n\nconst allNotifications = ref>(\n getNotificationMockData().filter((notification: NotificationCardData) =>\n filterOldNotifications(notification)\n )\n)\n\nconst readNotifications = computed(() => {\n return allNotifications.value.filter((notification) => notification.isRead).sort(compareData)\n})\n\nconst unreadNotifications = computed(() => {\n return allNotifications.value.filter((notification) => !notification.isRead).sort(compareData)\n})\n\n// selectedNotificationsList is an array of pointers to allNotifications\nconst selectedNotificationsList = ref([])\n\nconst isMultipleSelectionOn = computed(() => selectedNotificationsList.value.length > 0)\nconst showUndo = ref()\n\nlet androidBackButtonListener: PluginListenerHandle | undefined\n\n//endregion\n\n//region Lifecycle\n\nif (process.env.MODE === \"capacitor\") {\n onMounted(async () => {\n androidBackButtonListener = await App.addListener(\"backButton\", async () => {\n if (selectedNotificationsList.value.length === 0) {\n if (showUndo.value) showUndo.value?.hide()\n await androidBackButtonListener?.remove()\n onDialogCancel()\n } else {\n deselect()\n }\n })\n })\n\n onUnmounted(async () => {\n await androidBackButtonListener?.remove()\n })\n}\n\n//endregion\n\n//region Functions\n\nfunction addBorder(notification: NotificationCardData) {\n return selectedNotificationsList.value.includes(notification) ? \"sfx-card--selected\" : undefined\n}\n\nasync function handleContextSelect(contextMenuItem: ContextMenuItem) {\n switch (contextMenuItem.action) {\n case ContextAction.FEEDBACK:\n return showFeedback({ context: pageTitle })\n case ContextAction.HELP:\n return helpTourNotImplemented(\"NotificationsOverlay\")\n case ContextAction.MARK_ALL_READ:\n return await markRead()\n case ContextAction.MARK_ALL_UNREAD:\n return await markUnread()\n }\n}\n\nasync function markRead() {\n if (selectedNotificationsList.value.length > 0) {\n // If there are selected notifications - only act on those\n selectedNotificationsList.value.map((notification) => (notification.isRead = true))\n selectedNotificationsList.value.length = 0\n } else {\n // Otherwise, but ask for confirmation and act on all\n const userConfirmed = await confirmationDialog({\n title: t(\"sfxOverlayNotifications.mark_read_dialogTitle\"),\n content: t(\"sfxOverlayNotifications.mark_read_dialogContent\"),\n persistent: true,\n })\n if (userConfirmed) {\n allNotifications.value.map((notification) => (notification.isRead = true))\n }\n }\n}\n\nasync function markUnread() {\n if (selectedNotificationsList.value.length > 0) {\n // If there are selected notifications - only act on those\n selectedNotificationsList.value.map((notification) => (notification.isRead = false))\n selectedNotificationsList.value.length = 0\n } else {\n // Otherwise, but ask for confirmation and act on all\n const userConfirmed = await confirmationDialog({\n title: t(\"sfxOverlayNotifications.mark_unread_dialogTitle\"),\n content: t(\"sfxOverlayNotifications.mark_unread_dialogContent\"),\n persistent: true,\n })\n if (userConfirmed) {\n allNotifications.value.map((notification) => (notification.isRead = false))\n }\n }\n}\n\nfunction handleNotificationClick(notification: NotificationCardData) {\n if (isMultipleSelectionOn.value) {\n // If multi-select is on, select multiple notifications onclick\n selectMultipleNotifications(notification)\n } else {\n // Otherwise, check: If system notification - open system dialog, else - go to the relation\n notification.isSystemCardNotification\n ? showSystemDialog(notification as SystemNotificationCardData)\n : goToRelation(notification as UserNotificationCardData)\n }\n}\n\nfunction selectMultipleNotifications(notification: NotificationCardData) {\n if (selectedNotificationsList.value.includes(notification)) {\n // If already selected - deselect it\n const idx = selectedNotificationsList.value.indexOf(notification)\n selectedNotificationsList.value.splice(idx, 1)\n } else {\n // Otherwise - select it\n selectedNotificationsList.value.push(notification)\n }\n}\n\nasync function showSystemDialog(notification: SystemNotificationCardData) {\n const userConfirmed = await systemDialog(notification)\n if (userConfirmed) {\n // On confirmation - mark the notification as read\n const idxAll = allNotifications.value.indexOf(notification)\n allNotifications.value[idxAll].isRead = true\n // TODO: Uncomment the following two lines when the real data is incorporated into the page(won't work with mock data)\n // TODO: Until that there would be some problems with store's system notification content\n // Update the system notifications in the notification store\n // const idxSys = notificationsStore.sysNotifications.indexOf(notification)\n // notificationsStore.sysNotifications.splice(idxSys, 1)\n }\n}\n\nfunction goToRelation(notification: UserNotificationCardData) {\n // Mark the notification as read\n const idx = allNotifications.value.indexOf(notification)\n allNotifications.value[idx].isRead = true\n\n // TODO: Go to specific relation when we have those implemented\n const message = \"Relation: \" + notification.relationRepresentation\n showSuccessNotification(message)\n}\n\n/**\n * The function notifies the user that he might lose his multiple\n * selection of notifications and gives him the option to bring those back,\n * in case of a miss-click.\n *\n * After the time has elapsed, the selected notifications will be deselected.\n */\nfunction deselect() {\n if (selectedNotificationsList.value.length === 0) return\n\n if (activeTab.value === unreadTab) {\n // Backup previously selected notifications\n const backupArray: NotificationCardData[] = Array.from(selectedNotificationsList.value)\n\n // Show undo notification with the option to bring back previous selection\n showUndo.value = showRevertSelectionNotification(() => {\n selectedNotificationsList.value = backupArray\n activeTab.value = unreadTab\n })\n } else {\n // Backup previously selected notifications\n const backupArray: NotificationCardData[] = Array.from(selectedNotificationsList.value)\n\n // Show undo notification with the option to bring back previous selection\n showUndo.value = showRevertSelectionNotification(() => {\n selectedNotificationsList.value = backupArray\n activeTab.value = readTab\n })\n }\n selectedNotificationsList.value.length = 0\n}\n\nfunction switchTab(currentTab: string) {\n deselect()\n activeTab.value = currentTab\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => unreadNotifications.value,\n (notifications) => {\n if (notifications) {\n notificationsStore.count = notifications.length\n }\n\n notificationsStore.sysNotifications = notifications.filter(\n (notification): notification is SystemNotificationCardData =>\n isSystemNotification(notification)\n )\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_tab_panel = _resolveComponent(\"q-tab-panel\")!\n const _component_q_tab_panels = _resolveComponent(\"q-tab-panels\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_scroll_area = _resolveComponent(\"q-scroll-area\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n const _directive_touch_hold = _resolveDirective(\"touch-hold\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n class: \"full-height\",\n maximized: \"\",\n onKeyup: _withKeys(deselect, [\"esc\"])\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(QCard), { class: \"full-height\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"topNavigationContainer\",\n ref: topNavigationContainer\n }, [\n _createVNode(SfxTopNavigation, {\n title: _unref(pageTitle),\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"quick-action\": quickAction.value,\n onContextSelect: handleContextSelect,\n \"hide-notifications\": \"\",\n \"hide-separator\": \"\",\n onClose: _unref(onDialogCancel),\n class: \"shadow\"\n }, null, 8, [\"title\", \"navigation-action\", \"quick-action\", \"onClose\"]),\n _createVNode(SfxTabs, {\n \"model-value\": activeTab.value,\n \"onUpdate:modelValue\": switchTab,\n class: \"q-px-md\"\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(tabs, (tab) => {\n return (_openBlock(), _createBlock(SfxTab, {\n key: tab,\n label: tab.label,\n name: tab.name,\n class: \"full-width\"\n }, null, 8, [\"label\", \"name\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"model-value\"])\n ], 512),\n _createVNode(_component_q_scroll_area, {\n class: \"full-width scrollbar-area\",\n style: _normalizeStyle(scrollAreaHeight.value),\n visible: false\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, null, {\n default: _withCtx(() => [\n _createVNode(_component_q_tab_panels, {\n \"model-value\": activeTab.value,\n \"onUpdate:modelValue\": switchTab,\n swipeable: \"\",\n animated: \"\",\n \"transition-prev\": \"fade\",\n \"transition-next\": \"fade\",\n class: \"full-height\",\n \"keep-alive\": \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_tab_panel, {\n name: _unref(unreadTab),\n class: \"q-pa-none\"\n }, {\n default: _withCtx(() => [\n (unreadNotifications.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(unreadNotifications.value, (notification) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: notification }, [\n (notification.isSystemCardNotification)\n ? _withDirectives((_openBlock(), _createBlock(SfxCardNotificationSystem, {\n key: 0,\n data: notification,\n onClick: ($event: any) => (handleNotificationClick(notification)),\n class: _normalizeClass(addBorder(notification))\n }, null, 8, [\"data\", \"onClick\", \"class\"])), [\n [\n _directive_touch_hold,\n () => selectMultipleNotifications(notification),\n void 0,\n { mouse: true }\n ]\n ])\n : _withDirectives((_openBlock(), _createBlock(SfxCardNotificationUser, {\n key: 1,\n data: notification,\n onClick: ($event: any) => (handleNotificationClick(notification)),\n class: _normalizeClass(addBorder(notification))\n }, null, 8, [\"data\", \"onClick\", \"class\"])), [\n [\n _directive_touch_hold,\n () => selectMultipleNotifications(notification),\n void 0,\n { mouse: true }\n ]\n ])\n ], 64))\n }), 128))\n ]))\n : (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"full-width q-px-lg\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).NOTIFICATION_NOT_FOUND),\n \"vertical-center\": \"\"\n }, null, 8, [\"missingEntity\"]))\n ]),\n _: 1\n }, 8, [\"name\"]),\n _createVNode(_component_q_tab_panel, {\n name: _unref(readTab),\n class: \"q-pa-none\"\n }, {\n default: _withCtx(() => [\n (readNotifications.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(readNotifications.value, (notification) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: notification }, [\n (notification.isSystemCardNotification)\n ? _withDirectives((_openBlock(), _createBlock(SfxCardNotificationSystem, {\n key: 0,\n data: notification,\n onClick: ($event: any) => (handleNotificationClick(notification)),\n class: _normalizeClass(addBorder(notification))\n }, null, 8, [\"data\", \"onClick\", \"class\"])), [\n [\n _directive_touch_hold,\n () => selectMultipleNotifications(notification),\n void 0,\n { mouse: true }\n ]\n ])\n : _withDirectives((_openBlock(), _createBlock(SfxCardNotificationUser, {\n key: 1,\n data: notification,\n onClick: ($event: any) => (handleNotificationClick(notification)),\n class: _normalizeClass(addBorder(notification))\n }, null, 8, [\"data\", \"onClick\", \"class\"])), [\n [\n _directive_touch_hold,\n () => selectMultipleNotifications(notification),\n void 0,\n { mouse: true }\n ]\n ])\n ], 64))\n }), 128))\n ]))\n : (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"full-width q-px-lg\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).NOTIFICATION_NOT_FOUND),\n \"vertical-center\": \"\"\n }, null, 8, [\"missingEntity\"]))\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"model-value\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"style\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxOverlayNotifications.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxOverlayNotifications.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QScrollArea from 'quasar/src/components/scroll-area/QScrollArea.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QTabPanels from 'quasar/src/components/tab-panels/QTabPanels.js';\nimport QTabPanel from 'quasar/src/components/tab-panels/QTabPanel.js';import TouchHold from 'quasar/src/directives/touch-hold/TouchHold.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QScrollArea,QCardSection,QTabPanels,QTabPanel});qInstall(script, 'directives', {TouchHold});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h2 q-px-lg q-py-sm bg-tooltip-and-input-back\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"q-mr-sm text-weight-regular\"\n}\nconst _hoisted_3 = { class: \"text-bold\" }\nconst _hoisted_4 = { class: \"q-pl-lg\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxImageViewerManager from \"src/components/images/SfxImageViewerManager.vue\"\nimport SfxBreadcrumbs from \"src/components/navigation/SfxBreadcrumbs.vue\"\nimport SfxTopNavigationManager from \"src/components/navigation/SfxTopNavigationManager.vue\"\nimport SfxSpinner from \"src/components/special/SfxSpinner.vue\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { MANAGER_MAIN_MENU } from \"src/util/constants/configurations\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { getImageViewerItems, splitAttachments } from \"src/util/functions/attachments\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport { getIssueCommentData, getIssueData } from \"src/util/functions/issues\"\nimport { getItemData } from \"src/util/functions/item\"\nimport {\n getCorrectiveWorkOnItemCommentData,\n getCorrectiveWorkOnItemData,\n getRegularWorkOnItemCommentData,\n getRegularWorkOnItemData,\n} from \"src/util/functions/performedWork\"\nimport {\n getWorkOrderCorrectiveItemCommentData,\n getWorkOrderCorrectiveItemData,\n getWorkOrderRegularItemCommentData,\n getWorkOrderRegularItemData,\n} from \"src/util/functions/workOrder\"\nimport { getWorkspaceHomeBreadcrumb } from \"src/util/functions/workspace\"\nimport { Breadcrumbs } from \"src/util/types/components/sfxBreadcrumb\"\nimport { ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { Attachment, AttachmentContext } from \"src/util/types/dataModels/attachment\"\nimport { onBeforeMount, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxPhotoGalleryOverlay',\n props: {\n entityId: {\n type: String,\n required: true,\n },\n\n entityType: {\n type: String as PropType,\n required: true,\n },\n\n disableEditImage: Boolean,\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst supportStore = useSupportStore()\nconst { dialogRef, onDialogOK } = useDialogPluginComponent()\n\nconst menuContent = MANAGER_MAIN_MENU\nconst title = ref()\nconst titleReference = ref()\nconst breadcrumbs = ref([])\n\nconst loadingImages = ref(true)\nconst spinnerText = t(\"sfxSpinner.attachment_data\")\n\nconst entity = ref()\nconst imageList = ref([])\nconst attachmentList = ref([])\nconst entityImages = ref([])\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n entity.value = await getEntityData(props.entityId, props.entityType)\n if (entity.value) await splitAttachments(entity.value, imageList.value, attachmentList.value)\n\n await setTitleAndBreadcrumbData(props.entityType)\n supportStore.setFeedbackData(t(\"attachments.photo_gallery\"))\n})\n\n//endregion\n\n//region Functions\n\nasync function handleContextSelect(contextMenuItem: ContextMenuItem) {\n if (contextMenuItem.action === ContextAction.HELP) {\n return helpTourNotImplemented(\"SfxPhotoGallery\")\n }\n}\n\nasync function getEntityData(entityId: string, entity: AttachmentContext) {\n switch (entity) {\n case \"item\":\n return await getItemData(entityId)\n\n case \"issue_item\":\n return await getIssueData(entityId)\n\n case \"issue_item_comment\":\n return await getIssueCommentData(entityId)\n\n case \"corrective_work_item\":\n return await getCorrectiveWorkOnItemData(entityId)\n\n case \"regular_work_item\":\n return await getRegularWorkOnItemData(entityId)\n\n case \"corrective_work_item_comment\":\n return await getCorrectiveWorkOnItemCommentData(entityId)\n\n case \"regular_work_item_comment\":\n return await getRegularWorkOnItemCommentData(entityId)\n\n case \"work_order_corrective_item\":\n return await getWorkOrderCorrectiveItemData(entityId)\n\n case \"work_order_regular_item\":\n return await getWorkOrderRegularItemData(entityId)\n\n case \"work_order_corrective_item_comment\":\n return await getWorkOrderCorrectiveItemCommentData(entityId)\n\n case \"work_order_regular_item_comment\":\n return await getWorkOrderRegularItemCommentData(entityId)\n }\n}\n\nasync function setTitleAndBreadcrumbData(entityType: AttachmentContext) {\n let entityBreadcrumb: Breadcrumbs = []\n const photoGallery: Breadcrumbs = [{ text: t(\"attachments.photo_gallery\") }]\n\n switch (entityType) {\n case \"item\": {\n title.value = entity.value.designation || \"\"\n\n entityBreadcrumb = getItemBreadcrumbs()\n break\n }\n\n case \"issue_item\": {\n titleReference.value = entity.value.reference\n title.value = entity.value.title || \"\"\n\n entityBreadcrumb = getIssueItemBreadcrumbs()\n break\n }\n\n case \"issue_item_comment\": {\n const issue = await getIssueData(entity.value.issue)\n titleReference.value = issue?.reference || \"\"\n title.value = issue?.title || \"\"\n\n entityBreadcrumb = getIssueItemBreadcrumbs()\n break\n }\n\n case \"corrective_work_item\": {\n title.value = entity.value.title || \"\"\n\n entityBreadcrumb = getCorrectiveWorkItemBreadcrumbs()\n break\n }\n\n case \"regular_work_item\": {\n title.value = entity.value.title || \"\"\n\n entityBreadcrumb = getRegularWorkItemBreadcrumbs()\n break\n }\n\n case \"corrective_work_item_comment\": {\n const work = await getCorrectiveWorkOnItemData(entity.value.performed_work)\n title.value = work?.title || \"\"\n\n entityBreadcrumb = getCorrectiveWorkItemBreadcrumbs()\n break\n }\n\n case \"regular_work_item_comment\": {\n const work = await getRegularWorkOnItemData(entity.value.performed_work)\n title.value = work?.title || \"\"\n\n entityBreadcrumb = getRegularWorkItemBreadcrumbs()\n break\n }\n\n case \"work_order_corrective_item\":\n case \"work_order_corrective_item_comment\": {\n const workOrder = await getWorkOrderCorrectiveItemData(entity.value.work_order)\n titleReference.value = workOrder?.reference || \"\"\n title.value = workOrder?.designation || \"\"\n\n entityBreadcrumb = getWorkOrderBreadcrumbs()\n break\n }\n\n case \"work_order_regular_item\":\n case \"work_order_regular_item_comment\": {\n const workOrder = await getWorkOrderRegularItemData(entity.value.work_order)\n titleReference.value = workOrder?.reference || \"\"\n title.value = workOrder?.designation || \"\"\n\n entityBreadcrumb = getWorkOrderBreadcrumbs()\n break\n }\n\n case \"work_order_corrective_area_comment\":\n case \"work_order_regular_area_comment\": {\n // TODO: Do me at some point\n break\n }\n }\n\n breadcrumbs.value = [await getWorkspaceHomeBreadcrumb(), ...entityBreadcrumb, ...photoGallery]\n}\n\nfunction getItemBreadcrumbs() {\n return [\n {\n text: t(\"items.title\"),\n link: { name: NamedManagerPath.SELECT_ITEM },\n highlight: true,\n },\n {\n text: t(\"items.item_overview\"),\n },\n ]\n}\n\nfunction getIssueItemBreadcrumbs() {\n return [\n {\n text: t(\"issues.title\"),\n link: { name: NamedManagerPath.SELECT_ISSUE },\n highlight: true,\n },\n {\n text: t(\"issues.issue_overview\"),\n },\n ]\n}\n\nfunction getCorrectiveWorkItemBreadcrumbs() {\n return [\n {\n text: t(\"performedWork.title\"),\n link: { name: NamedManagerPath.SELECT_PERFORMED_WORK },\n highlight: true,\n },\n {\n text: t(\"performedWork.title_corrective_work\"),\n },\n ]\n}\n\nfunction getRegularWorkItemBreadcrumbs() {\n return [\n {\n text: t(\"performedWork.title\"),\n link: { name: NamedManagerPath.SELECT_PERFORMED_WORK },\n highlight: true,\n },\n {\n text: t(\"performedWork.title_regular_work\"),\n },\n ]\n}\n\nfunction getWorkOrderBreadcrumbs() {\n return [\n {\n text: t(\"workOrder.title\"),\n link: { name: NamedManagerPath.SELECT_WORK_ORDER },\n highlight: true,\n },\n {\n text: t(\"workOrder.title_overview\"),\n },\n ]\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => imageList.value,\n async (images) => {\n loadingImages.value = true\n\n const items = await getImageViewerItems(props.entityType, props.entityId, images)\n if (items) entityImages.value = items\n\n loadingImages.value = false\n },\n { immediate: true, deep: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_header = _resolveComponent(\"q-header\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_layout = _resolveComponent(\"q-layout\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_layout, { view: \"hHh lpR fff\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_header, { class: \"bg-transparent text-navy-base\" }, {\n default: _withCtx(() => [\n _createVNode(SfxTopNavigationManager, {\n \"main-menu-content\": _unref(menuContent),\n \"disable-extended-menu\": \"\",\n \"disable-main-menu\": \"\",\n \"hide-search-bar\": \"\",\n \"hide-quick-actions\": \"\",\n \"hide-separator\": \"\",\n \"hide-notifications\": \"\",\n \"hide-todo-icon\": \"\",\n \"hide-user-display\": \"\",\n onContextSelect: handleContextSelect\n }, null, 8, [\"main-menu-content\"]),\n _createElementVNode(\"div\", _hoisted_1, [\n (titleReference.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(titleReference.value), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(title.value), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(SfxBreadcrumbs, {\n breadcrumbs: breadcrumbs.value,\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"is-dialog\": \"\",\n onClose: _cache[0] || (_cache[0] = ($event: any) => (_unref(onDialogOK)(entityImages.value))),\n class: \"bg-tooltip-and-input-back\"\n }, null, 8, [\"breadcrumbs\", \"navigation-action\"])\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_q_card_section, { class: \"bg-tooltip-and-input-back window-height\" }, {\n default: _withCtx(() => [\n (loadingImages.value)\n ? (_openBlock(), _createBlock(SfxSpinner, {\n key: 0,\n class: \"absolute\",\n text: _unref(spinnerText)\n }, null, 8, [\"text\"]))\n : (_openBlock(), _createBlock(SfxImageViewerManager, {\n key: 1,\n \"entity-id\": __props.entityId,\n \"entity-type\": __props.entityType,\n \"image-list\": entityImages.value,\n \"onUpdate:imageList\": _cache[1] || (_cache[1] = ($event: any) => ((entityImages).value = $event)),\n \"start-image\": entityImages.value[0],\n \"disable-edit-image\": __props.disableEditImage\n }, null, 8, [\"entity-id\", \"entity-type\", \"image-list\", \"start-image\", \"disable-edit-image\"]))\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxPhotoGalleryOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxPhotoGalleryOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QLayout from 'quasar/src/components/layout/QLayout.js';\nimport QHeader from 'quasar/src/components/header/QHeader.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QLayout,QHeader,QCardSection});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withCtx as _withCtx, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-info text-bold\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_3 = { class: \"text-navy-700 text-bold\" }\nconst _hoisted_4 = { class: \"text-info text-bold\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_6 = { class: \"text-navy-700 text-bold\" }\n\nimport SfxTable from \"src/components/table/SfxTable.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport {\n fetchCorrectiveWorkOnItemListData,\n fetchIssueOnItemListData,\n fetchIssuePriorityListData,\n fetchItemClassListData,\n fetchItemListData,\n fetchItemModelListData,\n} from \"src/util/functions/entityData\"\nimport { getIssuePriorityColor } from \"src/util/functions/issuePriority\"\nimport { sortIssueData, toIssueTableData } from \"src/util/functions/issues\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { getWorkspaceHomeBreadcrumb } from \"src/util/functions/workspace\"\nimport { Breadcrumbs } from \"src/util/types/components/sfxBreadcrumb\"\nimport { RowData, StatusColumnNames, TableColumn } from \"src/util/types/components/sfxTable\"\nimport { IssuesOnItem, IssueTableData } from \"src/util/types/dataModels/issue\"\nimport { WorkOrderCorrectiveItem } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onBeforeMount, PropType, ref, watchEffect } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst statusColumnCount = 4\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxWorkOrderIssueItemAssignment',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n\n entitiesIncluded: {\n type: Array as PropType,\n required: true,\n },\n\n entitiesPerformed: {\n type: Array as PropType,\n required: true,\n },\n\n isDisplayingToDoEntities: {\n type: Boolean,\n },\n\n isReadOnly: {\n type: Boolean,\n },\n},\n setup(__props, { expose: __expose }) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst supportStore = useSupportStore()\nconst searchStore = useSearchStore()\nconst cacheStore = useCacheStore()\n\nconst breadcrumbs = ref([])\n\nconst sfxTableAvailable = ref()\nconst sfxTableCompleted = ref()\nconst filteredAvailableDataCount = computed(() => sfxTableAvailable.value?.filteredDataCount || 0)\nconst filteredCompletedDataCount = computed(() => sfxTableCompleted.value?.filteredDataCount || 0)\n\nconst issueAvailableList = ref[]>([])\nconst issueCompletedList = ref[]>([])\nconst issueTableAvailableData = computed(() => issueAvailableList.value)\nconst issueTableCompletedData = computed(() => issueCompletedList.value)\nconst noData = ref(MissingEntityType.ISSUE_NOT_FOUND)\nconst noMatchingData = ref(MissingEntityType.ISSUE_NO_MATCHES)\nconst loadingData = ref(true)\n\nconst mainColumn = (row: RowData) => row.issueData.title\nconst uniqueColumn = (row: RowData) => row.issueData.id\n\nconst mainColumnLabel = ref(t(\"issues.table_column_title_label\"))\n\nconst selectionEnabled = ref(!props.isReadOnly)\nconst selected = ref([])\nconst initialSelected = ref([])\n\nconst initialSelectIds = computed(() => initialSelected.value.map((i) => i.issueData.id).sort())\nconst selectIds = computed(() => selected.value.map((i) => i.issueData.id).sort())\n\nconst visibleColumns = ref([\n \"work_domain\",\n \"entity_grouping\",\n \"entity\",\n \"layout\",\n \"raised\",\n \"priority\",\n])\n\nconst issueColumns = ref>([\n {\n name: \"work_domain\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_work_domain_label\"),\n field: (row: IssueTableData) => row.workDomainData?.designation,\n id: (row: IssueTableData) => row.workDomainData?.id,\n },\n {\n name: \"entity_grouping\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_entity_grouping_label\"),\n field: (row: IssueTableData) => row.itemClassData?.designation,\n id: (row: IssueTableData) => row.itemClassData?.id,\n },\n {\n name: \"entity\",\n switchable: true,\n sortable: true,\n searchable: true,\n label: t(\"issues.table_column_entity_label\"),\n field: (row: IssueTableData) => row.actionableItem?.designation, // TODO: Add location ID at the beginning\n id: (row: IssueTableData) => row.actionableItem?.id,\n },\n {\n name: \"layout\",\n switchable: true,\n sortable: true,\n emptyText: t(\"sfxTable.empty_no_location\"),\n label: t(\"items.table_column_layout_label\"),\n field: \"\", // TODO: Should display layout designation when we have it\n },\n {\n name: \"raised\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_raised_label\"),\n field: (row: IssueTableData) =>\n new Date(row.issueData.declared_dt || row.issueData.created_dt).toJSON(),\n format: (value: string | null) => (value ? getTemporalInfo(value, \"card\") : null),\n },\n {\n name: \"priority\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_priority_label\"),\n align: \"left\",\n field: (row: IssueTableData) => row.priorityData?.risk_factor + \"-\" + row.priorityData?.label,\n id: (row: IssueTableData) => row.priorityData?.id,\n },\n {\n name: \"closed_date\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_closed_date_label\"),\n field: (row: IssueTableData) => new Date(row.issueData.concluded_dt || \"\").toJSON(),\n format: (value: string | null) => (value ? getTemporalInfo(value, \"card\") : null),\n },\n {\n name: \"last_updated\",\n switchable: true,\n sortable: true,\n label: t(\"issues.table_column_updated_label\"),\n field: (row: IssueTableData) => new Date(row.issueData.updated_dt || \"\").toJSON(),\n format: (value: string | null) => (value ? getTemporalInfo(value, \"card\") : null),\n },\n])\n\nconst statusColumnsSort: StatusColumnNames[] = [\n \"issue-overdue\",\n \"work-order\",\n \"corrective-work\",\n \"corrective-work-accepted\",\n \"closed\",\n]\n\n// 1. issue-overdue\n// 2. work-order\n// 3. corrective-work\n// 4. corrective-work-accepted\n// We don't display the closed column\nconst performedRowClass = ref(\"sfx-table__td-status-performed\")\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n searchStore.domain = \"issues\"\n supportStore.setFeedbackData(t(\"workOrder.title_work_order_issues\"))\n\n try {\n await fetchAPIData()\n await assignIssueTableData()\n } catch (fetchError) {\n Log.error({\n message: \"There was an error trying to fetch and populate data for Issues\",\n error: fetchError,\n })\n } finally {\n loadingData.value = false\n }\n})\n\n//endregion\n\n//region Functions\n\nfunction resetSelection() {\n selected.value = [...initialSelected.value]\n}\n\nasync function fetchAPIData() {\n await fetchItemClassListData()\n await Promise.all([\n fetchItemListData(),\n fetchIssueOnItemListData(),\n fetchIssuePriorityListData(),\n fetchItemModelListData(),\n fetchCorrectiveWorkOnItemListData(),\n ])\n}\n\nfunction issueClasses(row: IssueTableData): string {\n if (row.overdueTime && row.overdueTime > 0) return \"sfx-table__td-status-overdue\"\n if (row.issueData?.concluded_dt) return \"sfx-table__td-status-closed\"\n return \"\"\n}\n\nasync function assignIssueTableData() {\n const issueWithOpenCorrectiveWorkIds = cacheStore.issueWithOpenCorrectiveWork.keys()\n\n const skipIds = props.entitiesPerformed\n .map((i) => i.id)\n .concat(props.entitiesIncluded.map((i) => i.id))\n .concat([...issueWithOpenCorrectiveWorkIds])\n\n const issueData = await getIssueData(props.workOrder?.work_domain, skipIds)\n\n const selectedIssues = await Promise.all(props.entitiesIncluded.map((i) => toIssueTableData(i)))\n selected.value = selectedIssues\n initialSelected.value = [...selectedIssues]\n\n issueAvailableList.value = issueData.concat(selectedIssues).sort(sortIssueData)\n issueCompletedList.value = await Promise.all(\n props.entitiesPerformed.map(async (i) => {\n const data = await toIssueTableData(i)\n data.preSelectState = true\n return data\n })\n )\n}\n\nasync function getIssueData(\n workDomainId: string,\n skipIssueIds: string[]\n): Promise[]> {\n const db = await getDB()\n\n // Only issue on items\n // Only for the work domain of the selected work order\n // Not in any work order\n // Not closed\n // Without a corrective work\n\n const issueDocuments = await db.issues_on_item\n .find({\n selector: {\n $and: [\n { work_domain: workDomainId },\n { corrective_work_order: null },\n { concluded_dt: null },\n { id: { $nin: skipIssueIds } },\n ],\n },\n })\n .exec()\n\n return await Promise.all(\n issueDocuments.map>>((i) => toIssueTableData(i))\n )\n}\n\n//endregion\n\n//region Setup Code\n\nwatchEffect(async () => {\n const count = props.isDisplayingToDoEntities\n ? filteredAvailableDataCount.value\n : filteredCompletedDataCount.value\n const total = props.isDisplayingToDoEntities\n ? issueTableAvailableData.value.length\n : issueTableCompletedData.value.length\n\n breadcrumbs.value = [\n await getWorkspaceHomeBreadcrumb(),\n {\n text: t(\"workOrder.title\"),\n link: { name: NamedManagerPath.SELECT_WORK_ORDER },\n highlight: true,\n },\n {\n text: t(\"workOrder.title_simple\"),\n },\n {\n text: t(\"workOrder.title_work_order_issues\"),\n },\n { current: count, total, entity: \"issue\" },\n ]\n})\n\n__expose({\n resetSelection,\n breadcrumbs,\n initialSelectIds,\n selectIds,\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _withDirectives(_createElementVNode(\"div\", null, [\n _createVNode(SfxTable, {\n ref_key: \"sfxTableAvailable\",\n ref: sfxTableAvailable,\n columns: issueColumns.value,\n \"visible-columns\": visibleColumns.value,\n loading: loadingData.value,\n data: issueTableAvailableData.value,\n \"no-data\": noData.value,\n \"no-matching-data\": noMatchingData.value,\n \"unique-column\": uniqueColumn,\n \"main-column\": mainColumn,\n \"main-column-label\": mainColumnLabel.value,\n \"selection-enabled\": selectionEnabled.value,\n \"status-columns-sort\": statusColumnsSort,\n \"status-columns-count\": statusColumnCount,\n selected: selected.value,\n \"onUpdate:selected\": _cache[0] || (_cache[0] = ($event: any) => ((selected).value = $event)),\n entity: \"issue\",\n \"row-class\": issueClasses,\n \"enable-select-only-mode\": \"\"\n }, {\n \"body-cell-entity_grouping-prepend\": _withCtx(({ row }) => [\n _createElementVNode(\"span\", _hoisted_1, [\n _createTextVNode(_toDisplayString(row?.actionableItem\n ? _ctx.$t(\"issues.table_column_entity_grouping_item_class\")\n : _ctx.$t(\"issues.table_column_entity_grouping_area_attribute_set\")) + \" \", 1),\n _hoisted_2\n ])\n ]),\n \"body-cell-priority-prepend\": _withCtx(({ row }) => [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).ISSUE,\n style: _normalizeStyle({ color: row?.priorityData?.color }),\n class: \"q-pr-sm\",\n size: \"sm\"\n }, null, 8, [\"name\", \"style\"])\n ]),\n \"body-cell-priority-value\": _withCtx(({ value }) => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(value), 1)\n ]),\n _: 1\n }, 8, [\"columns\", \"visible-columns\", \"loading\", \"data\", \"no-data\", \"no-matching-data\", \"main-column-label\", \"selection-enabled\", \"selected\"])\n ], 512), [\n [_vShow, props.isDisplayingToDoEntities]\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createVNode(SfxTable, {\n ref_key: \"sfxTableCompleted\",\n ref: sfxTableCompleted,\n columns: issueColumns.value,\n \"visible-columns\": visibleColumns.value,\n loading: loadingData.value,\n data: issueTableCompletedData.value,\n \"no-data\": noData.value,\n \"no-matching-data\": noMatchingData.value,\n \"unique-column\": uniqueColumn,\n \"main-column\": mainColumn,\n \"main-column-label\": mainColumnLabel.value,\n \"status-columns-sort\": statusColumnsSort,\n \"status-columns-count\": statusColumnCount,\n entity: \"issue\",\n \"selection-enabled\": selectionEnabled.value,\n enablePreSelectedMode: \"\",\n \"row-class\": performedRowClass.value\n }, {\n \"body-cell-entity_grouping-prepend\": _withCtx(({ row }) => [\n _createElementVNode(\"span\", _hoisted_4, [\n _createTextVNode(_toDisplayString(row?.actionableItem\n ? _ctx.$t(\"issues.table_column_entity_grouping_item_class\")\n : _ctx.$t(\"issues.table_column_entity_grouping_area_attribute_set\")) + \" \", 1),\n _hoisted_5\n ])\n ]),\n \"body-cell-priority-prepend\": _withCtx(({ row }) => [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).ISSUE,\n color: _unref(getIssuePriorityColor)(row?.priorityData),\n class: \"q-pr-sm\",\n size: \"sm\"\n }, null, 8, [\"name\", \"color\"])\n ]),\n \"body-cell-priority-value\": _withCtx(({ value }) => [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(value), 1)\n ]),\n _: 1\n }, 8, [\"columns\", \"visible-columns\", \"loading\", \"data\", \"no-data\", \"no-matching-data\", \"main-column-label\", \"selection-enabled\", \"row-class\"])\n ], 512), [\n [_vShow, !props.isDisplayingToDoEntities]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./SfxWorkOrderIssueItemAssignment.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxWorkOrderIssueItemAssignment.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, vShow as _vShow, createElementVNode as _createElementVNode, withDirectives as _withDirectives, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport SfxTable from \"src/components/table/SfxTable.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport {\n fetchAttributeCharListData,\n fetchAttributeNumericListData,\n fetchAttributeSelectListData,\n fetchAttributeTemporalListData,\n fetchIssueOnItemListData,\n fetchIssuePriorityListData,\n fetchItemClassListData,\n fetchItemListData,\n fetchItemModelListData,\n getItemClassListData,\n} from \"src/util/functions/entityData\"\nimport {\n getItemTableAttributesColumns,\n sortItemData,\n toItemTableData,\n} from \"src/util/functions/item\"\nimport { getWorkspaceHomeBreadcrumb } from \"src/util/functions/workspace\"\nimport { Breadcrumbs } from \"src/util/types/components/sfxBreadcrumb\"\nimport { RowData, StatusColumnNames, TableColumn } from \"src/util/types/components/sfxTable\"\nimport { Item, ItemTableData } from \"src/util/types/dataModels/item\"\nimport { WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onBeforeMount, PropType, ref, watchEffect } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst statusColumnCount = 3\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxWorkOrderItemAssignment',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n\n entitiesIncluded: {\n type: Array as PropType,\n required: true,\n },\n\n entitiesPerformed: {\n type: Array as PropType,\n required: true,\n },\n\n isDisplayingToDoEntities: {\n type: Boolean,\n },\n\n isReadOnly: {\n type: Boolean,\n },\n},\n setup(__props, { expose: __expose }) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst supportStore = useSupportStore()\nconst searchStore = useSearchStore()\n\nconst breadcrumbs = ref([])\n\nconst itemsAvailableList = ref[]>([])\nconst itemsCompletedList = ref[]>([])\nconst itemsTableAvailableData = computed(() => itemsAvailableList.value)\nconst itemsTableCompletedData = computed(() => itemsCompletedList.value)\nconst noData = ref(MissingEntityType.ITEM_NOT_FOUND)\nconst noMatchingData = ref(MissingEntityType.ITEM_NO_MATCHES)\n\nconst mainColumn = (row: RowData) => row.itemData.designation\nconst uniqueColumn = (row: RowData) => row.itemData.id\nconst mainColumnLabel = ref(t(\"items.table_column_designation_label\"))\n\nconst selectionEnabled = ref(!props.isReadOnly)\nconst selected = ref([])\nconst initialSelected = ref([])\nconst loadingData = ref(true)\n\nconst sfxTableAvailable = ref()\nconst sfxTableCompleted = ref()\nconst filteredAvailableDataCount = computed(() => sfxTableAvailable.value?.filteredDataCount || 0)\nconst filteredCompletedDataCount = computed(() => sfxTableCompleted.value?.filteredDataCount || 0)\n\nconst initialSelectIds = computed(() => initialSelected.value.map((i) => i.itemData.id).sort())\nconst selectIds = computed(() => selected.value.map((i) => i.itemData.id).sort())\n\nconst visibleColumns = ref([\n \"item_id\",\n \"item_class\",\n \"model\",\n \"location_id\",\n \"location_access\",\n \"layout\",\n])\n\nconst itemColumns = computed>(() => {\n const arr = [\n {\n name: \"item_id\",\n switchable: true,\n sortable: true,\n searchable: true,\n label: t(\"items.table_column_item_id_label\"),\n field: (row: ItemTableData) => row.itemData.item_id,\n },\n {\n name: \"item_class\",\n switchable: true,\n sortable: true,\n searchable: false,\n label: t(\"items.table_column_item_class_label\"),\n field: (row: ItemTableData) => row.itemClassData?.designation,\n id: (row: ItemTableData) => row.itemClassData?.id,\n },\n {\n name: \"model\",\n switchable: true,\n sortable: true,\n emptyText: t(\"sfxTable.empty_no_model\"),\n label: t(\"items.table_column_model_label\"),\n field: (row: ItemTableData) => row.itemModelData?.designation,\n id: (row: ItemTableData) => row.itemModelData?.id,\n },\n {\n name: \"location_id\",\n switchable: true,\n sortable: true,\n emptyText: t(\"sfxTable.empty_no_location\"),\n label: t(\"items.table_column_location_id_label\"),\n field: \"\", // TODO: Should display location ID when we have it\n },\n {\n name: \"location_access\",\n switchable: true,\n sortable: true,\n emptyText: t(\"sfxTable.empty_no_location\"),\n label: t(\"items.table_column_location_label\"),\n field: \"\", // TODO: Should display location access when we have it\n },\n {\n name: \"layout\",\n switchable: true,\n sortable: true,\n emptyText: t(\"sfxTable.empty_no_location\"),\n label: t(\"items.table_column_layout_label\"),\n field: \"\", // TODO: Should display layout designation when we have it\n },\n ]\n\n return attributeColumns.value ? [...arr, ...attributeColumns.value] : arr\n})\n\nconst attributeColumns = ref()\n\nconst statusColumnsSort: StatusColumnNames[] = [\"issue\", \"work-order\", \"change-request\"]\n\n// 1. Issue\n// 2. Work Order\n// 3. Change Request\nconst performedRowClass = ref(\"sfx-table__td-status-performed\")\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n searchStore.domain = \"items\"\n supportStore.setFeedbackData(t(\"workOrder.title_work_order_items\"))\n\n try {\n await fetchAPIData()\n await assignItemTableData()\n } catch (fetchError) {\n Log.error({\n message: \"There was an error trying to fetch and populate data for items\",\n error: fetchError,\n })\n } finally {\n loadingData.value = false\n }\n})\n\n//endregion\n\n//region Functions\n\nfunction resetSelection() {\n selected.value = [...initialSelected.value]\n}\n\nasync function fetchAPIData() {\n await fetchItemClassListData()\n await Promise.all([\n fetchItemListData(),\n fetchIssueOnItemListData(),\n fetchIssuePriorityListData(),\n fetchItemModelListData(),\n fetchAttributeCharListData(),\n fetchAttributeNumericListData(),\n fetchAttributeSelectListData(),\n fetchAttributeTemporalListData(),\n ])\n attributeColumns.value = await getItemTableAttributesColumns()\n}\n\nasync function assignItemTableData() {\n const skipIds = props.entitiesPerformed\n .map((i) => i.id)\n .concat(props.entitiesIncluded.map((i) => i.id))\n\n const itemData = await getItemData(props.workOrder?.work_domain, skipIds)\n\n const selectedItems = await Promise.all(props.entitiesIncluded.map((i) => toItemTableData(i)))\n selected.value = selectedItems\n initialSelected.value = [...selectedItems]\n\n itemsAvailableList.value = itemData.concat(selectedItems).sort(sortItemData)\n itemsCompletedList.value = await Promise.all(\n props.entitiesPerformed.map(async (i) => {\n const data = await toItemTableData(i)\n data.preSelectState = true\n return data\n })\n )\n}\n\nasync function getItemData(\n workDomainId: string,\n skipItemIds: string[]\n): Promise[]> {\n const db = await getDB()\n const itemClasses = await getItemClassListData()\n const filteredItemClassIds = itemClasses\n .filter(\n (i) =>\n i.restricted_to_work_domains.length === 0 ||\n i.restricted_to_work_domains.includes(workDomainId)\n )\n .map((i) => i.id)\n\n const itemDocuments = await db.item\n .find({\n selector: {\n $and: [{ item_class: { $in: filteredItemClassIds } }, { id: { $nin: skipItemIds } }],\n },\n })\n .exec()\n\n return await Promise.all(\n itemDocuments.map>>((i) => toItemTableData(i))\n )\n}\n\n//endregion\n\n//region Setup Code\n\nwatchEffect(async () => {\n const count = props.isDisplayingToDoEntities\n ? filteredAvailableDataCount.value\n : filteredCompletedDataCount.value\n const total = props.isDisplayingToDoEntities\n ? itemsTableAvailableData.value.length\n : itemsTableCompletedData.value.length\n\n breadcrumbs.value = [\n await getWorkspaceHomeBreadcrumb(),\n {\n text: t(\"workOrder.title\"),\n link: { name: NamedManagerPath.SELECT_WORK_ORDER },\n highlight: true,\n },\n {\n text: t(\"workOrder.title_simple\"),\n },\n {\n text: t(\"workOrder.title_work_order_items\"),\n },\n { current: count, total, entity: \"item\" },\n ]\n})\n\n__expose({\n resetSelection,\n breadcrumbs,\n initialSelectIds,\n selectIds,\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _withDirectives(_createElementVNode(\"div\", null, [\n _createVNode(SfxTable, {\n ref_key: \"sfxTableAvailable\",\n ref: sfxTableAvailable,\n columns: itemColumns.value,\n \"visible-columns\": visibleColumns.value,\n loading: loadingData.value,\n data: itemsTableAvailableData.value,\n \"no-data\": noData.value,\n \"no-matching-data\": noMatchingData.value,\n \"unique-column\": uniqueColumn,\n \"main-column\": mainColumn,\n \"main-column-label\": mainColumnLabel.value,\n \"selection-enabled\": selectionEnabled.value,\n \"status-columns-sort\": statusColumnsSort,\n \"status-columns-count\": statusColumnCount,\n selected: selected.value,\n \"onUpdate:selected\": _cache[0] || (_cache[0] = ($event: any) => ((selected).value = $event)),\n entity: \"item\"\n }, null, 8, [\"columns\", \"visible-columns\", \"loading\", \"data\", \"no-data\", \"no-matching-data\", \"main-column-label\", \"selection-enabled\", \"selected\"])\n ], 512), [\n [_vShow, props.isDisplayingToDoEntities]\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createVNode(SfxTable, {\n ref_key: \"sfxTableCompleted\",\n ref: sfxTableCompleted,\n columns: itemColumns.value,\n \"visible-columns\": visibleColumns.value,\n loading: loadingData.value,\n data: itemsTableCompletedData.value,\n \"no-data\": noData.value,\n \"no-matching-data\": noMatchingData.value,\n \"unique-column\": uniqueColumn,\n \"main-column\": mainColumn,\n \"main-column-label\": mainColumnLabel.value,\n \"status-columns-sort\": statusColumnsSort,\n \"status-columns-count\": statusColumnCount,\n entity: \"item\",\n \"selection-enabled\": selectionEnabled.value,\n \"enable-pre-selected-mode\": \"\",\n \"row-class\": performedRowClass.value\n }, null, 8, [\"columns\", \"visible-columns\", \"loading\", \"data\", \"no-data\", \"no-matching-data\", \"main-column-label\", \"selection-enabled\", \"row-class\"])\n ], 512), [\n [_vShow, !props.isDisplayingToDoEntities]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./SfxWorkOrderItemAssignment.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxWorkOrderItemAssignment.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-h2 q-px-lg q-py-sm bg-tooltip-and-input-back\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"q-mr-sm text-weight-regular\"\n}\nconst _hoisted_3 = { class: \"text-bold\" }\nconst _hoisted_4 = { class: \"q-pl-lg\" }\nconst _hoisted_5 = { class: \"row items-center q-pb-md q-pt-sm\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"flex gap-md col-3\" }\n\nimport { sanitize } from \"dompurify\"\nimport { ComponentConstructor, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxBreadcrumbs from \"src/components/navigation/SfxBreadcrumbs.vue\"\nimport SfxTopNavigationManager from \"src/components/navigation/SfxTopNavigationManager.vue\"\nimport SfxTableToggle from \"src/components/table/SfxTableToggle.vue\"\nimport SfxWorkOrderIssueItemAssignment from \"src/pages/manager/overlay/SfxWorkOrderIssueItemAssignment.vue\"\nimport SfxWorkOrderItemAssignment from \"src/pages/manager/overlay/SfxWorkOrderItemAssignment.vue\"\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { MANAGER_MAIN_MENU } from \"src/util/constants/configurations\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { confirmWorkOrderEntitiesModification, showFeedback } from \"src/util/functions/dialogs\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport { getWorkDomainWorkspaceData } from \"src/util/functions/workDomain\"\nimport { Breadcrumbs } from \"src/util/types/components/sfxBreadcrumb\"\nimport { ProgressIndicatorState } from \"src/util/types/components/sfxProgressIndicator\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { Issue } from \"src/util/types/dataModels/issue\"\nimport { Item } from \"src/util/types/dataModels/item\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport { WorkOrderCorrectiveItem, WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\nimport { computed, onBeforeMount, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxWorkOrderEntityAssignment',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n\n /**\n * If the progressState is 'closed' or 'complete_closed' only show `entitiesPerformed`.\n */\n progressState: {\n type: String as PropType,\n required: true,\n },\n\n entitiesIncluded: {\n type: Array as PropType,\n required: true,\n },\n\n entitiesPerformed: {\n type: Array as PropType,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\nconst menuContent = MANAGER_MAIN_MENU\n\nconst title = computed(() => props.workOrder?.designation)\nconst titleReference = computed(() => props.workOrder?.reference)\nconst breadcrumbs = computed(\n () => workOrderEntityAssignmentRef.value?.breadcrumbs || []\n)\n\nconst topNavigationContainer = ref(null)\n\nconst contentStyle = computed(() => {\n const topNavigationHeight = topNavigationContainer.value?.offsetHeight || 0\n return { height: `calc(100% - ${topNavigationHeight}px)` }\n})\n\nconst quickActions = [ContextAction.HELP, ContextAction.FEEDBACK]\n\nconst btnResetLabel = t(\"sfxButtons.btn_reset_selection\")\nconst btnSaveLabel = t(\"sfxButtons.btn_save_selection\")\nconst isDisplayingToDoEntities = ref(props.progressState !== \"complete_closed\")\nconst isReadOnly = ref([\"complete_closed\", \"closed\"].includes(props.progressState))\n\nconst workDomain = ref()\nconst restrictedLabel = computed(() =>\n t(\"workOrder.restricted\", { designation: sanitize(workDomain.value?.designation || \"\") })\n)\n\nconst performedCount = computed(() => props.entitiesPerformed?.length)\n\nconst initialSelectIds = computed(\n () => workOrderEntityAssignmentRef.value?.initialSelectIds || []\n)\nconst selectIds = computed(() => workOrderEntityAssignmentRef.value?.selectIds || [])\nconst selectionSame = computed(\n () => initialSelectIds.value.toString() === selectIds.value.toString()\n)\n\nconst workOrderEntityComponent = computed(() => {\n let component: ComponentConstructor | undefined\n\n if (props.entity === \"item\") {\n component = SfxWorkOrderItemAssignment\n } else if (props.entity === \"issue\") {\n component = SfxWorkOrderIssueItemAssignment\n }\n\n return component\n})\n\nconst workOrderEntityAssignmentRef = ref()\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n workDomain.value = await getWorkDomainWorkspaceData(props.workOrder?.work_domain)\n})\n\n//endregion\n\n//region Functions\n\nasync function handleContextSelect(contextMenuItem: ContextMenuItem) {\n if (contextMenuItem.action === ContextAction.HELP) {\n return helpTourNotImplemented(\"WorkOrderEntityAssignment\")\n } else if (contextMenuItem.action === ContextAction.FEEDBACK) {\n return showFeedback()\n }\n}\n\n//endregion\n\n//region Setup Code\n\nfunction resetSelection() {\n workOrderEntityAssignmentRef.value?.resetSelection()\n}\n\nasync function saveSelection() {\n const entitiesRemoved = initialSelectIds.value.filter((i) => !selectIds.value.includes(i)).length\n const entitiesAdded = selectIds.value.filter((i) => !initialSelectIds.value.includes(i)).length\n const entitiesToDo = selectIds.value.length\n const totalEntities = selectIds.value.length + performedCount.value\n\n const userConfirmed = await confirmWorkOrderEntitiesModification(\n entitiesRemoved,\n entitiesAdded,\n entitiesToDo,\n totalEntities,\n props.entity\n )\n\n if (userConfirmed) {\n const totalEntitiesIds = selectIds.value.concat(props.entitiesPerformed.map((i) => i.id))\n onDialogOK(totalEntitiesIds)\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"topNavigationContainer\",\n ref: topNavigationContainer\n }, [\n _createVNode(SfxTopNavigationManager, {\n \"main-menu-content\": _unref(menuContent),\n \"disable-extended-menu\": \"\",\n \"disable-main-menu\": \"\",\n \"disable-search-bar\": \"\",\n \"disable-context-menu\": \"\",\n \"disable-notifications\": \"\",\n \"disable-todo-icon\": \"\",\n \"disable-user-display\": \"\",\n onContextSelect: handleContextSelect,\n \"quick-actions\": quickActions\n }, null, 8, [\"main-menu-content\"]),\n _createElementVNode(\"div\", _hoisted_1, [\n (titleReference.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(titleReference.value), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(title.value), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(SfxBreadcrumbs, {\n breadcrumbs: breadcrumbs.value,\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"is-dialog\": \"\",\n onClose: _cache[0] || (_cache[0] = ($event: any) => (_unref(onDialogCancel)())),\n class: \"bg-tooltip-and-input-back\"\n }, null, 8, [\"breadcrumbs\", \"navigation-action\"])\n ])\n ], 512),\n _createVNode(_component_q_card_section, {\n class: \"bg-tooltip-and-input-back scroll\",\n style: _normalizeStyle(contentStyle.value)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", {\n class: \"text-subtitle2 col-3\",\n innerHTML: restrictedLabel.value\n }, null, 8, _hoisted_6),\n _createVNode(SfxTableToggle, {\n class: \"col-6 justify-center\",\n modelValue: isDisplayingToDoEntities.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isDisplayingToDoEntities).value = $event)),\n disable: props.progressState === 'complete_closed',\n entity: props.entity,\n \"to-do-count\": selectIds.value.length,\n \"performed-count\": performedCount.value\n }, null, 8, [\"modelValue\", \"disable\", \"entity\", \"to-do-count\", \"performed-count\"]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(SfxBtnOutline, {\n class: \"col\",\n size: \"16px\",\n padding: \"10px\",\n disable: selectionSame.value,\n onClick: resetSelection\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(btnResetLabel)), 1)\n ]),\n _: 1\n }, 8, [\"disable\"]),\n _createVNode(SfxBtn, {\n class: \"col\",\n size: \"16px\",\n padding: \"10px\",\n disable: selectionSame.value,\n onClick: saveSelection\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(btnSaveLabel)), 1)\n ]),\n _: 1\n }, 8, [\"disable\"])\n ])\n ]),\n (_openBlock(), _createBlock(_resolveDynamicComponent(workOrderEntityComponent.value), {\n ref_key: \"workOrderEntityAssignmentRef\",\n ref: workOrderEntityAssignmentRef,\n \"work-order\": props.workOrder,\n \"entities-included\": props.entitiesIncluded,\n \"entities-performed\": props.entitiesPerformed,\n \"is-read-only\": isReadOnly.value,\n \"is-displaying-to-do-entities\": isDisplayingToDoEntities.value\n }, null, 8, [\"work-order\", \"entities-included\", \"entities-performed\", \"is-read-only\", \"is-displaying-to-do-entities\"]))\n ]),\n _: 1\n }, 8, [\"style\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./SfxWorkOrderEntityAssignment.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxWorkOrderEntityAssignment.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-gutter-y-sm\" }\n\nimport { AxiosError } from \"axios\"\nimport { Subscription } from \"rxjs\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxInputPassword from \"src/components/input/SfxInputPassword.vue\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { hashPassword } from \"src/util/functions/hashing\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { getPasswordRequirements, isIncorrectPassword } from \"src/util/functions/user\"\nimport { patchChangePassword } from \"src/util/http/springboard/user\"\nimport { computed, onMounted, onUnmounted, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ChangePasswordOverlay',\n emits: [\"dialog-ok\"],\n setup(__props, { emit: __emit }) {\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst authStore = useAuthStore()\nconst topNavigationStore = useTopNavigationStore()\nconst currentPassword = ref(\"\")\nconst newPassword = ref(\"\")\nconst repeatNewPassword = ref(\"\")\nconst errorMessage = t(\"sfxDialogChangePassword.password_mismatch\")\nlet subscription: Subscription\n\nconst validDateRule = computed(() => getPasswordRequirements(currentPassword.value))\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n subscription = topNavigationStore.overlayContextActionClicked.subscribe((contextAction) => {\n if (\n contextAction.source === ContextSource.CHANGE_PASSWORD &&\n contextAction.item.action === ContextAction.HELP\n ) {\n return helpTourNotImplemented(\"ChangePasswordOverlay\")\n }\n })\n})\n\nonUnmounted(() => {\n subscription?.unsubscribe()\n})\n\n//endregion\n\n//region Functions\n\nasync function setNewPassword() {\n if (newPassword.value === repeatNewPassword.value) {\n try {\n const hashResult = await hashPassword(newPassword.value)\n if (hashResult) {\n authStore.setNewPasswordHashed(hashResult)\n } else {\n Log.error({ message: \"Failed to hash password.\" })\n }\n } catch (error) {\n Log.error({ message: \"Failed to set new password.\", error })\n }\n }\n}\n\nasync function updatePassword() {\n try {\n await patchChangePassword(\n {},\n {\n current_password: currentPassword.value,\n password: newPassword.value,\n }\n )\n\n showSuccessNotification(t(\"sfxDialogChangePassword.password_changed\"))\n emit(\"dialog-ok\")\n } catch (error: unknown) {\n if (error instanceof AxiosError && isIncorrectPassword(error)) {\n return showErrorNotification(t(\"sfxDialogChangePassword.password_incorrect\"))\n }\n showErrorNotification(t(\"sfxErrorMsg.error_change_password\"))\n Log.error({ message: \"An error occurred while trying to update the password\", error })\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n\n return (_openBlock(), _createBlock(_component_q_form, {\n onSubmit: updatePassword,\n class: \"fit sfx-password-change-form\",\n greedy: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", null, [\n _createVNode(SfxInput, {\n \"model-value\": '',\n class: \"hidden\",\n autocomplete: \"email\"\n }),\n _createVNode(_component_q_card_section, { class: \"text-caption text-italic text-field-label q-px-none\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"sfxDialogChangePassword.password_requirements\")), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(SfxInputPassword, {\n modelValue: currentPassword.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_current_password'),\n autocomplete: \"current-password\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInputPassword, {\n modelValue: newPassword.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((newPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_new_password'),\n \"lazy-rules\": \"\",\n rules: validDateRule.value,\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"label\", \"rules\"]),\n _createVNode(SfxInputPassword, {\n modelValue: repeatNewPassword.value,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((repeatNewPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangePassword.input_repetition'),\n \"lazy-rules\": \"\",\n rules: [(value) => value === newPassword.value || _unref(errorMessage)],\n \"error-message\": _unref(errorMessage),\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"label\", \"rules\", \"error-message\"])\n ])\n ]),\n _createVNode(SfxBtn, {\n class: \"q-mt-md sfx-password-change-button\",\n label: _ctx.$t('sfxButtons.btn_change_password'),\n disable: !currentPassword.value || !newPassword.value || !repeatNewPassword.value,\n type: \"submit\",\n onClick: setNewPassword\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./ChangePasswordOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ChangePasswordOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QForm,QCardSection});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { Subscription } from \"rxjs\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxInputPassword from \"src/components/input/SfxInputPassword.vue\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { hashUnlockKey } from \"src/util/functions/hashing\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { onMounted, onUnmounted, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ChangeUnlockKeyOverlay',\n emits: [\"dialog-ok\"],\n setup(__props, { emit: __emit }) {\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst authStore = useAuthStore()\nconst topNavigationStore = useTopNavigationStore()\nconst currentPassword = ref(\"\")\nconst unlockKey = ref(\"\")\nlet subscription: Subscription\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n subscription = topNavigationStore.overlayContextActionClicked.subscribe((contextAction) => {\n if (\n contextAction.source === ContextSource.CHANGE_UNLOCK_KEY &&\n contextAction.item.action === ContextAction.HELP\n ) {\n return helpTourNotImplemented(\"ChangeUnlockKeyOverlay\")\n }\n })\n})\n\nonUnmounted(() => {\n subscription?.unsubscribe()\n})\n\n//endregion\n\n//region Functions\n\nasync function setNewUnlockKey() {\n try {\n const hashResult = await hashUnlockKey(unlockKey.value)\n if (hashResult) {\n authStore.setUnlockKeyHashed(hashResult)\n\n showSuccessNotification(t(\"sfxDialogChangeUnlockKey.msg_unlock_key_changed\"))\n emit(\"dialog-ok\")\n } else {\n showErrorNotification(t(\"sfxErrorMsg.error_change_unlock_key\"))\n Log.error({ message: \"Failed to hash Unlock key.\" })\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_change_unlock_key\"))\n Log.error({ message: \"Failed to set new Unlock key.\", error })\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_form = _resolveComponent(\"q-form\")!\n\n return (_openBlock(), _createBlock(_component_q_form, {\n onSubmit: setNewUnlockKey,\n class: \"fit sfx-unlock-key-change-form\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", null, [\n _createVNode(SfxInput, {\n \"model-value\": '',\n class: \"hidden\",\n autocomplete: \"email\"\n }),\n _createVNode(SfxInputPassword, {\n modelValue: currentPassword.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentPassword).value = $event)),\n label: _ctx.$t('sfxDialogChangeUnlockKey.input_current_password'),\n class: \"q-pb-lg\",\n autocomplete: \"current-password\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInputPassword, {\n modelValue: unlockKey.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((unlockKey).value = $event)),\n label: _ctx.$t('sfxDialogChangeUnlockKey.input_unlock_key'),\n autocomplete: \"new-key\"\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _createVNode(SfxBtn, {\n class: \"q-mt-md sfx-unlock-key-change-button\",\n label: _ctx.$t('sfxButtons.btn_unlock_key'),\n disable: !currentPassword.value || !unlockKey.value,\n type: \"submit\"\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./ChangeUnlockKeyOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ChangeUnlockKeyOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QForm});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-settings q-px-sm\" }\nconst _hoisted_2 = { class: \"user-settings__heading\" }\nconst _hoisted_3 = { class: \"user-settings__heading\" }\nconst _hoisted_4 = { class: \"user-settings__heading\" }\n\nimport { is } from \"quasar\"\nimport { Subscription } from \"rxjs\"\nimport SfxFormSubmit from \"src/components/special/SfxFormSubmit.vue\"\nimport SfxToggleSettings from \"src/components/toggle/SfxToggleSettings.vue\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { DarkModeOption, WorkActionOption } from \"src/util/enums/configuration\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport { showEasterEggNotification } from \"src/util/functions/notifications\"\nimport { UserCurrent } from \"src/util/types/dataModels/user\"\nimport { computed, onMounted, onUnmounted, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Variables\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ConfigurationsOverlay',\n setup(__props) {\n\nconst { t } = useI18n()\nconst configurationStore = useConfigurationStore()\nconst topNavigationStore = useTopNavigationStore()\nconst userStore = useUserStore()\n\nlet subscription: Subscription\n\n// Get and set current values of all toggles\n\nconst originalConfig = computed(() => configurationStore.getCurrentConfiguration)\nconst currentConfig = ref({ ...originalConfig.value })\nconst isEqualToOriginal = computed(() => is.deepEqual(originalConfig.value, currentConfig.value))\n\n//endregion\n\n//region Translated Variables\n\n// Sections titles\n\nconst firstSectionTitle = t(\"userSettings.title_workflow\")\nconst secondSectionTitle = t(\"userSettings.title_data_transfer\")\nconst thirdSectionTitle = t(\"userSettings.title_other\")\n\n// Main description of all toggles\n\nconst workOrdersDescription = t(\"userSettings.work_orders\")\nconst issuesDescription = t(\"userSettings.issues\")\nconst performedWorkDescription = t(\"userSettings.performed_work\")\nconst skipListDescription = t(\"userSettings.skip_list\")\nconst locationSelectItemDescription = t(\"userSettings.location_select\")\nconst internetDescription = t(\"userSettings.internet_connectivity\")\nconst prioritizeDataDescription = t(\"userSettings.prioritize_data\")\nconst downloadAllDescription = t(\"userSettings.download_all_data\")\nconst notificationsDescription = t(\"userSettings.notifications\")\nconst darkModeDescription = t(\"userSettings.dark_mode\")\nconst tutorialDescription = t(\"userSettings.tutorial\")\n\n// Secondary description (blue label) of toggles\n\nconst trinaryTrueLabel = t(\"userSettings.trinary_true_label\")\nconst trinaryFalseLabel = t(\"userSettings.trinary_false_label\")\nconst trinaryIndeterminateLabel = t(\"userSettings.trinary_indeterminate_label\")\nconst locationSelectItemTrueLabel = t(\"userSettings.location_select_true_label\")\nconst locationSelectItemFalseLabel = t(\"userSettings.location_select_false_label\")\nconst internetTrueLabel = t(\"userSettings.internet_true_label\")\nconst internetFalseLabel = t(\"userSettings.internet_false_label\")\nconst darkModeTrueLabel = t(\"userSettings.dark_mode_true_label\")\nconst darkModeFalseLabel = t(\"userSettings.dark_mode_false_label\")\nconst darkModeIndeterminateLabel = t(\"userSettings.dark_mode_indeterminate_label\")\nconst easterEggsTrueLabel = t(\"userSettings.easterEggs_true_label\")\nconst easterEggsFalseLabel = t(\"userSettings.easterEggs_false_label\")\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n subscription = topNavigationStore.overlayContextActionClicked.subscribe((contextAction) => {\n if (\n contextAction.source === ContextSource.CONFIGURATIONS &&\n contextAction.item.action === ContextAction.HELP\n ) {\n return helpTourNotImplemented(\"ConfigurationsOverlay\")\n }\n })\n})\n\nonUnmounted(() => {\n subscription?.unsubscribe()\n})\n\n//endregion\n\n//region Functions\n\nfunction discardData() {\n currentConfig.value = { ...originalConfig.value }\n}\n\nasync function submitData() {\n if (\n originalConfig.value.easterEggs !== currentConfig.value.easterEggs &&\n currentConfig.value.easterEggs\n ) {\n showEasterEggNotification(t(\"userSettings.easterEgg_notification\"))\n }\n const userData: Partial = { settings: { data: currentConfig.value } }\n await userStore.uploadUserData(userData)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(firstSectionTitle)), 1),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.workOrderDefaultAction,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentConfig.value.workOrderDefaultAction) = $event)),\n description: _unref(workOrdersDescription),\n \"true-value\": _unref(WorkActionOption).PERFORM,\n \"true-label\": _unref(trinaryTrueLabel),\n \"false-value\": _unref(WorkActionOption).OPEN,\n \"false-label\": _unref(trinaryFalseLabel),\n \"indeterminate-value\": _unref(WorkActionOption).CHOOSE,\n \"indeterminate-label\": _unref(trinaryIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.issueDefaultAction,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((currentConfig.value.issueDefaultAction) = $event)),\n description: _unref(issuesDescription),\n \"true-value\": _unref(WorkActionOption).PERFORM,\n \"true-label\": _unref(trinaryTrueLabel),\n \"false-value\": _unref(WorkActionOption).OPEN,\n \"false-label\": _unref(trinaryFalseLabel),\n \"indeterminate-value\": _unref(WorkActionOption).CHOOSE,\n \"indeterminate-label\": _unref(trinaryIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.autoCompleteWork,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((currentConfig.value.autoCompleteWork) = $event)),\n description: _unref(performedWorkDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.skipListWithSingleItem,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((currentConfig.value.skipListWithSingleItem) = $event)),\n description: _unref(skipListDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.locationSelectItem,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((currentConfig.value.locationSelectItem) = $event)),\n description: _unref(locationSelectItemDescription),\n \"true-label\": _unref(locationSelectItemTrueLabel),\n \"false-label\": _unref(locationSelectItemFalseLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-label\", \"false-label\"]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(secondSectionTitle)), 1),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.internetConnectivity,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((currentConfig.value.internetConnectivity) = $event)),\n description: _unref(internetDescription),\n \"true-label\": _unref(internetTrueLabel),\n \"false-label\": _unref(internetFalseLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-label\", \"false-label\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n modelValue: currentConfig.value.prioritizeData,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((currentConfig.value.prioritizeData) = $event)),\n description: _unref(prioritizeDataDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(thirdSectionTitle)), 1),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.downloadDataOnStartUp,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((currentConfig.value.downloadDataOnStartUp) = $event)),\n description: _unref(downloadAllDescription)\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.animateNotification,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => ((currentConfig.value.animateNotification) = $event)),\n description: _unref(notificationsDescription)\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n html: \"\",\n trinary: \"\",\n modelValue: currentConfig.value.darkMode,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => ((currentConfig.value.darkMode) = $event)),\n description: _unref(darkModeDescription),\n \"true-value\": _unref(DarkModeOption).ON,\n \"true-label\": _unref(darkModeTrueLabel),\n \"false-value\": _unref(DarkModeOption).OFF,\n \"false-label\": _unref(darkModeFalseLabel),\n \"indeterminate-value\": _unref(DarkModeOption).SYSTEM,\n \"indeterminate-label\": _unref(darkModeIndeterminateLabel),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\", \"true-value\", \"true-label\", \"false-value\", \"false-label\", \"indeterminate-value\", \"indeterminate-label\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.tutorial,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = ($event: any) => ((currentConfig.value.tutorial) = $event)),\n description: _unref(tutorialDescription),\n disable: \"\"\n }, null, 8, [\"modelValue\", \"description\"]),\n _createVNode(SfxToggleSettings, {\n modelValue: currentConfig.value.easterEggs,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => ((currentConfig.value.easterEggs) = $event)),\n description: currentConfig.value.easterEggs ? _unref(easterEggsTrueLabel) : _unref(easterEggsFalseLabel)\n }, null, 8, [\"modelValue\", \"description\"]),\n (!isEqualToOriginal.value)\n ? (_openBlock(), _createBlock(SfxFormSubmit, {\n key: 0,\n overlay: \"\",\n onDiscard: discardData,\n onSubmit: submitData\n }))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./ConfigurationsOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ConfigurationsOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","export enum ScanType {\n CAMERA = \"Camera\",\n NFC = \"NFC\",\n EXTERNAL = \"External\",\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, createBlock as _createBlock, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-white text-overline\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"row justify-center items-center full-width\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"q-pa-md fit flex flex-center\"\n}\nconst _hoisted_6 = {\n key: 0,\n class: \"bg-white fit rounded-borders flex flex-center\"\n}\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"row justify-evenly text-center q-pt-lg\" }\nconst _hoisted_9 = { class: \"q-gutter-y-md\" }\nconst _hoisted_10 = { class: \"q-gutter-y-md\" }\n\nimport { BarcodeFormat } from \"@zxing/browser\"\nimport { Result } from \"@zxing/library\"\nimport { Platform, useQuasar } from \"quasar\"\nimport { DeepReadonlyObject } from \"rxdb\"\nimport { Subscription } from \"rxjs\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxScannerBarcode from \"src/components/scanners/SfxScannerBarcode.vue\"\nimport SfxScannerKeyboard from \"src/components/scanners/SfxScannerKeyboard.vue\"\nimport SfxScannerNfc from \"src/components/scanners/SfxScannerNfc.vue\"\nimport SfxSeparator from \"src/components/special/SfxSeparator.vue\"\nimport SfxToggleSettings from \"src/components/toggle/SfxToggleSettings.vue\"\nimport { AppBaseDB, getDB } from \"src/db/databases\"\nimport router from \"src/router\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { ContextAction } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedPath } from \"src/util/enums/namedPaths\"\nimport { ScanType } from \"src/util/enums/scanType\"\nimport {\n alreadyAssociatedIdentifierDialog,\n unknownIdentifierDialog,\n} from \"src/util/functions/dialogs\"\nimport { helpTourNotImplemented } from \"src/util/functions/helpTour\"\nimport {\n getIdentifierAssociationType,\n getIdentifierEntityName,\n} from \"src/util/functions/identifier\"\nimport {\n showErrorNotification,\n showNotImplementedNotification,\n showSuccessNotification,\n} from \"src/util/functions/notifications\"\nimport {\n Identifier,\n IdentifierActionReturn,\n IdentifierAddTarget,\n IdentifierScan,\n IdentifierType,\n} from \"src/util/types/dataModels/identifier\"\nimport { computed, onMounted, onUnmounted, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst nfcScan = \"NFC\"\nconst qrScan = \"QR\"\nconst CAMERA_TURN_OFF_DELAY = 500 // ms\nconst textStyles = \"flex-grow: 1; flex-basis: 0\"\n\n//endregion\n\n//region Lifecycle\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'IdentifyOverlay',\n props: {\n newIdentifier: {\n type: Object as PropType,\n },\n},\n emits: [\"dialog-ok\", \"dialog-hide\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst topNavigationStore = useTopNavigationStore()\nlet subscription: Subscription\n\nconst $q = useQuasar()\nconst { t } = useI18n()\n\nconst scanTypeToggle = ref(nfcScan)\nconst nfcEnabled = ref(true)\nconst cameraActiveStatus = ref(false)\nconst pauseScanning = ref(false)\n\nlet db: AppBaseDB\n\nconst aboveBarcode = ref()\nconst belowBarcode = ref()\n\nconst bluetoothClass = computed(() => ($q.screen.lt.md ? \"q-py-sm\" : \"q-py-md\"))\n\nconst barcodeStyle = computed(() => {\n const aboveBarcodeHeight = aboveBarcode.value?.offsetHeight || 0\n const belowBarcodeHeight = belowBarcode.value?.offsetHeight || 0\n\n // header + padding and margins + things around the barcode\n const magicNumber = 124 + aboveBarcodeHeight + belowBarcodeHeight\n\n return `height: ${$q.screen.height - magicNumber}px`\n})\n\nonMounted(async () => {\n db = await getDB()\n\n subscription = topNavigationStore.overlayContextActionClicked.subscribe((contextAction) => {\n if (\n contextAction.source === ContextSource.IDENTIFY &&\n contextAction.item.action === ContextAction.HELP\n ) {\n return helpTourNotImplemented(\"IdentifyOverlay\")\n }\n })\n})\n\nonUnmounted(() => {\n subscription?.unsubscribe()\n})\n\n//endregion\n\n//region Functions\n\nasync function getDataFromScan(value: Result | string, type: ScanType) {\n // We have \"paused\" the scanning, so do nothing\n if (pauseScanning.value) return\n\n let fixedValue: string\n let fixedType: IdentifierType\n\n if (type === ScanType.CAMERA) {\n value = value as Result\n fixedValue = value.getText()\n\n // If it is QR, the assign it as such, otherwise assume it is of type barcode\n fixedType = value.getBarcodeFormat() === BarcodeFormat.QR_CODE ? \"qr\" : \"barcode\"\n } else if (type === ScanType.NFC) {\n fixedType = \"rfid\"\n fixedValue = value as string\n } else {\n // This is for handling the external keyboard reader\n // TODO: Can we be sure that this is going to be proper data?\n fixedType = \"barcode\"\n fixedValue = value as string\n }\n\n const scanData: IdentifierScan = { type: fixedType, value: fixedValue }\n\n return props.newIdentifier\n ? associateIdentifier(scanData, props.newIdentifier)\n : goToIdentifier(scanData)\n}\n\nasync function associateIdentifier(\n scanData: IdentifierScan,\n identifierAddSource: IdentifierAddTarget\n) {\n pauseScanning.value = true\n let identifierAddType = identifierAddSource.identifierAddType\n\n const foundIdentifier = await db.identifier.getScannedIdentifier(scanData.value, scanData.type)\n\n if (foundIdentifier) {\n const canChange = await canChangeAlreadyExistingIdentifier(foundIdentifier, identifierAddSource)\n\n pauseScanning.value = false\n\n // User cancelled\n if (!canChange) return\n\n identifierAddType = \"ASSOCIATION_CHANGE\"\n }\n\n const returnData: IdentifierActionReturn = {\n action: identifierAddType,\n data: scanData,\n oldAssociation: foundIdentifier,\n }\n\n pauseScanning.value = false\n\n // This will close the dialog\n emit(\"dialog-ok\", returnData)\n}\n\nasync function canChangeAlreadyExistingIdentifier(\n foundIdentifier: Identifier,\n identifierAddSource: IdentifierAddTarget\n): Promise {\n // We have scanned data that belongs to this item\n if (foundIdentifier[identifierAddSource.associationType] === identifierAddSource.entityId) {\n showSuccessNotification(t(\"identifyOverlay.identify_same_entity\"))\n return false\n } else {\n const oldEntityType = getIdentifierAssociationType(foundIdentifier)\n const oldEntityName = (await getIdentifierEntityName(foundIdentifier)) || \"\"\n const canChange = await alreadyAssociatedIdentifierDialog(\n oldEntityType,\n oldEntityName,\n identifierAddSource.associationType,\n identifierAddSource.entityName\n )\n\n return canChange || false\n }\n}\n\nasync function goToIdentifier(scanData: IdentifierScan) {\n const foundIdentifier = await db.identifier.getScannedIdentifier(scanData.value, scanData.type)\n\n return foundIdentifier\n ? await scanDataRouting(foundIdentifier, scanData)\n : await unknownIdentifierScanned()\n}\n\nasync function scanDataRouting(\n identifier: DeepReadonlyObject,\n scanData: IdentifierScan\n) {\n if (identifier.item) {\n await router.push({ name: NamedPath.ITEM, params: { itemId: identifier.item } })\n } else if (identifier.area) {\n await router.push({ name: NamedPath.AREA, params: { areaId: identifier.area } })\n } else if (identifier.location) {\n await router.push({ name: NamedPath.LOCATION, params: { locationId: identifier.location } })\n } else {\n showErrorNotification(t(\"identifyOverlay.error_routing\"))\n\n Log.error({\n message: \"Identify without any entity association found\",\n data: { scanData: JSON.stringify(scanData) },\n })\n }\n\n // Make sure to close this dialog\n emit(\"dialog-hide\")\n}\n\nasync function unknownIdentifierScanned() {\n pauseScanning.value = true\n await unknownIdentifierDialog()\n pauseScanning.value = false\n}\n\nfunction setNfcEnabled(nfcStatus: boolean) {\n nfcEnabled.value = nfcStatus\n}\n\nfunction cameraIsOff() {\n // We need to wait for a bit since the camera is still not released,\n // and on some devices we cannot use both NFC and camera at once.\n setTimeout(() => {\n if (scanTypeToggle.value === nfcScan) {\n cameraActiveStatus.value = false\n }\n }, CAMERA_TURN_OFF_DELAY)\n}\n\nasync function goToItems() {\n await router.push({ name: NamedPath.SELECT_ITEM })\n emit(\"dialog-hide\")\n}\n\nasync function goToAreas() {\n showNotImplementedNotification()\n\n // TODO: Uncomment when we have Areas\n // await router.push({ name: NamedPath.SELECT_AREA })\n // emit(\"dialog-hide\")\n}\n\n// endregion\n\n//region Setup Code\n\nwatch(\n () => scanTypeToggle.value,\n async (scanValNew) => {\n if (scanValNew === qrScan) {\n cameraActiveStatus.value = true\n }\n }\n)\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"column justify-center items-center\",\n ref_key: \"aboveBarcode\",\n ref: aboveBarcode\n }, [\n (!props.newIdentifier)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(_ctx.$t(\"identifyOverlay.code_scan\")), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(\"identifyOverlay.identifier_scan\")), 1)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", {\n style: textStyles,\n class: \"text-right\"\n }, _toDisplayString(_ctx.$t(\"identifyOverlay.nfc\")), 1),\n _createVNode(SfxToggleSettings, {\n modelValue: scanTypeToggle.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((scanTypeToggle).value = $event)),\n \"true-value\": qrScan,\n \"false-value\": nfcScan\n }, null, 8, [\"modelValue\"]),\n _createElementVNode(\"span\", { style: textStyles }, _toDisplayString(_ctx.$t(\"identifyOverlay.qr\")), 1)\n ])\n ], 512),\n _createElementVNode(\"div\", {\n style: _normalizeStyle([barcodeStyle.value, {\"min-height\":\"200px\"}])\n }, [\n (scanTypeToggle.value === nfcScan && !cameraActiveStatus.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (nfcEnabled.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).NFC,\n class: \"text-fun-label-and-icon\",\n size: \"150px\"\n }, null, 8, [\"name\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(Platform).is.capacitor)\n ? (_openBlock(), _createBlock(SfxScannerNfc, {\n key: 1,\n onNfcEnabled: setNfcEnabled,\n onPassData: _cache[1] || (_cache[1] = (value) => getDataFromScan(value, _unref(ScanType).NFC))\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : (scanTypeToggle.value === qrScan)\n ? (_openBlock(), _createBlock(SfxScannerBarcode, {\n key: 1,\n onDecode: _cache[2] || (_cache[2] = (value) => getDataFromScan(value, _unref(ScanType).CAMERA)),\n onCameraStop: cameraIsOff\n }))\n : _createCommentVNode(\"\", true)\n ], 4),\n _createVNode(SfxScannerKeyboard, {\n onRead: _cache[3] || (_cache[3] = (value) => getDataFromScan(value, _unref(ScanType).EXTERNAL))\n }),\n _createElementVNode(\"div\", {\n ref_key: \"belowBarcode\",\n ref: belowBarcode\n }, [\n _createVNode(SfxSeparator, {\n dimmed: \"\",\n \"text-white\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"identifyOverlay.or\")), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"row justify-center items-center\", bluetoothClass.value])\n }, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).BLUETOOTH,\n class: \"q-px-sm\",\n size: \"xs\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"identifyOverlay.bluetooth_scan\")), 1)\n ], 2),\n (!props.newIdentifier)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(SfxSeparator, {\n dimmed: \"\",\n \"text-white\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"identifyOverlay.or\")), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).ITEMS,\n class: \"bg-white\",\n onClick: goToItems\n }, null, 8, [\"icon\"]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"identifyOverlay.find_item\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).AREAS,\n class: \"bg-white\",\n onClick: goToAreas,\n disable: \"\"\n }, null, 8, [\"icon\"]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"identifyOverlay.find_area\")), 1)\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 512)\n ]))\n}\n}\n\n})","import script from \"./IdentifyOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./IdentifyOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, createTextVNode as _createTextVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"text-h6 q-my-md\" }\nconst _hoisted_3 = { class: \"text-body1\" }\n\nimport { sanitize } from \"dompurify\"\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxImageUploader from \"src/components/images/SfxImageUploader.vue\"\nimport SfxTextareaTitled from \"src/components/input/SfxTextareaTitled.vue\"\nimport SfxIssueAdditionalRequirements from \"src/components/issue/SfxIssueAdditionalRequirements.vue\"\nimport SfxIssueBase from \"src/components/issue/SfxIssueBase.vue\"\nimport SfxIssueCorrectiveAction from \"src/components/issue/SfxIssueCorrectiveAction.vue\"\nimport SfxIssueTimeRequirements from \"src/components/issue/SfxIssueTimeRequirements.vue\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport SfxPriorityLabel from \"src/components/priority-label/SfxPriorityLabel.vue\"\nimport SfxSelect from \"src/components/select/SfxSelect.vue\"\nimport SfxEntityReference from \"src/components/special/SfxEntityReference.vue\"\nimport SfxSeparator from \"src/components/special/SfxSeparator.vue\"\nimport { getChangesDB, getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NotificationActionMessage } from \"src/util/enums/notifications\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { uploadImages } from \"src/util/functions/attachments\"\nimport {\n confirmationDialog,\n issueListDialog,\n unsavedChangesDialog,\n} from \"src/util/functions/dialogs\"\nimport {\n getIssueOnItemListData,\n getIssuePriorityListData,\n getWorkDomainWorkspaceListData,\n} from \"src/util/functions/entityData\"\nimport { getHighestPriorityFromIssueList, getIssueCardData } from \"src/util/functions/issues\"\nimport { getItemData } from \"src/util/functions/item\"\nimport { numberToPriorityClass } from \"src/util/functions/misc\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { filterInvalidWorkDomains } from \"src/util/functions/performedWork\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { saveUnsubmittedAttachments } from \"src/util/functions/unsubmittedData\"\nimport { postIssuesOnItem, postIssuesOnItemAction } from \"src/util/http/csi/issues\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport {\n Issue,\n IssueEntity,\n IssuesOnItem,\n IssuesOnItemAction,\n} from \"src/util/types/dataModels/issue\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { UnsubmittedWorkIssue } from \"src/util/types/dataModels/unsubmittedWork\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { computed, onMounted, PropType, ref, shallowRef, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'IssueCreateOverlay',\n props: {\n issueEntity: {\n type: Object as PropType,\n required: true,\n },\n\n unsubmittedWorkId: {\n type: String,\n default: undefined,\n },\n},\n emits: [...useDialogPluginComponent.emits],\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst { dialogRef, onDialogCancel, onDialogHide, onDialogOK } = useDialogPluginComponent()\nconst cacheStore = useCacheStore()\n\nconst topNavigationContainer = ref(null)\n\nconst pageSubtitle = t(\"issueCreateOverlay.subtitle\", {\n designation: sanitize(props.issueEntity.designation),\n})\nconst existingIssuesLabel = t(\"issueCreateOverlay.entity_ref_label\")\nconst workDomainLabel = t(\"issueCreateOverlay.work_domain_label\")\nconst selectPriorityLabel = t(\"issueCreateOverlay.select_priority_label\")\nconst issueDescriptionLabel = t(\"issueCreateOverlay.issue_description_label\")\nconst correctionInfoLabel = t(\"issueCreateOverlay.correction_info\")\n\nconst issuesOnEntity = shallowRef([])\nconst issueOnEntityTotal = ref()\nconst issueOnEntityPriorityColor = ref(\"\")\nconst issueOnEntityPriorityLabel = ref(\"\")\nconst issueOnEntityTimeLabel = ref(\"\")\n\nconst workDomainModel = ref()\nconst workDomainOptions = ref([])\nconst issuePrioritiesList = ref([])\nconst issuePrioritiesListFiltered = ref()\nconst selectPriorityModel = ref()\nconst issueTitle = ref(null)\nconst issueDescription = ref(null)\nconst uploadedImages = ref()\n\nconst correctiveAction = ref()\nconst requiresIsolation = ref()\nconst requiresShutdown = ref()\nconst timeEstimate = ref()\n\nconst correctiveActionEl = ref()\nconst correctiveTimeRequirementsEl = ref()\nconst correctiveAdditionalRequirementsEl = ref()\n\nconst title = computed(() => issueTitle.value || t(\"issueCreateOverlay.title\"))\n\nconst titleReference = computed(\n () => workDomainModel.value?.shorthand_name || t(\"issueCreateOverlay.title_reference_placeholder\")\n)\n\nconst titleClass = computed(() =>\n !issueTitle.value ? \"sfx-top-navigation__title-placeholder\" : undefined\n)\n\nconst titleReferenceClass = computed(() =>\n !workDomainModel.value ? \"sfx-top-navigation__title-placeholder\" : undefined\n)\n\nconst scrollAreaHeight = computed(() => {\n const topNavigationHeight = topNavigationContainer.value?.offsetHeight || 0\n return { height: `calc(100% - ${topNavigationHeight}px)` }\n})\n\nconst disableSubmit = computed(\n () =>\n !(\n workDomainModel.value &&\n issueTitle.value &&\n selectPriorityModel.value &&\n uploadedImages.value &&\n uploadedImages.value?.length > 0\n )\n)\n\nconst unSavedChanges = computed(() =>\n Boolean(\n workDomainModel.value ||\n issueTitle.value ||\n selectPriorityModel.value ||\n (uploadedImages.value && uploadedImages.value.length > 0)\n )\n)\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n const issuePriorityDocuments = await getIssuePriorityListData()\n const issuePriorityData = issuePriorityDocuments.map((element) => element.toJSON())\n\n issuePrioritiesList.value = issuePriorityData.sort((a: IssuePriority, b: IssuePriority) => {\n return a.risk_factor - b.risk_factor\n })\n\n await assignValidWorkDomains()\n await getIssuesForEntity()\n})\n\n//endregion\n\n//region Functions\n\nasync function assignValidWorkDomains() {\n const workDomainDocuments = await getWorkDomainWorkspaceListData()\n\n const item = await getItemData(props.issueEntity.id)\n\n const validWorkDomainOptions = await filterInvalidWorkDomains(\n workDomainDocuments,\n item,\n issuePrioritiesList.value\n )\n\n if (validWorkDomainOptions.length === 0) {\n return showErrorNotification(t(\"sfxErrorMsg.error_no_valid_work_domains\"))\n }\n\n workDomainOptions.value = validWorkDomainOptions\n}\n\nasync function handleUnsavedChanges(action: () => void): Promise {\n if (unSavedChanges.value) {\n // Show confirmation dialog\n const userConfirmed = await unsavedChangesDialog()\n if (userConfirmed) {\n action()\n }\n } else {\n action()\n }\n}\n\nfunction showIssuesDialog() {\n issueListDialog(\"item\", issuesOnEntity.value, unSavedChanges.value)\n}\n\nfunction onDialogClose() {\n handleUnsavedChanges(onDialogCancel)\n}\n\n// TODO: This has to be reworked\nasync function getIssuesForEntity() {\n // TODO: add check for getting data for items or areas\n const allIssuesOnEntity = await getIssueOnItemListData()\n\n const issues = allIssuesOnEntity.filter(\n (issue) => issue.actionable_item === props.issueEntity.id && issue.concluded_dt === null\n )\n\n if (issues.length === 0) return\n\n issuesOnEntity.value = issues.map((i) => i.toMutableJSON())\n issueOnEntityTotal.value = issues.length\n\n const latestIssue = issues.reduce((a, b) =>\n new Date(a.declared_dt).getTime() > new Date(b.declared_dt).getTime() ? a : b\n )\n\n const highestPriorityIssue = await getHighestPriorityFromIssueList(issues)\n if (highestPriorityIssue) {\n issueOnEntityPriorityColor.value = numberToPriorityClass(highestPriorityIssue.risk_factor)\n issueOnEntityPriorityLabel.value = highestPriorityIssue.label\n }\n\n const issueDateTime = new Date(latestIssue.declared_dt).toJSON()\n\n const latestTemporalData = getTemporalInfo(issueDateTime, \"objOverviewIssue\")\n\n if (typeof latestTemporalData === \"string\") {\n issueOnEntityTimeLabel.value = latestTemporalData\n }\n}\n\nasync function createIssue(): Promise {\n if (!issueTitle.value || !selectPriorityModel.value || !props.issueEntity) {\n const message = t(\"issueCreateOverlay.user_error_creating_issue\")\n showErrorNotification(message)\n } else {\n const userStore = useUserStore()\n\n try {\n // TODO: Handle issue for area case\n const issue: PayloadEntity = {\n title: issueTitle.value,\n description: issueDescription.value,\n raised_by_user: userStore.id,\n concluded_by_user: null,\n work_domain: workDomainModel.value.id,\n priority: selectPriorityModel.value.id,\n actionable_item: props.issueEntity.id,\n declared_dt: new Date().toJSON(),\n concluded_dt: null,\n conclusion: null,\n superseded_by: null,\n corrective_work_order: null,\n raised_from: null,\n reference: null,\n attachments: [],\n main_image: null,\n }\n\n if (props.unsubmittedWorkId) {\n issue.attachments = (await saveUnsubmittedAttachments(uploadedImages.value)) || []\n await saveUnsubmittedIssueData(props.unsubmittedWorkId, issue)\n } else {\n const issueCreated = await postIssuesOnItem({}, issue)\n\n issueCreated.attachments =\n (await uploadImages(\"issue_item\", issueCreated.id, uploadedImages.value)) || []\n\n const db = await getDB()\n await db.issues_on_item.insert(issueCreated)\n\n return issueCreated\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_creating_issue\"))\n Log.error({\n message: \"An error occurred while trying to create the issue.\",\n error,\n })\n }\n }\n}\n\nasync function createActions(correctiveActionText: string, issueID: string) {\n try {\n const action: PayloadEntity = {\n text: correctiveActionText,\n time_estimate: timeEstimate.value || undefined,\n isolation_required: requiresIsolation.value || undefined,\n shutdown_required: requiresShutdown.value || undefined,\n issue: issueID,\n }\n const issueActionCreated = await postIssuesOnItemAction({}, action)\n\n if (issueActionCreated) {\n const db = await getDB()\n await db.issue_on_item_actions.insert(issueActionCreated)\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_creating_corrective_action\"))\n Log.error({\n message: \"An error occurred while trying to create an action for the item.\",\n error,\n })\n }\n}\n\nasync function submitData() {\n const issueCreated = await createIssue()\n\n if (issueCreated) {\n if (correctiveAction.value) {\n await createActions(correctiveAction.value, issueCreated.id)\n }\n\n const issueCardData = await getIssueCardData(issueCreated)\n cacheStore.issueCard.set(issueCreated.id, issueCardData)\n\n showSuccessNotification(NotificationActionMessage.ISSUES_RAISED)\n onDialogOK()\n }\n}\n\nasync function saveUnsubmittedIssueData(unsubmittedWorkId: string, issue: PayloadEntity) {\n try {\n const db = await getChangesDB()\n const issueId = uuidv4()\n\n const issueToSend: UnsubmittedWorkIssue = {\n id: issueId,\n unsubmitted_work_id: unsubmittedWorkId,\n issue: issue,\n }\n if (correctiveAction.value) {\n issueToSend.action = {\n text: correctiveAction.value,\n time_estimate: timeEstimate.value || undefined,\n isolation_required: requiresIsolation.value || undefined,\n shutdown_required: requiresShutdown.value || undefined,\n issue: issueId,\n }\n }\n await db.unsubmitted_work_issue.insert(issueToSend)\n\n showSuccessNotification(t(\"issueCreateOverlay.work_related_issue_message\"))\n onDialogHide()\n } catch (error) {\n Log.error({\n message: \"An error occurred while saving Unsubmitted Issue data in changes_db\",\n error,\n })\n }\n}\n\nasync function clearCorrectiveInformation(correctiveActionHadData: boolean) {\n if (\n !correctiveActionHadData &&\n (timeEstimate.value || requiresIsolation.value || requiresShutdown.value)\n ) {\n const userConfirmed = await confirmationDialog({\n title: t(\"sfxIssues.dialog_title\"),\n content: t(\"sfxIssues.dialog_content\"),\n persistent: true,\n })\n\n if (!userConfirmed) {\n correctiveActionEl.value?.forceShow()\n return\n }\n }\n\n correctiveTimeRequirementsEl.value?.forceHide()\n correctiveAdditionalRequirementsEl.value?.forceHide()\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => workDomainModel.value,\n () => {\n selectPriorityModel.value = undefined\n issuePrioritiesListFiltered.value = issuePrioritiesList.value?.filter(\n (issuePriority) => issuePriority.work_domain === workDomainModel.value.id\n )\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_scroll_area = _resolveComponent(\"q-scroll-area\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"topNavigationContainer\",\n ref: topNavigationContainer\n }, [\n _createVNode(SfxTopNavigation, {\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"hide-context-bar\": \"\",\n onClose: onDialogClose,\n title: title.value,\n \"title-reference\": titleReference.value,\n \"title-class\": titleClass.value,\n \"title-reference-class\": titleReferenceClass.value\n }, {\n subtitle: _withCtx(() => [\n _createElementVNode(\"span\", { innerHTML: _unref(pageSubtitle) }, null, 8, _hoisted_1)\n ]),\n _: 1\n }, 8, [\"navigation-action\", \"title\", \"title-reference\", \"title-class\", \"title-reference-class\"])\n ], 512),\n _createVNode(_component_q_scroll_area, {\n class: \"q-px-lg full-width scrollbar-area\",\n style: _normalizeStyle(scrollAreaHeight.value),\n visible: false\n }, {\n default: _withCtx(() => [\n (issueOnEntityTotal.value)\n ? (_openBlock(), _createBlock(SfxEntityReference, {\n key: 0,\n title: _unref(existingIssuesLabel),\n \"item-count\": issueOnEntityTotal.value,\n \"time-information\": issueOnEntityTimeLabel.value,\n icon: _unref(Icons).ISSUE,\n \"icon-color\": issueOnEntityPriorityColor.value,\n \"priority-label\": issueOnEntityPriorityLabel.value,\n clickable: \"\",\n onClick: showIssuesDialog\n }, null, 8, [\"title\", \"item-count\", \"time-information\", \"icon\", \"icon-color\", \"priority-label\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"issueCreateOverlay.issue\")), 1),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"issueCreateOverlay.issue_more_info\")), 1),\n _createVNode(_component_q_form, { onSubmit: submitData }, {\n default: _withCtx(() => [\n _createVNode(SfxSelect, {\n modelValue: workDomainModel.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workDomainModel).value = $event)),\n label: _unref(workDomainLabel),\n options: workDomainOptions.value,\n \"option-label\": (opt) => opt.designation,\n \"option-value\": (opt) => opt.id,\n disable: workDomainOptions.value.length === 0,\n class: \"q-my-xs\",\n required: \"\"\n }, null, 8, [\"modelValue\", \"label\", \"options\", \"option-label\", \"option-value\", \"disable\"]),\n _createVNode(SfxSelect, {\n modelValue: selectPriorityModel.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((selectPriorityModel).value = $event)),\n label: _unref(selectPriorityLabel),\n options: issuePrioritiesListFiltered.value,\n class: \"q-mb-xs\",\n disable: !workDomainModel.value,\n required: \"\"\n }, {\n option: _withCtx((scope) => [\n _createVNode(_component_q_item, _normalizeProps(_guardReactiveProps(scope.itemProps)), {\n default: _withCtx(() => [\n _createVNode(SfxPriorityLabel, {\n \"priority-number\": scope.opt.risk_factor,\n label: scope.opt.label,\n issue: \"\"\n }, null, 8, [\"priority-number\", \"label\"])\n ]),\n _: 2\n }, 1040)\n ]),\n \"selected-item\": _withCtx((scope) => [\n _createVNode(SfxPriorityLabel, {\n \"priority-number\": scope.opt.risk_factor,\n label: scope.opt.label,\n issue: \"\"\n }, null, 8, [\"priority-number\", \"label\"])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"label\", \"options\", \"disable\"]),\n _createVNode(SfxTextareaTitled, {\n title: issueTitle.value,\n \"onUpdate:title\": _cache[2] || (_cache[2] = ($event: any) => ((issueTitle).value = $event)),\n description: issueDescription.value,\n \"onUpdate:description\": _cache[3] || (_cache[3] = ($event: any) => ((issueDescription).value = $event)),\n label: _unref(issueDescriptionLabel),\n class: \"q-mt-xs q-mb-xs\"\n }, null, 8, [\"title\", \"description\", \"label\"]),\n _createVNode(SfxImageUploader, {\n \"uploaded-images\": uploadedImages.value,\n \"onUpdate:uploadedImages\": _cache[4] || (_cache[4] = ($event: any) => ((uploadedImages).value = $event)),\n required: \"\"\n }, null, 8, [\"uploaded-images\"]),\n _createVNode(SfxSeparator, null, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(correctionInfoLabel)), 1)\n ]),\n _: 1\n }),\n _createVNode(SfxIssueCorrectiveAction, {\n ref_key: \"correctiveActionEl\",\n ref: correctiveActionEl,\n modelValue: correctiveAction.value,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((correctiveAction).value = $event)),\n onHide: clearCorrectiveInformation\n }, null, 8, [\"modelValue\"]),\n _createVNode(SfxIssueTimeRequirements, {\n ref_key: \"correctiveTimeRequirementsEl\",\n ref: correctiveTimeRequirementsEl,\n \"time-estimate\": timeEstimate.value,\n \"onUpdate:timeEstimate\": _cache[6] || (_cache[6] = ($event: any) => ((timeEstimate).value = $event)),\n disable: !correctiveAction.value\n }, null, 8, [\"time-estimate\", \"disable\"]),\n _createVNode(SfxIssueBase, {\n title: \"Material Requirements\",\n disable: \"\"\n }),\n _createVNode(SfxIssueAdditionalRequirements, {\n ref_key: \"correctiveAdditionalRequirementsEl\",\n ref: correctiveAdditionalRequirementsEl,\n \"isolation-checked\": requiresIsolation.value,\n \"onUpdate:isolationChecked\": _cache[7] || (_cache[7] = ($event: any) => ((requiresIsolation).value = $event)),\n \"shutdown-checked\": requiresShutdown.value,\n \"onUpdate:shutdownChecked\": _cache[8] || (_cache[8] = ($event: any) => ((requiresShutdown).value = $event)),\n disable: !correctiveAction.value\n }, null, 8, [\"isolation-checked\", \"shutdown-checked\", \"disable\"]),\n _createVNode(SfxBtn, {\n label: _ctx.$t('sfxButtons.btn_raise_issue'),\n class: \"full-width q-mb-md\",\n type: \"submit\",\n disable: disableSubmit.value\n }, null, 8, [\"label\", \"disable\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"style\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\"]))\n}\n}\n\n})","import script from \"./IssueCreateOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./IssueCreateOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QScrollArea from 'quasar/src/components/scroll-area/QScrollArea.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QScrollArea,QForm,QItem});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"text-info\"\n}\nconst _hoisted_2 = { class: \"q-gutter-sm q-mt-md\" }\n\nimport { useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxTab from \"src/components/navigation/SfxTab.vue\"\nimport SfxTabs from \"src/components/navigation/SfxTabs.vue\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport SfxSelect from \"src/components/select/SfxSelect.vue\"\nimport SfxSeparator from \"src/components/special/SfxSeparator.vue\"\nimport SfxTimeEdit from \"src/components/special/SfxTimeEdit.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport {\n isAttributeChar,\n isAttributeNumeric,\n isAttributeSelect,\n isAttributeSelectOption,\n isAttributeTemporal,\n} from \"src/util/functions/attributes\"\nimport { unsavedChangesDialog } from \"src/util/functions/dialogs\"\nimport {\n fetchAttributeCharListData,\n fetchAttributeNumericListData,\n fetchAttributeSelectListData,\n fetchAttributeSelectOptionsListData,\n fetchAttributeTemporalListData,\n getItemClassListData,\n} from \"src/util/functions/entityData\"\nimport { decimalStep } from \"src/util/functions/misc\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport {\n patchAttributeCharValuesBatch,\n patchAttributeNumericValuesBatch,\n patchAttributeSelectValuesBatch,\n patchAttributeTemporalValuesBatch,\n} from \"src/util/http/csi/attributes\"\nimport {\n getItemAttributeCharValues,\n getItemAttributeNumericValues,\n getItemAttributeSelectValues,\n getItemAttributeTemporalValues,\n postItem,\n} from \"src/util/http/csi/items\"\nimport {\n AttributeCharWithValue,\n AttributeNumericWithValue,\n AttributeSelectOptions,\n AttributeSelectWithValue,\n AttributeSelectWithValueFix,\n AttributeTemporalWithValue,\n} from \"src/util/types/dataModels/attribute\"\nimport { PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { Item } from \"src/util/types/dataModels/item\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport { computed, onMounted, PropType, ref, shallowRef, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ItemCreateOverlay',\n props: {\n copiedItem: {\n type: Object as PropType,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { dialogRef, onDialogCancel, onDialogOK } = useDialogPluginComponent()\nconst { t } = useI18n()\n\nconst title = computed(() => currentDesignation.value || t(\"itemCreateOverlay.title\"))\nconst subtitle = computed(() =>\n props.copiedItem ? t(\"itemCreateOverlay.subtitle_clone\") : t(\"itemCreateOverlay.subtitle_create\")\n)\nconst topNavigationContainer = ref(null)\n\nconst titleClass = computed(() =>\n !currentDesignation.value ? \"sfx-top-navigation__title-placeholder\" : undefined\n)\n\nconst overviewTab = t(\"itemCreateOverlay.tab_overview\")\nconst locationTab = t(\"itemCreateOverlay.tab_location\")\nconst dataTab = t(\"itemCreateOverlay.tab_data\")\nconst attachedTab = t(\"itemCreateOverlay.tab_attached\")\n\nconst tabs = [overviewTab, locationTab, dataTab, attachedTab]\n\nconst itemIdLabel = t(\"itemCreateOverlay.label_id\")\nconst designationLabel = t(\"itemCreateOverlay.label_designation\")\nconst itemClassLabel = t(\"itemCreateOverlay.label_item_class\")\n\nconst currentItemId = ref()\nconst currentDesignation = ref()\n\nconst currentItemClass = ref()\nconst currentItemModel = ref()\n\nconst currentItemChar = ref([])\nconst currentItemNumeric = ref([])\nconst currentItemSelect = ref([])\nconst currentItemTemporal = ref([])\n\nconst currentItemAttributes = computed(() =>\n [\n ...currentItemChar.value,\n ...currentItemNumeric.value,\n ...currentItemSelect.value,\n ...currentItemTemporal.value,\n ].sort((a, b) => a.name.localeCompare(b.name))\n)\nconst allItemIds = ref>([])\nconst uniqueItemIdRule = [\n (val: string) => !allItemIds.value.includes(val) || t(\"itemCreateOverlay.error_value_unique\"),\n]\n\nconst itemClassList = shallowRef([])\n\nconst scrollAreaHeight = computed(() => {\n const topNavigationHeight = topNavigationContainer.value?.offsetHeight || 0\n return { height: `calc(100% - ${topNavigationHeight}px)` }\n})\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n const db = await getDB()\n\n try {\n await fetchAPIData()\n } catch (fetchError) {\n Log.error({\n message: \"There was an error trying to fetch data for item creation\",\n error: fetchError,\n })\n }\n\n allItemIds.value = await db.item.getItemIds()\n const itemClassDocuments = await getItemClassListData()\n itemClassList.value = itemClassDocuments.map((element) => element.toMutableJSON())\n\n if (props.copiedItem) getCopiedItemItemClass(props.copiedItem)\n})\n\n//endregion\n\n//region Functions\n\nasync function fetchAPIData() {\n // We don't need item model data currently\n // await fetchItemModelListData()\n await fetchAttributeCharListData()\n await fetchAttributeNumericListData()\n await fetchAttributeSelectListData()\n await fetchAttributeSelectOptionsListData()\n await fetchAttributeTemporalListData()\n}\n\nfunction getCopiedItemItemClass(item: Item) {\n const foundItemClass = itemClassList.value.find((itemClass) => itemClass.id === item.item_class)\n\n // Should not be theoretically possible since we fetch all item classes beforehand\n if (!foundItemClass) {\n Log.error({ message: \"Item class not found\", data: { item: JSON.stringify(item) } })\n return\n }\n\n currentItemClass.value = foundItemClass\n}\n\nasync function submitData() {\n const item_id = currentItemId.value\n const designation = currentDesignation.value\n const item_class = currentItemClass.value?.id\n\n // Form should have activated the input requirement check, but let's be sure.\n if (!item_id || !item_class || !designation) {\n return\n }\n\n const newItem: PayloadEntity = {\n item_id,\n designation,\n item_class,\n main_image: null,\n attachments: [],\n }\n\n const createdItem = await createItem(newItem)\n\n // We failed creating an item, no reason to continue updating its attributes\n if (!createdItem) return\n\n const mutableItem = createdItem.toMutableJSON()\n\n // In case this fails, the user has to go to the item data page and edit from there\n await updateItemAttributes(mutableItem)\n\n // Close the dialog since we have finished submitting the data\n onDialogOK(createdItem)\n}\n\nasync function createItem(newItem: PayloadEntity) {\n try {\n const data = await postItem({}, newItem)\n const db = await getDB()\n return await db.item.insert(data)\n } catch (error) {\n if (typeof error === \"object\" && error !== null) {\n const errorObject = JSON.stringify(error)\n const stringifyPayload = JSON.stringify(newItem)\n\n showErrorNotification(getItemCreationUserErrors(error))\n\n Log.error({\n message: \"There was an error trying to create an object\",\n error: errorObject,\n data: { stringifyPayload },\n })\n }\n }\n}\n\nfunction getItemCreationUserErrors(error: object) {\n let errorForUsers = \"\"\n\n if (Object.keys(error).length === 1 && Object.keys(error)[0] === \"item_id\") {\n errorForUsers = t(\"itemCreateOverlay.error_item_id\")\n } else {\n for (const [index, [key, value]] of Object.entries(error).entries()) {\n if (index !== 0) errorForUsers += \"
\"\n errorForUsers += `${key}: ${value}`\n }\n }\n return errorForUsers\n}\n\nasync function updateItemAttributes(item: Item) {\n try {\n await updateItemAttributeChar(item)\n await updateItemAttributeNumeric(item)\n await updateItemAttributeSelect(item)\n await updateItemAttributeTemporal(item)\n showSuccessNotification(t(\"itemCreateOverlay.item_created\"))\n } catch {\n showErrorNotification(t(\"itemCreateOverlay.error_attributes\"))\n }\n}\n\nasync function updateItemAttributeChar(item: Item) {\n const filteredData = currentItemChar.value\n .filter((attribute) => attribute.value != null)\n .map((attribute) => {\n return {\n attribute: attribute.id,\n value: attribute.value,\n item: item.id,\n }\n })\n\n // No point making the request if there is no data to send\n if (filteredData.length === 0) return\n\n try {\n const data = await patchAttributeCharValuesBatch({}, filteredData)\n const db = await getDB()\n await db.attribute_char_value.bulkUpsert(data.results)\n } catch (error) {\n handlerAttributePatchError(error, item, filteredData)\n }\n}\n\nasync function updateItemAttributeNumeric(item: Item) {\n const filteredData = currentItemNumeric.value\n .filter((attribute) => attribute.value != null)\n .map((attribute) => {\n return {\n attribute: attribute.id,\n value: attribute.value,\n item: item.id,\n }\n })\n\n // No point making the request if there is no data to send\n if (filteredData.length === 0) return\n\n try {\n const data = await patchAttributeNumericValuesBatch({}, filteredData)\n const db = await getDB()\n await db.attribute_numeric_value.bulkUpsert(data.results)\n } catch (error) {\n handlerAttributePatchError(error, item, filteredData)\n }\n}\n\nasync function updateItemAttributeSelect(item: Item) {\n const filteredData = currentItemSelect.value\n .filter(\n (attribute): attribute is AttributeSelectWithValueFix =>\n attribute.attribute_select_options != null && attribute.attribute_select_options?.length > 0\n )\n .map((attribute) => {\n const options = Array.isArray(attribute.attribute_select_options)\n ? attribute.attribute_select_options\n : [attribute.attribute_select_options]\n\n return {\n attribute: attribute.id,\n // Make sure the data is always in an array\n attribute_select_options: options,\n item: item.id,\n }\n })\n\n // No point making the request if there is no data to send\n if (filteredData.length === 0) return\n\n try {\n const data = await patchAttributeSelectValuesBatch({}, filteredData)\n const db = await getDB()\n await db.attribute_select_value.bulkUpsert(data.results)\n } catch (error) {\n handlerAttributePatchError(error, item, filteredData)\n }\n}\n\nasync function updateItemAttributeTemporal(item: Item) {\n const filteredData = currentItemTemporal.value.map((attribute) => {\n return {\n attribute: attribute.id,\n date: attribute.date,\n time: attribute.time,\n item: item.id,\n }\n })\n\n // No point making the request if there is no data to send\n if (filteredData.length === 0) return\n\n try {\n const data = await patchAttributeTemporalValuesBatch({}, filteredData)\n const db = await getDB()\n await db.attribute_temporal_value.bulkUpsert(data.results)\n } catch (error) {\n handlerAttributePatchError(error, item, filteredData)\n }\n}\n\nfunction handlerAttributePatchError(error: unknown, item: Item, data: unknown[]) {\n const stringifiedItem = JSON.stringify(item)\n const stringifiedAttributes = JSON.stringify(data)\n\n Log.error({\n message: \"Could not update attributes during item creation\",\n error,\n data: {\n item: stringifiedItem,\n filteredAttributes: stringifiedAttributes,\n },\n })\n\n throw error\n}\n\nfunction resetAttributes() {\n currentItemModel.value = undefined\n currentItemChar.value.length = 0\n currentItemNumeric.value.length = 0\n currentItemSelect.value.length = 0\n currentItemTemporal.value.length = 0\n}\n\nfunction getSelectLabel(itemClass: ItemClass) {\n return itemClass.designation\n}\n\nfunction getSelectValue(itemClass: ItemClass) {\n return itemClass.id\n}\n\nfunction getSelectAttributeLabel(options: AttributeSelectOptions | null) {\n return options?.value\n}\n\nfunction getSelectAttributeValue(options: AttributeSelectOptions | null) {\n return options?.id\n}\n\nasync function getNewItemAttributeData(newItemClass: ItemClass) {\n const charIDs = newItemClass.attributes_char_item\n const numericIDs = newItemClass.attributes_numeric_item\n const selectIDs = newItemClass.attributes_select_item\n const temporalIDs = newItemClass.attributes_temporal_item\n\n const db = await getDB()\n\n const charData = await db.attribute_char.find().where(\"id\").in(charIDs).exec()\n const numericData = await db.attribute_numeric.find().where(\"id\").in(numericIDs).exec()\n const selectData = await db.attribute_select.find().where(\"id\").in(selectIDs).exec()\n const temporalData = await db.attribute_temporal.find().where(\"id\").in(temporalIDs).exec()\n\n const selectDataWithOptions = await Promise.all(\n selectData.map(async (item) => await item.populateWithOptions())\n )\n\n currentItemChar.value = charData.map((i) => i.toMutableJSON())\n currentItemNumeric.value = numericData.map((i) => i.toMutableJSON())\n currentItemSelect.value = selectDataWithOptions // Already mutable\n currentItemTemporal.value = temporalData.map((i) => i.toMutableJSON())\n}\n\nasync function populateCopiedItemValues(itemId: string) {\n await populateCopiedItemChar(itemId)\n await populateCopiedItemNumeric(itemId)\n await populateCopiedItemSelect(itemId)\n await populateCopiedItemTemporal(itemId)\n}\n\nasync function populateCopiedItemChar(itemId: string) {\n try {\n const db = await getDB()\n const charDataFromAPI = await getItemAttributeCharValues({}, itemId)\n\n if (charDataFromAPI.results.length > 0) {\n await db.attribute_char_value.bulkUpsert(charDataFromAPI.results)\n }\n\n const charData = await db.attribute_char_value.find().where(\"item\").eq(itemId).exec()\n\n for (const attrVal of charData) {\n const foundAttr = currentItemChar.value.find((attr) => attr.id === attrVal.attribute)\n if (foundAttr) foundAttr.value = attrVal.value\n }\n } catch (error) {\n Log.error({\n message: \"Error fetching copied item char attribute values\",\n error,\n data: { itemId },\n })\n }\n}\n\nasync function populateCopiedItemNumeric(itemId: string) {\n try {\n const db = await getDB()\n const numericDataFromAPI = await getItemAttributeNumericValues({}, itemId)\n\n if (numericDataFromAPI.results.length > 0) {\n await db.attribute_numeric_value.bulkUpsert(numericDataFromAPI.results)\n }\n\n const numericData = await db.attribute_numeric_value.find().where(\"item\").eq(itemId).exec()\n\n for (const attrVal of numericData) {\n const foundAttr = currentItemNumeric.value.find((attr) => attr.id === attrVal.attribute)\n if (foundAttr) foundAttr.value = attrVal.value\n }\n } catch (error) {\n Log.error({\n message: \"Error fetching copied item numeric attribute values\",\n error,\n data: { itemId },\n })\n }\n}\n\nasync function populateCopiedItemSelect(itemId: string) {\n try {\n const db = await getDB()\n const selectDataFromAPI = await getItemAttributeSelectValues({}, itemId)\n\n if (selectDataFromAPI.results.length > 0) {\n await db.attribute_select_value.bulkUpsert(selectDataFromAPI.results)\n }\n\n const selectData = await db.attribute_select_value.find().where(\"item\").eq(itemId).exec()\n\n for (const attrVal of selectData) {\n const foundAttr = currentItemSelect.value.find((attr) => attr.id === attrVal.attribute)\n if (foundAttr) foundAttr.attribute_select_options = attrVal.attribute_select_options\n }\n } catch (error) {\n Log.error({\n message: \"Error fetching copied item char temporal values\",\n error,\n data: { itemId },\n })\n }\n}\n\nasync function populateCopiedItemTemporal(itemId: string) {\n try {\n const db = await getDB()\n const temporalDataFromAPI = await getItemAttributeTemporalValues({}, itemId)\n\n if (temporalDataFromAPI.results.length > 0) {\n await db.attribute_temporal_value.bulkUpsert(temporalDataFromAPI.results)\n }\n\n const temporalData = await db.attribute_temporal_value.find().where(\"item\").eq(itemId).exec()\n\n for (const attrVal of temporalData) {\n const foundAttr = currentItemTemporal.value.find((attr) => attr.id === attrVal.attribute)\n if (foundAttr) {\n foundAttr.date = attrVal.date\n foundAttr.time = attrVal.time\n }\n }\n } catch (error) {\n Log.error({\n message: \"Error fetching copied item select attribute values\",\n error,\n data: { itemId },\n })\n }\n}\n\nfunction selectAttributeValueHandler(selectAttribute: AttributeSelectWithValue) {\n const options = selectAttribute.attribute_select_options?.filter(Boolean)\n return selectAttribute.allow_multiple_selections ? options : options?.[0]\n}\n\nfunction updateSelectAttributeValueHandler(\n options: string[] | string | null,\n selectAttribute: AttributeSelectWithValue\n) {\n if (options == null) options = []\n selectAttribute.attribute_select_options = Array.isArray(options) ? options : [options]\n\n if (isAttributeSelectOption(options)) options = options.id\n}\n\n// Check if any of the attributes displayed has any value on it. Returns true on first hit\nfunction existsAttributeWithValue() {\n return (\n currentItemChar.value.some((attribute) => attribute.value) ||\n currentItemNumeric.value.some((attribute) => attribute.value != null) ||\n currentItemSelect.value.some(\n (attribute) =>\n attribute.attribute_select_options && attribute.attribute_select_options.length > 0\n ) ||\n currentItemTemporal.value.some((attribute) => attribute.date || attribute.time)\n )\n}\n\nasync function updateItemClass(newItemClass: ItemClass) {\n // If any of the attributes has some values, then give a warning\n if (existsAttributeWithValue()) {\n const userWantsToContinue = await unsavedChangesDialog()\n if (!userWantsToContinue) return\n }\n\n currentItemClass.value = newItemClass\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => currentItemClass.value,\n async (newItemClass, previousItemClass) => {\n if (newItemClass) {\n resetAttributes()\n\n await getNewItemAttributeData(newItemClass)\n\n // Only in the going to happen in the beginning\n if (!previousItemClass && props.copiedItem) {\n await populateCopiedItemValues(props.copiedItem.id)\n }\n }\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_form = _resolveComponent(\"q-form\")!\n const _component_q_scroll_area = _resolveComponent(\"q-scroll-area\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin sfx-item-create-overlay\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"topNavigationContainer\",\n ref: topNavigationContainer\n }, [\n _createVNode(SfxTopNavigation, {\n title: title.value,\n \"title-class\": titleClass.value,\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n \"hide-context-bar\": \"\",\n onClose: _unref(onDialogCancel)\n }, {\n subtitle: _withCtx(() => [\n _createElementVNode(\"span\", null, [\n _createTextVNode(_toDisplayString(subtitle.value) + \" \", 1),\n (props.copiedItem)\n ? (_openBlock(), _createElementBlock(\"b\", _hoisted_1, _toDisplayString(props.copiedItem.designation), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"title-class\", \"navigation-action\", \"onClose\"])\n ], 512),\n _createVNode(_component_q_scroll_area, {\n class: \"full-width scrollbar-area\",\n style: _normalizeStyle(scrollAreaHeight.value),\n visible: false\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_form, {\n onSubmit: submitData,\n class: \"q-px-lg\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxTabs, { \"model-value\": _unref(dataTab) }, {\n default: _withCtx(() => [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(tabs, (tab) => {\n return _createVNode(SfxTab, {\n key: tab,\n label: tab,\n name: tab,\n disable: tab !== _unref(dataTab),\n class: \"full-width\",\n noCaps: \"\"\n }, null, 8, [\"label\", \"name\", \"disable\"])\n }), 64))\n ]),\n _: 1\n }, 8, [\"model-value\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(SfxInput, {\n modelValue: currentItemId.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((currentItemId).value = $event)),\n modelModifiers: { trim: true },\n label: _unref(itemIdLabel),\n required: \"\",\n \"hide-bottom-space\": \"\",\n rules: uniqueItemIdRule\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInput, {\n modelValue: currentDesignation.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((currentDesignation).value = $event)),\n modelModifiers: { trim: true },\n label: _unref(designationLabel),\n required: \"\",\n \"hide-bottom-space\": \"\",\n maxlength: \"256\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxSelect, {\n \"model-value\": currentItemClass.value,\n \"onUpdate:modelValue\": updateItemClass,\n loading: itemClassList.value.length === 0,\n label: _unref(itemClassLabel),\n options: itemClassList.value,\n \"option-label\": getSelectLabel,\n \"option-value\": getSelectValue,\n required: \"\",\n \"hide-bottom-space\": \"\"\n }, null, 8, [\"model-value\", \"loading\", \"label\", \"options\"]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(currentItemAttributes.value, (item, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (_unref(isAttributeChar)(item))\n ? (_openBlock(), _createBlock(SfxInput, {\n key: 0,\n label: item.name,\n modelValue: item.value,\n \"onUpdate:modelValue\": ($event: any) => ((item.value) = $event),\n \"attr-type\": \"char\",\n \"hide-bottom-space\": \"\",\n autocomplete: item.autocomplete,\n allow_blank: item.allow_blank,\n maxlength: item.max_length,\n clearable: \"\"\n }, null, 8, [\"label\", \"modelValue\", \"onUpdate:modelValue\", \"autocomplete\", \"allow_blank\", \"maxlength\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isAttributeNumeric)(item))\n ? (_openBlock(), _createBlock(SfxInput, {\n key: 1,\n label: item.name,\n modelValue: item.value,\n \"onUpdate:modelValue\": ($event: any) => ((item.value) = $event),\n modelModifiers: { number: true },\n type: \"number\",\n \"attr-type\": \"numeric\",\n \"hide-bottom-space\": \"\",\n minVal: item.min,\n maxVal: item.max,\n decimals: item.decimals,\n step: _unref(decimalStep)(item.decimals),\n clearable: \"\"\n }, null, 8, [\"label\", \"modelValue\", \"onUpdate:modelValue\", \"minVal\", \"maxVal\", \"decimals\", \"step\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isAttributeSelect)(item))\n ? (_openBlock(), _createBlock(SfxSelect, {\n key: 2,\n label: item.name,\n \"model-value\": selectAttributeValueHandler(item),\n \"onUpdate:modelValue\": ($event: any) => (updateSelectAttributeValueHandler($event, item)),\n \"hide-bottom-space\": \"\",\n options: item.options,\n \"option-label\": getSelectAttributeLabel,\n \"option-value\": getSelectAttributeValue,\n multiple: item.allow_multiple_selections,\n clearable: \"\",\n \"emit-value\": \"\",\n \"map-options\": \"\"\n }, null, 8, [\"label\", \"model-value\", \"onUpdate:modelValue\", \"options\", \"multiple\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isAttributeTemporal)(item))\n ? (_openBlock(), _createBlock(SfxTimeEdit, {\n key: 3,\n label: item.name,\n date: item.date,\n \"onUpdate:date\": ($event: any) => ((item.date) = $event),\n time: item.time,\n \"onUpdate:time\": ($event: any) => ((item.time) = $event),\n enable_time: item.enable_time,\n enable_date: item.enable_date,\n clearable: \"\"\n }, null, 8, [\"label\", \"date\", \"onUpdate:date\", \"time\", \"onUpdate:time\", \"enable_time\", \"enable_date\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128))\n ]),\n _createVNode(SfxSeparator, {\n icon: _unref(Icons).LAYOUTS,\n dimmed: \"\"\n }, null, 8, [\"icon\"]),\n _createVNode(SfxBtn, {\n class: \"full-width q-mb-md\",\n type: \"submit\",\n label: _ctx.$t('sfxButtons.btn_submit')\n }, null, 8, [\"label\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"style\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import script from \"./ItemCreateOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ItemCreateOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QScrollArea from 'quasar/src/components/scroll-area/QScrollArea.js';\nimport QForm from 'quasar/src/components/form/QForm.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QScrollArea,QForm});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment, createElementBlock as _createElementBlock, renderList as _renderList, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"full-height q-px-sm overflow-auto\" }\nconst _hoisted_3 = { class: \"q-ma-none\" }\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = { class: \"q-my-sm\" }\nconst _hoisted_6 = { class: \"q-my-sm\" }\n\nimport { Notify, useDialogPluginComponent } from \"quasar\"\nimport { DeepReadonlyObject } from \"rxdb\"\nimport { Subscription } from \"rxjs\"\nimport SfxCardModel from \"src/components/card/SfxCardModel.vue\"\nimport SfxEmptyPage from \"src/components/empty/SfxEmptyPage.vue\"\nimport SfxTopNavigation from \"src/components/navigation/SfxTopNavigation.vue\"\nimport SfxSearchBar from \"src/components/search/SfxSearchBar.vue\"\nimport SfxSpinner from \"src/components/special/SfxSpinner.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { useSupportStore } from \"src/stores/supportStore\"\nimport { useTopNavigationStore } from \"src/stores/topNavigationStore\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport { ContextAction, MissingEntityType } from \"src/util/enums/entityType\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport { selectModel } from \"src/util/functions/dialogs\"\nimport { getItemClassListData } from \"src/util/functions/entityData\"\nimport { SearchMap } from \"src/util/search/searchMap\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport { computed, onMounted, onUnmounted, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ModelClassOverlay',\n props: {\n itemDesignation: {\n type: String,\n required: true,\n },\n\n currentItemClass: {\n type: Object as PropType,\n },\n\n currentItemModel: {\n type: Object as PropType,\n },\n\n canGoToOverview: {\n type: Boolean,\n default: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst searchStore = useSearchStore()\nconst supportStore = useSupportStore()\nconst topNavigationStore = useTopNavigationStore()\nconst topNavigationContainer = ref(null)\nconst { dialogRef, onDialogCancel, onDialogOK, onDialogHide } = useDialogPluginComponent()\nlet subscription: Subscription\n\nconst currentItemModel = ref(props.currentItemModel)\nlet itemModelList = ref | undefined>(undefined)\nlet itemClassList = ref | undefined>(undefined)\nconst spinnerText = t(\"sfxSpinner.model_data\")\n\nconst searchMap = computed(() => {\n return new SearchMap, DeepReadonlyObject>(\n (item) => [{ term: item.designation, value: item }],\n {},\n itemModelList.value || undefined\n )\n})\n\nconst filteredItemModels = computed(() => {\n let result: DeepReadonlyObject\n result = searchStore.term\n ? searchMap.value.getPartialMatches(searchStore.term)\n : [...(itemModelList.value ?? [])].filter(\n (itemModel) => itemModel.id !== currentItemModel.value?.id\n )\n\n return result\n})\n\nconst contentContainer = computed(() => {\n const topNavigationHeight = topNavigationContainer.value?.offsetHeight || 0\n return { height: `calc(100% - ${topNavigationHeight}px)` }\n})\n\nconst searchBarDisabled = computed(\n () => !searchStore.enabled || (itemModelList.value && itemModelList.value.length === 0)\n)\n\n//endregion\n\n//region Lifecycle\n\nonMounted(async () => {\n itemModelList.value = await getItemModelsData()\n\n if (!props.currentItemClass) {\n const itemClassDocuments = await getItemClassListData()\n itemClassList.value = itemClassDocuments.map((element) => element.toJSON())\n }\n\n searchStore.enabled = true\n searchStore.domain = \"models\"\n supportStore.setFeedbackData(t(\"model.title\"))\n\n subscription = topNavigationStore.contextActionClicked.subscribe()\n})\n\nonUnmounted(() => {\n subscription?.unsubscribe()\n})\n\n//endregion\n\n//region Functions\n\nasync function getItemModelsData() {\n const db = await getDB()\n const results = await db.item_model\n .find()\n .where(\"item_class\")\n .eq(props.currentItemClass?.id)\n .exec()\n\n const itemModels = results.map((doc) => doc.toJSON())\n return itemModels.sort((a, b) => a.designation.localeCompare(b.designation))\n}\n\nfunction getItemClassDesignation(itemClassId: string) {\n return props.currentItemClass\n ? props.currentItemClass.designation\n : itemClassList.value?.find((itemClass) => itemClass.id === itemClassId)?.designation\n}\n\nfunction modelClick(itemModel: ItemModel) {\n selectModel(props.itemDesignation, itemModel.designation, props.canGoToOverview).onOk(() =>\n onDialogOK(itemModel)\n )\n}\n\nfunction modelLongClick(itemModel: ItemModel) {\n if (!props.canGoToOverview) return\n\n Notify.create({\n message: \"Go to overview page of: \" + itemModel.id,\n color: \"positive\",\n })\n\n onDialogHide()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_scroll_area = _resolveComponent(\"q-scroll-area\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n const _directive_touch_hold = _resolveDirective(\"touch-hold\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n \"transition-show\": \"slide-up\",\n \"transition-hide\": \"slide-down\",\n class: \"full-height\",\n maximized: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"window-height\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n ref_key: \"topNavigationContainer\",\n ref: topNavigationContainer\n }, [\n _createVNode(SfxTopNavigation, {\n title: props.itemDesignation,\n \"navigation-action\": _unref(NavigationAction).CLOSE,\n menuContent: [_unref(ContextAction).CREATE_MODEL],\n \"quick-action\": _unref(ContextAction).CREATE_MODEL,\n \"disable-notifications\": \"\",\n onClose: _unref(onDialogCancel),\n class: \"shadow\"\n }, {\n subtitle: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('modelClassOverlay.subtitle')\n }, null, 8, _hoisted_1)\n ]),\n _: 1\n }, 8, [\"title\", \"navigation-action\", \"menuContent\", \"quick-action\", \"onClose\"]),\n _createVNode(SfxSearchBar, {\n class: \"q-toolbar q-pb-md q-px-md\",\n disable: searchBarDisabled.value\n }, null, 8, [\"disable\"])\n ], 512),\n _createVNode(_component_q_scroll_area, {\n class: \"q-px-md q-pb-sm scrollbar-area\",\n style: _normalizeStyle(contentContainer.value)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(itemModelList) === undefined)\n ? (_openBlock(), _createBlock(SfxSpinner, {\n key: 0,\n text: _unref(spinnerText)\n }, null, 8, [\"text\"]))\n : (_unref(itemModelList)?.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 1,\n class: \"full-width q-px-lg\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).MODEL_NOT_FOUND),\n \"vertical-center\": \"\"\n }, null, 8, [\"missingEntity\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n (filteredItemModels.value.length === 0)\n ? (_openBlock(), _createBlock(SfxEmptyPage, {\n key: 0,\n class: \"full-width q-px-lg\",\n missingEntity: _unref(EmptyStates).get(_unref(MissingEntityType).MODEL_NO_MATCHES),\n \"vertical-center\": \"\"\n }, null, 8, [\"missingEntity\"]))\n : _createCommentVNode(\"\", true),\n (filteredItemModels.value.length > 0)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (!_unref(searchStore).term && props.currentItemModel)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"h6\", _hoisted_3, [\n _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('modelClassOverlay.restricted')\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(props.currentItemClass.designation), 1)\n ]),\n _createElementVNode(\"h6\", _hoisted_5, _toDisplayString(_ctx.$t(\"modelClassOverlay.model_current\")), 1),\n _withDirectives(_createVNode(SfxCardModel, {\n \"item-model\": props.currentItemModel,\n \"item-class-designation\": props.currentItemClass?.designation,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (modelClick(props.currentItemModel)))\n }, null, 8, [\"item-model\", \"item-class-designation\"]), [\n [\n _directive_touch_hold,\n () => modelLongClick(props.currentItemModel),\n void 0,\n { mouse: true }\n ]\n ]),\n _createElementVNode(\"h6\", _hoisted_6, _toDisplayString(_ctx.$t(\"modelClassOverlay.model_other\")), 1)\n ], 64))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(filteredItemModels.value, (itemModel) => {\n return _withDirectives((_openBlock(), _createBlock(SfxCardModel, {\n key: itemModel.id,\n \"item-model\": itemModel,\n \"item-class-designation\": getItemClassDesignation(itemModel.item_class),\n onClick: ($event: any) => (modelClick(itemModel))\n }, null, 8, [\"item-model\", \"item-class-designation\", \"onClick\"])), [\n [\n _directive_touch_hold,\n () => modelLongClick(itemModel),\n void 0,\n { mouse: true }\n ]\n ])\n }), 128))\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 64))\n ])\n ]),\n _: 1\n }, 8, [\"style\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 512))\n}\n}\n\n})","import { Dialog, DialogChainObject } from \"quasar\"\nimport { i18n } from \"src/boot/i18n\"\nimport SfxImageViewOverlay from \"src/components/overlay/SfxImageViewOverlay.vue\"\nimport SfxOverlay from \"src/components/overlay/SfxOverlay.vue\"\nimport SfxOverlayNotifications from \"src/components/overlay/SfxOverlayNotifications.vue\"\nimport { ItemDocument } from \"src/db/collectionDefinitions/csi/item\"\nimport SfxPhotoGalleryOverlay from \"src/pages/manager/overlay/SfxPhotoGalleryOverlay.vue\"\nimport SfxWorkOrderEntityAssignment from \"src/pages/manager/overlay/SfxWorkOrderEntityAssignment.vue\"\nimport ChangePasswordOverlay from \"src/pages/technician/overlay/ChangePasswordOverlay.vue\"\nimport ChangeUnlockKeyOverlay from \"src/pages/technician/overlay/ChangeUnlockKeyOverlay.vue\"\nimport ConfigurationsOverlay from \"src/pages/technician/overlay/ConfigurationsOverlay.vue\"\nimport IdentifyOverlay from \"src/pages/technician/overlay/IdentifyOverlay.vue\"\nimport IssueCreateOverlay from \"src/pages/technician/overlay/IssueCreateOverlay.vue\"\nimport ItemCreateOverlay from \"src/pages/technician/overlay/ItemCreateOverlay.vue\"\nimport ModelClassOverlay from \"src/pages/technician/overlay/ModelClassOverlay.vue\"\nimport { ContextSource } from \"src/util/enums/contextSource\"\nimport { canUpdateEntityAttachments } from \"src/util/functions/attachments\"\nimport { getEntityWithDesignation } from \"src/util/functions/identifier\"\nimport { ImageGalleryItem, ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { ProgressIndicatorState } from \"src/util/types/components/sfxProgressIndicator\"\nimport { AttachmentContext } from \"src/util/types/dataModels/attachment\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { IdentifierAddTarget } from \"src/util/types/dataModels/identifier\"\nimport { Issue, IssueEntity } from \"src/util/types/dataModels/issue\"\nimport { Item } from \"src/util/types/dataModels/item\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport { WorkOrderCorrectiveItem, WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\nimport { OverlayOptions } from \"src/util/types/overlays\"\n\n/**\n * Creates an overlay dialog with {@link SfxOverlay}, and return the {@link DialogChainObject}.\n *\n * @param options that correspond with the props of {@link SfxOverlay}\n */\nexport function showOverlay(options: OverlayOptions): DialogChainObject {\n return Dialog.create({\n component: SfxOverlay,\n componentProps: options,\n })\n}\n\n//region Special purpose overlays\n\nexport function showIdentify(title: string, identifierAddSource?: IdentifierAddTarget) {\n const subtitle = identifierAddSource\n ? getEntityWithDesignation(identifierAddSource.associationType, identifierAddSource.entityName)\n : undefined\n\n return showOverlay({\n title: title,\n contextSource: ContextSource.IDENTIFY,\n subtitle: subtitle,\n subtitleHtml: Boolean(subtitle),\n pageClasses: [\"sfx-identify-overlay__background\"],\n hideSeparator: true,\n hideNotifications: true,\n contentComponent: IdentifyOverlay,\n contentComponentProps: { newIdentifier: identifierAddSource },\n })\n}\n\nexport function showIssueCreate(issueEntity: IssueEntity, unsubmittedWorkId?: string) {\n return Dialog.create({\n component: IssueCreateOverlay,\n componentProps: { issueEntity, unsubmittedWorkId },\n })\n}\n\nexport function showConfigurations() {\n const { t } = i18n.global\n return showOverlay({\n title: t(\"userSettings.title_configurations\"),\n contextSource: ContextSource.CONFIGURATIONS,\n subtitle: t(\"userSettings.title\"),\n contentComponent: ConfigurationsOverlay,\n })\n}\n\nexport function showChangePassword() {\n const { t } = i18n.global\n return showOverlay({\n title: t(\"userSettings.title_change_password\"),\n contextSource: ContextSource.CHANGE_PASSWORD,\n subtitle: t(\"userSettings.title\"),\n contentComponent: ChangePasswordOverlay,\n })\n}\n\nexport function showChangeUnlockKey() {\n const { t } = i18n.global\n return showOverlay({\n title: t(\"userSettings.title_change_unlock_key\"),\n contextSource: ContextSource.CHANGE_UNLOCK_KEY,\n subtitle: t(\"userSettings.title\"),\n contentComponent: ChangeUnlockKeyOverlay,\n })\n}\n\n/**\n * Create the model class overlay\n *\n * itemDesignation is mandatory\n * currentItemClass and currentItemModel are both optional\n * Can pass currentItemClass without currentItemModel\n * But currentItemModel must always be passed together with currentItemClass\n *\n * @param itemDesignation\n * @param canGoToOverview\n * @param currentItemClass\n * @param currentItemModel\n */\nexport function showModelClass(\n itemDesignation: string,\n canGoToOverview = true,\n currentItemClass?: ItemClass,\n currentItemModel?: ItemModel\n) {\n return Dialog.create({\n component: ModelClassOverlay,\n componentProps: { itemDesignation, canGoToOverview, currentItemClass, currentItemModel },\n })\n}\n\nexport function showNotifications() {\n return Dialog.create({\n component: SfxOverlayNotifications,\n })\n}\n\nexport function showImageView(selectedImage: ImageGalleryItem, images: Array) {\n return Dialog.create({\n component: SfxImageViewOverlay,\n componentProps: {\n images,\n selectedIdx: images.findIndex((img) => img.src === selectedImage.src) ?? 0,\n },\n })\n}\n\nexport async function showItemCreate(copiedItem?: Item): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: ItemCreateOverlay,\n componentProps: { copiedItem },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\n//endregion\n\n//Manager mode overlays\n\nexport function showPhotoGalleryOverlay(\n entityId: string,\n entityType: AttachmentContext,\n disableEditImage?: boolean\n): Promise {\n const _disableEditImage = disableEditImage || !canUpdateEntityAttachments(entityType)\n\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxPhotoGalleryOverlay,\n componentProps: { entityId, entityType, disableEditImage: _disableEditImage },\n })\n .onOk((payload) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\nexport function showWorkOrderEntityList(\n workOrder: WorkOrderRegularItem | WorkOrderCorrectiveItem,\n progressState: ProgressIndicatorState,\n entitiesIncluded: Item[] | Issue[],\n entitiesPerformed: Item[] | Issue[],\n entity: EntityPages\n): Promise {\n return new Promise((resolve) =>\n Dialog.create({\n component: SfxWorkOrderEntityAssignment,\n componentProps: { workOrder, progressState, entitiesIncluded, entitiesPerformed, entity },\n })\n .onOk((payload: string[]) => resolve(payload))\n .onCancel(() => resolve(null))\n )\n}\n\n//endregion\n","import script from \"./ModelClassOverlay.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ModelClassOverlay.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QToolbar from 'quasar/src/components/toolbar/QToolbar.js';\nimport QScrollArea from 'quasar/src/components/scroll-area/QScrollArea.js';import TouchHold from 'quasar/src/directives/touch-hold/TouchHold.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QToolbar,QScrollArea});qInstall(script, 'directives', {TouchHold});\n","import { i18n } from \"src/boot/i18n\"\nimport { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { uploadImages } from \"src/util/functions/attachments\"\nimport { getItemClassData } from \"src/util/functions/itemClass\"\nimport { showErrorNotification, showSuccessNotification } from \"src/util/functions/notifications\"\nimport { getIssuesOnItemList } from \"src/util/http/csi/issues\"\nimport {\n getCorrectiveWorkOnItem,\n getCorrectiveWorkOnItemComment,\n getCorrectiveWorkOnItemCommentList,\n getCorrectiveWorkOnItemList,\n getRegularWorkOnItem,\n getRegularWorkOnItemComment,\n getRegularWorkOnItemCommentList,\n getRegularWorkOnItemList,\n patchCorrectiveWorkOnItem,\n patchRegularWorkOnItem,\n postCorrectiveWorkOnItemComment,\n postRegularWorkOnItemComment,\n} from \"src/util/http/csi/performedWork\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { IssuePriority } from \"src/util/types/dataModels/issuePriority\"\nimport { Item } from \"src/util/types/dataModels/item\"\nimport {\n CorrectiveWorkOnItem,\n PerformedWorkComment,\n PerformedWorkCommentPayload,\n PerformedWorkOnItemCardData,\n PerformedWorkOnItemTableData,\n RegularWorkOnItem,\n} from \"src/util/types/dataModels/performedWork\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_PERFORMED_WORK,\n} from \"src/util/types/dataModels/user\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\n\nexport function userHasPermissionToCreatePerformedWork(): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_PERFORMED_WORK, PERMISSION_ACCESS_CREATE)\n}\n\nexport function userHasPermissionToUpdatePerformedWork(\n performedWork: CorrectiveWorkOnItem | RegularWorkOnItem\n): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_PERFORMED_WORK, PERMISSION_ACCESS_UPDATE, {\n workDomainUUID: performedWork.work_domain,\n })\n}\n\nexport async function getLatestCorrectiveWorkOnItem(itemId: string) {\n const db = await getDB()\n const issuesOnItem = await db.issues_on_item\n .find({\n selector: { actionable_item: itemId },\n })\n .exec()\n\n if (issuesOnItem.length === 0) return\n\n const issuesIds = issuesOnItem.map((issue) => issue.id)\n\n const correctiveWork = await db.corrective_work_on_item\n .find()\n .where(\"issue\")\n .in(issuesIds)\n .sort({ declared_dt: \"desc\", created_dt: \"desc\" })\n .limit(1)\n .exec()\n\n if (correctiveWork.length === 0) return\n\n return correctiveWork[0].toMutableJSON()\n}\n\nexport async function getLatestRegularWorkOnItem(itemId: string) {\n const db = await getDB()\n const regularWorkOnItem = await db.regular_work_on_item\n .find({\n selector: { actionable_item: itemId },\n })\n .sort({ declared_dt: \"desc\", created_dt: \"desc\" })\n .limit(1)\n .exec()\n\n if (regularWorkOnItem.length === 0) return\n\n return regularWorkOnItem[0].toMutableJSON()\n}\n\nexport async function getLatestPerformedWork(itemId: string) {\n const latestCorrectiveWork = await getLatestCorrectiveWorkOnItem(itemId)\n const latestRegularWork = await getLatestRegularWorkOnItem(itemId)\n\n if (latestCorrectiveWork && latestRegularWork) {\n return new Date(latestCorrectiveWork.declared_dt || latestCorrectiveWork.created_dt).getTime() >\n new Date(latestRegularWork.declared_dt || latestRegularWork.created_dt).getTime()\n ? latestCorrectiveWork\n : latestRegularWork\n } else return latestCorrectiveWork || latestRegularWork\n}\n\nexport async function filterInvalidWorkDomains(\n workDomains: WorkDomainWorkspace[],\n item: Item | undefined,\n issuePriorityList: IssuePriority[]\n): Promise {\n let filteredWorkDomains = workDomains\n\n // We need only work domains to which the item we are making an issue on can belong\n if (item) {\n const workDomainsAllowedFromItem = await getWorkDomainRestrictionsFromItemClass(item)\n if (workDomainsAllowedFromItem.length > 0) {\n filteredWorkDomains = workDomains.filter((wd) => workDomainsAllowedFromItem.includes(wd.id))\n }\n }\n\n // There could be potentially a work domain without an issue priority, so we get rid of them\n const workDomainsWithIssuePriorities = new Set(issuePriorityList.map((i) => i.work_domain))\n filteredWorkDomains = filteredWorkDomains.filter((wd) =>\n workDomainsWithIssuePriorities.has(wd.id)\n )\n\n return filteredWorkDomains\n}\n\nasync function getWorkDomainRestrictionsFromItemClass(item: Item): Promise {\n try {\n const itemClass = await getItemClassData(item.item_class)\n return itemClass?.restricted_to_work_domains || []\n } catch (error) {\n Log.error({\n message: \"Could not get item class restrictions to work domains\",\n error,\n data: { itemId: item.id, itemClassId: item.item_class },\n })\n\n // silence the error and throw an error, maybe the user would not choose a bad work order\n return []\n }\n}\n\nexport async function getCorrectiveWorkOnItemData(\n correctiveWorkId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const correctiveWorkInCache = cacheStore.corrective_work_on_item.get(correctiveWorkId)\n\n if (correctiveWorkInCache) {\n return correctiveWorkInCache\n } else {\n const db = await getDB()\n const correctiveWorkInDB = await db.corrective_work_on_item.findOne(correctiveWorkId).exec()\n\n if (correctiveWorkInDB) {\n const correctiveWork = correctiveWorkInDB.toMutableJSON()\n cacheStore.corrective_work_on_item.set(correctiveWork.id, correctiveWork)\n return correctiveWork\n } else {\n return await getCorrectiveWorkOnItem({}, correctiveWorkId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching CorrectiveWork data for a given correctiveWorkId\",\n error,\n data: { correctiveWorkId: correctiveWorkId },\n })\n }\n}\n\nexport async function getRegularWorkOnItemData(\n regularWorkId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const regularWorkInCache = cacheStore.regular_work_on_item.get(regularWorkId)\n\n if (regularWorkInCache) {\n return regularWorkInCache\n } else {\n const db = await getDB()\n const regularWorkInDB = await db.regular_work_on_item.findOne(regularWorkId).exec()\n\n if (regularWorkInDB) {\n const regularWork = regularWorkInDB.toMutableJSON()\n cacheStore.regular_work_on_item.set(regularWork.id, regularWork)\n return regularWork\n } else {\n return await getRegularWorkOnItem({}, regularWorkId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching RegularWork data for a given regularWorkId\",\n error,\n data: { regularWorkId: regularWorkId },\n })\n }\n}\n\nexport async function getRaisedIssuedFromRegularWork(workId: string) {\n try {\n const cacheStore = useCacheStore()\n if (cacheStore.issues_on_item.size > 0) {\n const issuesList = Array.from(cacheStore.issues_on_item.values())\n return issuesList.filter((issue) => issue.raised_from === workId)\n }\n\n const db = await getDB()\n const issuesInDb = await db.issues_on_item.find().where(\"raised_from\").eq(workId).exec()\n\n if (issuesInDb.length > 0) {\n return issuesInDb.map((i) => i.toMutableJSON())\n }\n\n const issues = await getIssuesOnItemList({\n filterParams: { raised_from: workId },\n })\n await db.issues_on_item.bulkInsert(issues.results)\n\n return issues.results\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching IssueOnItem data\",\n error,\n })\n }\n}\n\nexport async function acceptCorrectiveWorkOnItem(\n correctiveWorkId: string\n): Promise {\n const { t } = i18n.global\n const userStore = useUserStore()\n\n try {\n const modifiedWork: Partial = {\n concluded_dt: new Date().toJSON(),\n conclusion: \"accepted\",\n concluded_by_user: userStore.id,\n }\n\n const acceptedWork = await patchCorrectiveWorkOnItem({}, correctiveWorkId, modifiedWork)\n const db = await getDB()\n await db.corrective_work_on_item.upsert(acceptedWork)\n\n showSuccessNotification(t(\"notifications.corrective_work_accepted\"))\n return acceptedWork\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_accepting_corrective_work\"))\n Log.error({\n message: \"An error occurred while accepting the CorrectiveWorkOnItem\",\n error,\n data: { correctiveWorkId: correctiveWorkId },\n })\n }\n}\n\nexport async function acceptRegularWorkOnItem(\n regularWorkId: string\n): Promise {\n const { t } = i18n.global\n const userStore = useUserStore()\n\n try {\n const modifiedWork: Partial = {\n concluded_dt: new Date().toJSON(),\n conclusion: \"accepted\",\n concluded_by_user: userStore.id,\n }\n\n const acceptedWork = await patchRegularWorkOnItem({}, regularWorkId, modifiedWork)\n const db = await getDB()\n await db.regular_work_on_item.upsert(acceptedWork)\n\n showSuccessNotification(t(\"notifications.regular_work_accepted\"))\n return acceptedWork\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_accepting_regular_work\"))\n Log.error({\n message: \"An error occurred while accepting the RegularWorkOnItem\",\n error,\n data: { regularWorkId: regularWorkId },\n })\n }\n}\n\nexport async function rejectCorrectiveWorkOnItem(\n correctiveWorkId: string\n): Promise {\n const { t } = i18n.global\n const userStore = useUserStore()\n\n try {\n const modifiedWork: Partial = {\n concluded_dt: new Date().toJSON(),\n conclusion: \"rejected\",\n concluded_by_user: userStore.id,\n }\n\n const rejectedWork = await patchCorrectiveWorkOnItem({}, correctiveWorkId, modifiedWork)\n const db = await getDB()\n await db.corrective_work_on_item.upsert(rejectedWork)\n\n showSuccessNotification(t(\"notifications.corrective_work_rejected\"))\n return rejectedWork\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_rejecting_corrective_work\"))\n Log.error({\n message: \"An error occurred while rejecting the CorrectiveWorkOnItem\",\n error,\n data: { correctiveWorkId: correctiveWorkId },\n })\n }\n}\n\nexport async function rejectRegularWorkOnItem(\n regularWorkId: string\n): Promise {\n const { t } = i18n.global\n const userStore = useUserStore()\n\n try {\n const modifiedWork: Partial = {\n concluded_dt: new Date().toJSON(),\n conclusion: \"rejected\",\n concluded_by_user: userStore.id,\n }\n\n const rejectedWork = await patchRegularWorkOnItem({}, regularWorkId, modifiedWork)\n const db = await getDB()\n await db.regular_work_on_item.upsert(rejectedWork)\n\n showSuccessNotification(t(\"notifications.regular_work_rejected\"))\n return rejectedWork\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_rejecting_regular_work\"))\n Log.error({\n message: \"An error occurred while rejecting the RegularWorkOnItem\",\n error,\n data: { regularWorkId: regularWorkId },\n })\n }\n}\n\nexport async function saveCorrectiveWorkOnItemComment(\n correctiveWorkId: string,\n commentText: string,\n commentImages?: AttachmentUpload[]\n): Promise {\n const userStore = useUserStore()\n\n try {\n const comment: PerformedWorkCommentPayload = {\n text: commentText,\n user: userStore.id,\n performed_work: correctiveWorkId,\n }\n\n const commentInServer = await postCorrectiveWorkOnItemComment({}, comment)\n\n if (commentInServer) {\n if (commentImages && commentImages.length > 0) {\n commentInServer.attachments =\n (await uploadImages(\"corrective_work_item_comment\", commentInServer.id, commentImages)) ||\n []\n }\n\n const db = await getDB()\n await db.corrective_work_item_comments.insert(commentInServer)\n\n return commentInServer\n }\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_adding_comment\"))\n\n Log.error({\n message: \"An error occurred while saving the CorrectiveWorkOnItem comment/attachments\",\n error,\n data: { correctiveWorkId: correctiveWorkId },\n })\n }\n}\n\nexport async function saveRegularWorkOnItemComment(\n regularWorkId: string,\n commentText: string,\n commentImages?: AttachmentUpload[]\n): Promise {\n const userStore = useUserStore()\n\n try {\n const comment: PerformedWorkCommentPayload = {\n text: commentText,\n user: userStore.id,\n performed_work: regularWorkId,\n }\n\n const commentInServer = await postRegularWorkOnItemComment({}, comment)\n\n if (commentInServer) {\n if (commentImages && commentImages.length > 0) {\n commentInServer.attachments =\n (await uploadImages(\"regular_work_item_comment\", commentInServer.id, commentImages)) || []\n }\n\n const db = await getDB()\n await db.regular_work_item_comments.insert(commentInServer)\n\n return commentInServer\n }\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_adding_comment\"))\n\n Log.error({\n message: \"An error occurred while saving the RegularWorkOnItem comment/attachments\",\n error,\n data: { correctiveWorkId: regularWorkId },\n })\n }\n}\n\nexport async function getCorrectiveWorkCommentListForCorrectiveWorkOnItem(\n correctiveWorkId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let commentList: PerformedWorkComment[] = []\n\n if (cacheStore.corrective_work_item_comments.size > 0) {\n for (const commentInCache of cacheStore.corrective_work_item_comments.values()) {\n if (commentInCache.performed_work === correctiveWorkId) {\n commentList.push(commentInCache)\n }\n }\n } else {\n const db = await getDB()\n const commentsInDb = await db.corrective_work_item_comments\n .find({ selector: { performed_work: correctiveWorkId } })\n .exec()\n\n if (commentsInDb.length > 0) {\n for (const comment of commentsInDb) {\n const commentMutable = comment.toMutableJSON()\n cacheStore.corrective_work_item_comments.set(commentMutable.id, commentMutable)\n commentList.push(comment)\n }\n } else {\n const commentsInServer = await getCorrectiveWorkOnItemCommentList({\n mainParams: undefined,\n filterParams: { performed_work: correctiveWorkId },\n })\n commentList = commentsInServer.results\n }\n }\n return commentList.sort((a, b) => b.created_dt.localeCompare(a.created_dt))\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching CorrectiveWorkOnItemComment data for the given CorrectiveWork\",\n error,\n data: { correctiveWorkId: correctiveWorkId },\n })\n }\n}\n\nexport async function getRegularWorkCommentListForRegularWorkOnItem(\n regularWorkId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let commentList: PerformedWorkComment[] = []\n\n if (cacheStore.regular_work_item_comments.size > 0) {\n for (const commentInCache of cacheStore.regular_work_item_comments.values()) {\n if (commentInCache.performed_work === regularWorkId) {\n commentList.push(commentInCache)\n }\n }\n } else {\n const db = await getDB()\n const commentsInDb = await db.regular_work_item_comments\n .find({ selector: { performed_work: regularWorkId } })\n .exec()\n\n if (commentsInDb.length > 0) {\n for (const comment of commentsInDb) {\n const commentMutable = comment.toMutableJSON()\n cacheStore.regular_work_item_comments.set(commentMutable.id, commentMutable)\n commentList.push(comment)\n }\n } else {\n const commentsInServer = await getRegularWorkOnItemCommentList({\n mainParams: undefined,\n filterParams: { performed_work: regularWorkId },\n })\n commentList = commentsInServer.results\n }\n }\n return commentList.sort((a, b) => b.created_dt.localeCompare(a.created_dt))\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching RegularWorkOnItemComment data for the given RegularWork\",\n error,\n data: { regularWorkId: regularWorkId },\n })\n }\n}\n\nexport async function getCorrectiveWorkOnItemCommentData(\n commentId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const commentInCache = cacheStore.corrective_work_item_comments.get(commentId)\n\n if (commentInCache) {\n return commentInCache\n } else {\n const db = await getDB()\n const commentInDb = await db.corrective_work_item_comments.findOne(commentId).exec()\n\n if (commentInDb) {\n const mutableComment = commentInDb.toMutableJSON()\n cacheStore.corrective_work_item_comments.set(mutableComment.id, mutableComment)\n return mutableComment\n } else {\n return await getCorrectiveWorkOnItemComment({}, commentId)\n }\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching CorrectiveWorkOnItem PerformedWorkComment data for a given commentId\",\n error,\n data: { commentId: commentId },\n })\n }\n}\n\nexport async function getRegularWorkOnItemCommentData(\n commentId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const commentInCache = cacheStore.regular_work_item_comments.get(commentId)\n\n if (commentInCache) {\n return commentInCache\n } else {\n const db = await getDB()\n const commentInDb = await db.regular_work_item_comments.findOne(commentId).exec()\n\n if (commentInDb) {\n const mutableComment = commentInDb.toMutableJSON()\n cacheStore.regular_work_item_comments.set(mutableComment.id, mutableComment)\n return mutableComment\n } else {\n return await getRegularWorkOnItemComment({}, commentId)\n }\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching RegularWorkOnItem PerformedWorkComment data for a given commentId\",\n error,\n data: { commentId: commentId },\n })\n }\n}\n\nexport async function getUnassessedWorkStats(): Promise<\n { corrective: number; regular: number } | undefined\n> {\n try {\n const db = await getDB()\n const regular = await db.regular_work_on_item\n .find({ selector: { conclusion: { $not: null } } })\n .exec()\n const corrective = await db.corrective_work_on_item\n .find({ selector: { conclusion: { $not: null } } })\n .exec()\n return { corrective: corrective.length, regular: regular.length }\n } catch (error) {\n Log.error({ message: \"Unable to get unassessed performed work\", error })\n }\n}\n\nexport async function getCommentForClosedCorrectiveWorkOnItem(correctiveWorkId: string) {\n const commentList = await getCorrectiveWorkCommentListForCorrectiveWorkOnItem(correctiveWorkId)\n\n // Since the comment section get disabled for 'concluded' CorrectiveWork,\n // we can take the last comment as the closing comment\n if (commentList && commentList.length > 0) return commentList[0].text\n}\n\nexport async function getCorrectiveWorkOnItemListForWorkOrder(\n workOrderId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let correctiveWorkList: CorrectiveWorkOnItem[] = []\n\n if (cacheStore.corrective_work_on_item.size > 0) {\n for (const correctiveWorkInCache of cacheStore.corrective_work_on_item.values()) {\n if (correctiveWorkInCache.work_order === workOrderId) {\n correctiveWorkList.push(correctiveWorkInCache)\n }\n }\n } else {\n const db = await getDB()\n const correctiveWorkInDB = await db.corrective_work_on_item\n .find({ selector: { work_order: workOrderId } })\n .exec()\n\n if (correctiveWorkInDB.length > 0) {\n for (const correctiveWork of correctiveWorkInDB) {\n const correctiveWorkMutable = correctiveWork.toMutableJSON()\n cacheStore.corrective_work_on_item.set(correctiveWorkMutable.id, correctiveWorkMutable)\n correctiveWorkList.push(correctiveWork)\n }\n } else {\n const correctiveWorkInServer = await getCorrectiveWorkOnItemList({\n mainParams: undefined,\n filterParams: { work_order: workOrderId },\n })\n correctiveWorkList = correctiveWorkInServer.results\n }\n }\n return correctiveWorkList\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching CorrectiveWorkOnItem list for the given WorkOrderId\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\n/**\n * Counts the amount of performed corrective work relating to a corrective work order.\n */\nexport async function countPerformedCorrectiveWorkOnWorkOrder(\n workOrderId: string\n): Promise {\n try {\n const db = await getDB()\n const records = await db.corrective_work_on_item\n .find({ selector: { work_order: workOrderId } })\n .exec()\n return records.length\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching CorrectiveWorkOnItem list for the given WorkOrderId\",\n error,\n data: { workOrderId: workOrderId },\n })\n return 0\n }\n}\n\nexport async function getRegularWorkOnItemListForWorkOrder(\n workOrderId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let regularWorkList: RegularWorkOnItem[] = []\n\n if (cacheStore.regular_work_on_item.size > 0) {\n for (const regularWorkInCache of cacheStore.regular_work_on_item.values()) {\n if (regularWorkInCache.work_order === workOrderId) {\n regularWorkList.push(regularWorkInCache)\n }\n }\n } else {\n const db = await getDB()\n const regularWorkInDB = await db.regular_work_on_item\n .find({ selector: { work_order: workOrderId } })\n .exec()\n\n if (regularWorkInDB.length > 0) {\n for (const regularWork of regularWorkInDB) {\n const regularWorkMutable = regularWork.toMutableJSON()\n cacheStore.regular_work_on_item.set(regularWorkMutable.id, regularWorkMutable)\n regularWorkList.push(regularWork)\n }\n } else {\n const regularWorkInServer = await getRegularWorkOnItemList({\n mainParams: undefined,\n filterParams: { work_order: workOrderId },\n })\n regularWorkList = regularWorkInServer.results\n }\n }\n return regularWorkList\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching RegularWorkOnItem list for the given WorkOrderId\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\n/**\n * Sort performed work data by its declared_dt || created_dt.\n *\n * This is applicable for both card and table data.\n *\n * @param a\n * @param b\n */\nexport function sortPerformedWorkData(\n a: PerformedWorkOnItemCardData | PerformedWorkOnItemTableData,\n b: PerformedWorkOnItemCardData | PerformedWorkOnItemTableData\n): number {\n return (\n new Date(\n b.performedWorkOnItemData.declared_dt || b.performedWorkOnItemData.created_dt\n ).getTime() -\n new Date(\n a.performedWorkOnItemData.declared_dt || a.performedWorkOnItemData.created_dt\n ).getTime()\n )\n}\n","import { date } from \"quasar\"\n\nexport function getRandomInt(max: number, min = 0) {\n return Math.floor(Math.random() * (max - min) + min)\n}\n\nfunction numberOfLetters(letterCount: number) {\n let text = \"\"\n\n if (letterCount <= 0) return text\n\n for (let i = 0; i < letterCount; i++) {\n text += String.fromCodePoint(getRandomInt(90, 65)) // ASCII\n }\n\n return text\n}\n\nfunction numberOfNumbers(numberCount: number) {\n let text = \"\"\n\n if (numberCount <= 0) return text\n\n for (let i = 0; i < numberCount; i++) {\n text += getRandomInt(9).toString()\n }\n\n return text\n}\n\nexport function getRandomID(chars?: number) {\n switch (chars) {\n // F.x \"01\" - Attribute set ID\n case 2:\n return numberOfNumbers(2)\n\n // F.x \"VZ-1\" - Zone ID\n case 3:\n return `${numberOfLetters(2)}-${numberOfNumbers(1)}`\n\n // F.x \"AD-01\" - Attribute ID\n case 4:\n return `${numberOfLetters(2)}-${numberOfNumbers(2)}`\n\n // F.x \"ID-AD-1\" - Layout ID\n case 5:\n return `${numberOfLetters(2)}-${numberOfLetters(2)}-${numberOfNumbers(1)}`\n\n // F.x \"AD-CD-01\" - Area ID\n case 6:\n return `${numberOfLetters(2)}-${numberOfLetters(2)}-${numberOfNumbers(2)}`\n\n // F.x \"1278-15-10-45\" - Relation ID\n case 10:\n return `${numberOfNumbers(4)}-${numberOfNumbers(2)}-${numberOfNumbers(2)}-${numberOfNumbers(\n 2\n )}`\n\n // F.x \"ElE-R-2023-002\" - Relation representation\n case 11:\n return `${numberOfLetters(3)}-${numberOfLetters(1)}-${numberOfNumbers(4)}-${numberOfNumbers(\n 3\n )}`\n\n // F.x \"AD-CD-01\" - Area ID\n default:\n return `${numberOfLetters(2)}-${numberOfLetters(2)}-${numberOfNumbers(2)}`\n }\n}\n\n// This is used for mock polygon data\nexport function getRandomCoordinates(\n latMin = -90,\n latMax = 90,\n lngMin = -180,\n lngMax = 180\n): [number, number] {\n const lat = Math.random() * (latMax - latMin) + latMin\n const lng = Math.random() * (lngMax - lngMin) + lngMin\n\n return [lat, lng]\n}\n\nexport function getTimeOfEvent(context: \"today\" | \"recent\" | \"old\" | \"random\") {\n switch (context) {\n case \"today\":\n return date.subtractFromDate(new Date(), { hours: getRandomInt(24) }) // less than a day old\n case \"recent\":\n return date.subtractFromDate(new Date(), { days: getRandomInt(7) }) // less than a week old\n case \"old\":\n return date.subtractFromDate(new Date(), { days: getRandomInt(365, 91) }) // more than 90 days old\n case \"random\":\n return date.subtractFromDate(new Date(), { days: getRandomInt(90, 7) }) // between 7-90 days old\n default:\n return date.subtractFromDate(new Date(), { days: getRandomInt(2000, 7) }) // more than a week old\n }\n}\n","export function showScrollbar() {\n const el = document.querySelector(\".cover-bar\")\n el?.classList.add(\"scrollbar-visible\")\n}\n\nexport function hideScrollbar() {\n const el = document.querySelector(\".cover-bar\")\n el?.classList.remove(\"scrollbar-visible\")\n}\n","import { i18n } from \"src/boot/i18n\"\n\n/**\n * Returns an appropriate greeting based on the time of the day.\n * Format is: \"Good X, Y!\", where Y is the current user name and X is:\n *\n *
    \n *
  • 00 - 8:59 - morning
  • \n *
  • 09 - 12:59 - day
  • \n *
  • 13 - 17:59 - afternoon
  • \n *
  • 18 - 23:59 - evening
  • \n *
\n */\nexport function getGreeting(userEmail?: string) {\n const { t } = i18n.global\n const currentHours = new Date().getHours()\n // Should be username, but we don't currently have that info\n let appropriateGreeting = \"\"\n\n if (currentHours >= 0 && currentHours < 9) {\n appropriateGreeting = t(\"time.good_morning\")\n } else if (currentHours >= 9 && currentHours < 13) {\n appropriateGreeting = t(\"time.good_day\")\n } else if (currentHours >= 13 && currentHours < 18) {\n appropriateGreeting = t(\"time.good_afternoon\")\n } else {\n appropriateGreeting = t(\"time.good_evening\")\n }\n\n userEmail = userEmail?.trim()\n return userEmail !== \"\" && userEmail !== undefined\n ? `${appropriateGreeting}, ${userEmail}`\n : `${appropriateGreeting}`\n}\n\n// Format a given Date as YYYY-MM-DD HH:mm. Can exclude time if needed.\nfunction formatDate(date: Date, withTime: boolean = true) {\n const year = date.getFullYear()\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\")\n const currentDate = date.getDate().toString().padStart(2, \"0\")\n const dateFormatted = [year, month, currentDate].join(\"-\")\n if (!withTime) {\n return dateFormatted\n }\n\n const hours = date.getUTCHours().toString().padStart(2, \"0\")\n const minutes = date.getUTCMinutes().toString().padStart(2, \"0\")\n return dateFormatted + \" \" + [hours, minutes].join(\":\")\n}\n\n// Get the notification message\nfunction getNotificationMsg(minutes: number, hours: number, days: number, sysTimeStamp: string) {\n const { t } = i18n.global\n if (minutes == 1) {\n return minutes + t(\"time.minute_ago\")\n } else if (minutes < 60) {\n return minutes + t(\"time.minutes_ago\")\n } else if (hours == 1) {\n return hours + t(\"time.hour_ago\")\n } else if (hours < 24) {\n return hours + t(\"time.hours_ago\")\n } else if (days == 1) {\n return days + t(\"time.day_ago\")\n } else if (days < 7) {\n return days + t(\"time.days_ago\")\n } else {\n return sysTimeStamp\n }\n}\n\n// Get the deadline message\nfunction getDeadlineMsg(days: number, past: boolean, date: Date) {\n const { t } = i18n.global\n if (days <= 0) {\n return t(\"time.today\")\n }\n\n if (past) {\n if (days == 1) {\n return days + t(\"time.day_ago\")\n } else if (days < 7) {\n return days + t(\"time.days_ago\")\n } else {\n const weeks = Math.floor(days / 7)\n if (weeks <= 8) {\n return t(\"time.x_weeks_ago\", { weeks }, weeks)\n }\n return t(\"time.was_date\", { date: formatDate(date, false) })\n }\n }\n\n if (days == 1) {\n return t(\"time.in\") + days + t(\"time.day\")\n } else if (days <= 7) {\n return t(\"time.in\") + days + t(\"time.days\")\n } else {\n const weeks = Math.floor(days / 7)\n if (weeks <= 8) {\n return t(\"time.in_x_weeks\", { weeks }, weeks)\n }\n return formatDate(date, false)\n }\n}\n\n/**\n * Returns the temporal info in a humanized form when the date and time is closer to the present\n *\n * @param timeStamp In UTC format (ex: 2020-07-16T10:30:01.000Z)\n * @param identifier Location where the temporal info is displayed in the UI. The different options are described below:\n *
    \n *
  • card - in cards
  • \n *
  • objOverviewIssue - issues in object overviews
  • \n *
  • objOverviewWorkOrder - work orders in object overviews
  • \n *
  • deadline - for deadline in work order cards
  • \n *
\n *\n * */\nexport function getTemporalInfo(\n timeStamp: string,\n identifier: \"card\" | \"objOverviewIssue\" | \"objOverviewWorkOrder\" | \"deadline\" | \"date\"\n) {\n const { t } = i18n.global\n const now = new Date()\n now.setSeconds(0, 0)\n\n const match = /(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+)/.exec(timeStamp)\n\n // Shouldn't happen, but just in case\n if (!match) {\n return Number.NaN\n }\n\n // Remove the unnecessary data\n match.shift()\n\n const [year, month, day, hour, min] = match.map(Number)\n\n // Change date string's time zone to UTC and get timestamp:\n const sysTime = Date.UTC(year, month - 1, day, hour, min)\n\n // Get the system time stamp in YYYY-MM-DD HH:mm format\n const date = new Date(Date.UTC(year, month - 1, day, hour, min))\n const sysTimeStamp = formatDate(date)\n\n // Get the current time\n const currentDateTime = now.getTime()\n\n // Time difference in minutes\n const offset = Math.floor((currentDateTime - sysTime) / (1000 * 60))\n const offsetMinutes = Math.abs(offset)\n const offsetHours = Math.floor(Math.abs(offset) / 60)\n const offsetDays = Math.floor(Math.abs(offset) / (60 * 24))\n\n switch (identifier) {\n case \"card\":\n return getNotificationMsg(offsetMinutes, offsetHours, offsetDays, sysTimeStamp)\n case \"objOverviewIssue\":\n return (\n t(\"time.latest_raised\") +\n getNotificationMsg(offsetMinutes, offsetHours, offsetDays, sysTimeStamp)\n )\n case \"objOverviewWorkOrder\":\n return t(\"time.deadline\") + \" \" + getDeadlineMsg(offsetDays, offset > 0, date).toLowerCase()\n case \"date\":\n return sysTimeStamp\n default:\n return getDeadlineMsg(offsetDays, offset > 0, date)\n }\n}\n\n/**\n * Returns the time duration in a human-readable format\n *\n * If timeEstimate has Days\n * return X days and Y hours\n * Else If timeEstimate has Hours\n * return Y hours and Z minutes\n * Else If timeEstimate has minutes\n * return Z minutes\n * Else\n * return Less than a minute\n *\n * @param timeEstimate In the format -> Days Hours:Minutes:Seconds\n * Ex: \"4 13:34:36\", \"17:04:09\", \"00:08:05\", \"00:00:07\"\n */\nexport function getTimeRequirement(timeEstimate: string) {\n const { t } = i18n.global\n let data = timeEstimate.trim()\n let day = 0\n\n if (data.includes(\" \")) {\n const split = data.split(\" \")\n day = Number(split[0])\n data = split[1]\n }\n\n const hoursAndMinutes = data.split(\":\")\n const hour = Number(hoursAndMinutes[0])\n const minute = Number(hoursAndMinutes[1])\n\n if (day) {\n return getDaysRequirement(day, hour)\n } else if (hour) {\n return getHoursRequirement(hour, minute)\n } else if (minute) {\n return minute > 1\n ? t(\"time.minutes_with_placeholder\", { minute: minute })\n : t(\"time.minute_with_placeholder\", { minute: minute })\n } else {\n return t(\"time.less_than_a_minute\")\n }\n}\n\nfunction getDaysRequirement(day: number, hour: number) {\n const { t } = i18n.global\n\n if (day > 1 && hour > 1) {\n return t(\"time.days_and_hours\", { day: day, hour: hour })\n } else if (day > 1) {\n if (hour == 0) return t(\"time.days_with_placeholder\", { day: day })\n return t(\"time.days_and_hour\", { day: day, hour: hour })\n } else if (hour > 1) {\n return t(\"time.day_and_hours\", { day: day, hour: hour })\n } else {\n if (hour == 0) return t(\"time.day_with_placeholder\", { day: day })\n return t(\"time.day_and_hour\", { day: day, hour: hour })\n }\n}\n\nfunction getHoursRequirement(hour: number, minute: number) {\n const { t } = i18n.global\n\n if (hour > 1 && minute > 1) {\n return t(\"time.hours_and_minutes\", { hour: hour, minute: minute })\n } else if (hour > 1) {\n if (minute == 0) return t(\"time.hours_with_placeholder\", { hour: hour })\n return t(\"time.hours_and_minute\", { hour: hour, minute: minute })\n } else if (minute > 1) {\n return t(\"time.hour_and_minutes\", { hour: hour, minute: minute })\n } else {\n if (minute == 0) return t(\"time.hour_with_placeholder\", { hour: hour })\n return t(\"time.hour_and_minute\", { hour: hour, minute: minute })\n }\n}\n\nexport function getHourMinuteRequirement(hour: number, minute: number) {\n const { t } = i18n.global\n\n if (hour > 1 && minute > 1) {\n return t(\"time.hours_minutes\", { hour: hour, minute: minute })\n } else if (hour > 1) {\n if (minute !== 1) return t(\"time.hours_with_placeholder\", { hour: hour })\n return t(\"time.hours_minute\", { hour: hour })\n } else if (minute > 1) {\n if (hour === 1) return t(\"time.hour_minutes\", { minute: minute })\n return t(\"time.minutes_with_placeholder\", { minute: minute })\n } else if (minute === 1) {\n if (hour === 1) return t(\"time.hour_minute\")\n return t(\"time.minute_with_placeholder\", { minute: minute })\n } else {\n if (hour === 1) return t(\"time.hour_with_placeholder\", { hour: hour })\n return t(\"time.less_than_a_minute\")\n }\n}\n","import { getChangesDB, getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { blobToBase64 } from \"src/util/functions/misc\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport {\n UnsubmittedAttachment,\n UnsubmittedWork,\n UnsubmittedWorkWithEntity,\n} from \"src/util/types/dataModels/unsubmittedWork\"\nimport { v4 as uuidv4 } from \"uuid\"\n\nexport async function getUnsubmittedWork(unsubmittedWorkId: string) {\n try {\n const changeDb = await getChangesDB()\n const unsubmittedWork = await changeDb.unsubmitted_work.findOne(unsubmittedWorkId).exec()\n\n return unsubmittedWork?.toMutableJSON()\n } catch (error) {\n Log.error({ message: \"An error occurred while fetching Unsubmitted Work data\", error })\n }\n}\n\n/**\n * Returns a list of unsubmitted regular work for a given entity\n *\n * @param entityId entity UUID\n * @param entityType `item` or `area`\n */\nexport async function getUnsubmittedRegularWorkForEntity(entityId: string, entityType: string) {\n try {\n const changeDb = await getChangesDB()\n const unsubmittedWorkList = await changeDb.unsubmitted_work\n .find({\n selector: {\n entity_type: {\n $eq: entityType,\n },\n entity_id: {\n $eq: entityId,\n },\n },\n })\n .exec()\n\n return unsubmittedWorkList?.map((unsubmittedWork) => unsubmittedWork.toMutableJSON())\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching UnsubmittedRegularWork list for entity\",\n error,\n })\n }\n}\n\n/**\n * Returns a list of unsubmitted corrective work for a given issue UUID list\n *\n * @param issueIds issue UUID list\n */\nexport async function getUnsubmittedCorrectiveWorkForIssue(issueIds: string[]) {\n try {\n const changeDb = await getChangesDB()\n const unsubmittedWorkList = await changeDb.unsubmitted_work\n .find({\n selector: {\n entity_type: {\n $eq: \"issue\",\n },\n entity_id: {\n $in: issueIds,\n },\n },\n })\n .exec()\n\n return unsubmittedWorkList?.map((unsubmittedWork) => unsubmittedWork.toMutableJSON())\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching UnsubmittedCorrectiveWork list for Issue ID list\",\n error,\n })\n }\n}\n\nexport async function deleteUnsubmittedWorkAttachments(unsubmittedAttachmentIds: string[]) {\n try {\n const changeDb = await getChangesDB()\n await changeDb.unsubmitted_attachment.bulkRemove(unsubmittedAttachmentIds)\n } catch (error) {\n Log.error({\n message: \"An error occurred while deleting Unsubmitted Work attachments\",\n error,\n })\n }\n}\n\nexport async function getUnsubmittedAttachments(\n unsubmittedAttachmentIds: string[]\n): Promise {\n try {\n const changeDb = await getChangesDB()\n const unsubmittedImages: AttachmentUpload[] = []\n\n const unsubmittedAttachmentsMap = await changeDb.unsubmitted_attachment\n .findByIds(unsubmittedAttachmentIds)\n .exec()\n\n if (unsubmittedAttachmentsMap.size > 0) {\n for (const attachment of unsubmittedAttachmentsMap.values()) {\n const blob = await fetch(attachment.fileData).then((response) => response.blob())\n const file = new File([blob], attachment.name, {\n type: attachment.mimeType,\n })\n\n const image = {\n name: attachment.name,\n data: file,\n }\n unsubmittedImages.push(image)\n }\n }\n return unsubmittedImages\n } catch (error) {\n Log.error({\n message: \"An error occurred while trying to fetch the unsubmitted image data\",\n error,\n })\n }\n}\n\nexport async function saveUnsubmittedAttachments(\n uploadedImages: AttachmentUpload[] | undefined\n): Promise {\n try {\n if (!(uploadedImages && uploadedImages?.length > 0)) return\n\n const changeDb = await getChangesDB()\n const unsubmittedImages: UnsubmittedAttachment[] = []\n\n for (const image of uploadedImages) {\n const fileName = image.name || \"\"\n const type = image.data.type\n const fileData = await blobToBase64(image.data.slice())\n\n const attachment = {\n id: uuidv4(),\n name: fileName,\n mimeType: type,\n fileData: fileData as string,\n }\n unsubmittedImages.push(attachment)\n }\n await changeDb.unsubmitted_attachment.bulkUpsert(unsubmittedImages)\n\n return unsubmittedImages.map((image) => image.id)\n } catch (error) {\n Log.error({\n message: \"An error occurred while trying to save the unsubmitted image data in RxDB\",\n error,\n })\n }\n}\n\nexport async function getUnsubmittedWorkCardData(\n unsubmittedWork: UnsubmittedWork\n): Promise {\n try {\n const db = await getChangesDB()\n\n const entityData = await getUnsubmittedWorkEntityData(\n unsubmittedWork.entity_id,\n unsubmittedWork.entity_type\n )\n\n let unsubmittedWorkIssue\n if (unsubmittedWork.unsubmitted_work_issues) {\n const unsubmittedWorkIssueDocuments = await db.unsubmitted_work_issue\n .find()\n .where(\"id\")\n .in(unsubmittedWork.unsubmitted_work_issues)\n .exec()\n unsubmittedWorkIssue = unsubmittedWorkIssueDocuments.map((issue) => issue.toMutableJSON())\n }\n\n return {\n unsubmittedWork: unsubmittedWork,\n entityData,\n unsubmittedWorkIssue,\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while fetching UnsubmittedWorkCard data\", error })\n }\n}\n\n/**\n * Get the entity data related to the entity id\n *\n * @param id entity UUID\n * @param entityType item | area | issue\n */\nexport async function getUnsubmittedWorkEntityData(id: string, entityType: string) {\n try {\n const cacheStore = useCacheStore()\n\n switch (entityType) {\n case \"item\":\n let item\n const itemInCache = cacheStore.item.get(id)\n\n if (itemInCache) {\n item = itemInCache\n } else {\n const db = await getDB()\n const itemInDbDocument = await db.item.findOne(id).exec()\n if (itemInDbDocument) item = itemInDbDocument.toJSON()\n }\n return item?.item_id + \" - \" + item?.designation\n\n case \"area\":\n return // TODO: Get Area entity data\n\n case \"issue\":\n let issue\n const issueInCache = cacheStore.issues_on_item.get(id)\n\n if (issueInCache) {\n issue = issueInCache\n } else {\n const db = await getDB()\n const issueInDbDocument = await db.issues_on_item.findOne(id).exec()\n if (issueInDbDocument) issue = issueInDbDocument.toJSON()\n }\n return issue?.reference + \" - \" + issue?.title\n }\n } catch (error) {\n Log.error({ message: \"An error occurred while fetching entity data\", error })\n }\n}\n","export const SERVER_ERROR_INCORRECT_PASSWORD = \"The current password is incorrect.\"\n","import { Capacitor } from \"@src-capacitor/@capacitor/core\"\nimport { AxiosError, CanceledError, isAxiosError } from \"axios\"\nimport { springboardAPI } from \"src/boot/axios\"\nimport { i18n } from \"src/boot/i18n\"\nimport { getCommonDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { CACHE_AVATARS } from \"src/util/constants/configurations\"\nimport { SERVER_ERROR_INCORRECT_PASSWORD } from \"src/util/constants/serverErrors\"\nimport { SpringboardURL } from \"src/util/enums/urls\"\nimport { getUser, getUserImage } from \"src/util/http/springboard/user\"\nimport { UserAvatar, UserBasic, UserWithAvatar } from \"src/util/types/dataModels/user\"\n\nexport function getPasswordRequirements(currentPassword: string) {\n const { t } = i18n.global\n\n return [\n (val: string) => /[A-Z]/.test(val) || t(\"sfxDialogChangePassword.requirement_one_uppercase\"),\n (val: string) => /[a-z]/.test(val) || t(\"sfxDialogChangePassword.requirement_one_lowercase\"),\n (val: string) => /\\d/.test(val) || t(\"sfxDialogChangePassword.requirement_one_number\"),\n (val: string) =>\n /[^\\dA-Za-z]/.test(val) || t(\"sfxDialogChangePassword.requirement_one_special_char\"),\n (val: string) => val.length > 10 || t(\"sfxDialogChangePassword.requirement_min_char\"),\n (val: string) => val.length < 128 || t(\"sfxDialogChangePassword.requirement_max_char\"),\n (val: string) =>\n val !== currentPassword || t(\"sfxDialogChangePassword.requirement_same_as_old\"),\n ]\n}\n\nexport function isIncorrectPassword(error: AxiosError): boolean {\n const errorMessage: Record | undefined = error.response?.data as\n | Record\n | undefined\n\n return (\n Boolean(errorMessage) &&\n Array.isArray(errorMessage?.current_password) &&\n errorMessage?.current_password[0] === SERVER_ERROR_INCORRECT_PASSWORD\n )\n}\n\nexport async function getUserData(userId: string): Promise {\n try {\n const cacheStore = useCacheStore()\n const userInCache = cacheStore.user.get(userId)\n\n if (userInCache) {\n return userInCache\n } else {\n const db = await getCommonDB()\n const userInDB = await db.user.findOne(userId).exec()\n\n if (userInDB) {\n const userMutable = userInDB.toMutableJSON()\n cacheStore.user.set(userMutable.id, userMutable)\n return userMutable\n }\n\n return await getUser({}, userId)\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching User data\",\n error,\n })\n }\n}\n\nexport async function getUserWithAvatarData(userId: string): Promise {\n try {\n const userData: UserWithAvatar | undefined = await getUserData(userId)\n if (userData) {\n return addUserAvatarToUser(userData)\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching User with Avatar data\",\n error,\n })\n }\n}\n\nexport async function addUserAvatarToUser(user: UserBasic): Promise {\n const avatar = await getUserAvatarData(user.id)\n return { ...user, avatar }\n}\n\nexport async function getUserAvatarData(userId: string): Promise {\n const cacheStore = useCacheStore()\n let userAvatar: UserAvatar | undefined\n const avatarInCache = cacheStore.user_avatar.get(userId)\n const db = await getCommonDB()\n\n if (avatarInCache) {\n userAvatar = avatarInCache\n } else {\n const avatarInDB = await db.user_avatar.findOne(userId).exec()\n\n if (avatarInDB) {\n cacheStore.user_avatar.set(userId, avatarInDB)\n userAvatar = avatarInDB\n }\n }\n\n return process.env.MODE === \"capacitor\"\n ? getUserAvatarDataCapacitor(userId, userAvatar)\n : getUserAvatarDataWeb(userId, userAvatar)\n}\n\nexport async function saveUserAvatar(userId: string, avatar: Blob) {\n return process.env.MODE === \"capacitor\"\n ? saveUserAvatarCapacitor(userId, avatar)\n : saveUserAvatarWeb(userId, avatar)\n}\n\nasync function getUserAvatarDataCapacitor(\n userId: string,\n userAvatar?: UserAvatar\n): Promise {\n if (userAvatar?.path) {\n return Capacitor.convertFileSrc(userAvatar.path)\n }\n\n const newUserAvatar = await saveUserAvatarCapacitor(userId)\n if (newUserAvatar) return Capacitor.convertFileSrc(newUserAvatar.path)\n}\n\nasync function saveUserAvatarCapacitor(userId: string, avatar?: Blob) {\n try {\n const file = avatar || (await getUserImage({}, userId))\n\n if (!file) return\n\n const { Directory } = await import(\"@src-capacitor/@capacitor/filesystem/dist/esm/definitions\")\n const write_blob = await import(\"@src-capacitor/capacitor-blob-writer\")\n const db = await getCommonDB()\n\n const fileDir = await write_blob.default({\n path: userId,\n blob: file,\n directory: Directory.Data,\n recursive: true,\n })\n\n return await db.user_avatar.upsert({ id: userId, type: file.type, path: fileDir })\n } catch (error) {\n // Request was canceled or the user doesn't have an avatar. No point doing anything\n if (error instanceof CanceledError || (isAxiosError(error) && error.response?.status === 404)) {\n return\n }\n\n Log.error({ message: \"Could not download user avatar\", error, data: { userId } })\n }\n}\n\nasync function getUserAvatarDataWeb(\n userId: string,\n userAvatar?: UserAvatar\n): Promise {\n const cache = await caches.open(CACHE_AVATARS)\n\n if (userAvatar?.path) {\n const foundImage = await cache.match(userAvatar.path)\n if (foundImage) {\n const blob = await foundImage.blob()\n return URL.createObjectURL(blob)\n }\n }\n\n const newUserAvatar = await saveUserAvatarWeb(userId)\n if (newUserAvatar) {\n const foundImage = await cache.match(newUserAvatar.path)\n if (foundImage) {\n const blob = await foundImage.blob()\n return URL.createObjectURL(blob)\n }\n }\n}\n\nasync function saveUserAvatarWeb(userId: string, avatar?: Blob) {\n try {\n const file = avatar || (await getUserImage({}, userId))\n\n if (!file) return\n\n const db = await getCommonDB()\n const path = getWebUserAvatarURL(userId)\n const cache = await caches.open(CACHE_AVATARS)\n await cache.put(path, new Response(file))\n return await db.user_avatar.upsert({ id: userId, type: file.type, path })\n } catch (error) {\n // Request was canceled or the user doesn't have an avatar. No point doing anything\n if (error instanceof CanceledError || (isAxiosError(error) && error.response?.status === 404)) {\n return\n }\n\n Log.error({ message: \"Could not download user avatar\", error, data: { userId } })\n }\n}\n\nfunction getWebUserAvatarURL(userId: string) {\n const base = springboardAPI.defaults.baseURL\n const url = SpringboardURL.USER_ID_IMAGE.replace(\"{id}\", userId)\n return base + url\n}\n","import { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { getWorkDomainWorkspace } from \"src/util/http/csi/workDomainsWorkspace\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\n\nexport async function getWorkDomainWorkspaceData(\n workDomainId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const workDomainInCache = cacheStore.work_domain_workspace.get(workDomainId)\n\n if (workDomainInCache) {\n // We have it in cache, return that\n return workDomainInCache\n } else {\n const db = await getDB()\n const workDomainInDb = await db.work_domain_workspace.findOne(workDomainId).exec()\n\n if (workDomainInDb) {\n // We have it in DB - return that and set it in the cache\n const workDomainMutable = workDomainInDb.toMutableJSON()\n cacheStore.work_domain_workspace.set(workDomainMutable.id, workDomainMutable)\n return workDomainMutable\n } else {\n // We get from the server and add it to the DB. Automatically set to cache on insert.\n const workDomain = await getWorkDomainWorkspace({}, workDomainId)\n await db.work_domain_workspace.insert(workDomain)\n return workDomain\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Work Domain Workspace data\",\n error,\n })\n }\n}\n","import { i18n } from \"src/boot/i18n\"\nimport { WorkOrderPriorityDocument } from \"src/db/collectionDefinitions/csi/workOrderPriority\"\nimport { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { useLocalUserSettingsStore } from \"src/stores/localUserSettingsStore\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { MILLISECONDS_PER_DAY } from \"src/util/constants/temporal\"\nimport { uploadImages } from \"src/util/functions/attachments\"\nimport {\n closeWorkOrderCompletedDialog,\n closeWorkOrderNotCompletedDialog,\n} from \"src/util/functions/dialogs\"\nimport { getIssuesOnItemForCorrectiveWorkOrder } from \"src/util/functions/issues\"\nimport { getItemDataByIds } from \"src/util/functions/item\"\nimport {\n showErrorNotification,\n showSuccessNotification,\n showWarningNotification,\n simpleUndoNotification,\n} from \"src/util/functions/notifications\"\nimport {\n getCorrectiveWorkOnItemListForWorkOrder,\n getRegularWorkOnItemListForWorkOrder,\n} from \"src/util/functions/performedWork\"\nimport { getWorkDomainWorkspaceData } from \"src/util/functions/workDomain\"\nimport { getWorkOrderPriorityData } from \"src/util/functions/workOrderPriority\"\nimport {\n getWorkOrderCorrectiveItem,\n getWorkOrderCorrectiveItemComment,\n getWorkOrderCorrectiveItemCommentList,\n getWorkOrderRegularItem,\n getWorkOrderRegularItemComment,\n getWorkOrderRegularItemCommentList,\n patchWorkOrderCorrectiveItem,\n patchWorkOrderRegularItem,\n postWorkOrderCorrectiveItemComment,\n postWorkOrderRegularItemComment,\n} from \"src/util/http/csi/workOrders\"\nimport { ProgressIndicatorState } from \"src/util/types/components/sfxProgressIndicator\"\nimport { WorkOrderStateOptions } from \"src/util/types/components/sfxTable\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_WORK_ORDERS,\n} from \"src/util/types/dataModels/user\"\nimport { WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\nimport {\n WorkOrderBase,\n WorkOrderCardData,\n WorkOrderCorrectiveItem,\n WorkOrderRegularItem,\n WorkOrderTableData,\n} from \"src/util/types/dataModels/workOrder\"\nimport {\n WorkOrderCorrectiveItemComment,\n WorkOrderCorrectiveItemCommentPayload,\n WorkOrderRegularItemComment,\n WorkOrderRegularItemCommentPayload,\n} from \"src/util/types/dataModels/workOrderComment\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\n\nexport function userHasPermissionToCreateWorkOrder(): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_CREATE)\n}\n\nexport function userHasPermissionToUpdateWorkOrder(workDomain: string): boolean {\n const userStore = useUserStore()\n\n return userStore.checkUserPermission(PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_UPDATE, {\n workDomainUUID: workDomain,\n })\n}\n\nexport async function getWorkOrderCorrectiveItemData(\n workOrderCorrectiveItemId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n const workOrderInCache = cacheStore.work_order_corrective_item.get(workOrderCorrectiveItemId)\n\n if (workOrderInCache) {\n return workOrderInCache\n } else {\n const db = await getDB()\n const workOrderCorrectiveItemInDb = await db.work_order_corrective_item\n .findOne(workOrderCorrectiveItemId)\n .exec()\n\n if (workOrderCorrectiveItemInDb) {\n const workOrderMutable = workOrderCorrectiveItemInDb.toMutableJSON()\n cacheStore.work_order_corrective_item.set(workOrderMutable.id, workOrderMutable)\n return workOrderMutable\n } else {\n return await getWorkOrderCorrectiveItem({}, workOrderCorrectiveItemId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Work Order Corrective Item data\",\n error,\n })\n }\n}\n\nexport async function getWorkOrderCorrectiveItemCommentData(\n commentId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const workOrderCommentInCache = cacheStore.work_order_corrective_item_comments.get(commentId)\n\n if (workOrderCommentInCache) {\n return workOrderCommentInCache\n } else {\n const db = await getDB()\n const commentInDb = await db.work_order_corrective_comments.findOne(commentId).exec()\n\n if (commentInDb) {\n const mutableComment = commentInDb.toMutableJSON()\n cacheStore.work_order_corrective_item_comments.set(mutableComment.id, mutableComment)\n return mutableComment\n } else {\n return await getWorkOrderCorrectiveItemComment({}, commentId)\n }\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching getWorkOrderCorrectiveItemComment data for a given commentId\",\n error,\n data: { commentId: commentId },\n })\n }\n}\n\nexport async function getWorkOrderCorrectiveItemCommentListForWorkOrderCorrectiveItem(\n workOrderId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let commentList: WorkOrderCorrectiveItemComment[] = []\n\n if (cacheStore.work_order_corrective_item_comments.size > 0) {\n for (const commentInCache of cacheStore.work_order_corrective_item_comments.values()) {\n if (commentInCache.work_order === workOrderId) {\n commentList.push(commentInCache)\n }\n }\n } else {\n const db = await getDB()\n const commentsInDb = await db.work_order_corrective_comments\n .find({ selector: { work_order: workOrderId } })\n .exec()\n\n if (commentsInDb.length > 0) {\n for (const comment of commentsInDb) {\n const commentMutable = comment.toMutableJSON()\n cacheStore.work_order_corrective_item_comments.set(commentMutable.id, commentMutable)\n commentList.push(comment)\n }\n } else {\n const commentsInServer = await getWorkOrderCorrectiveItemCommentList({\n mainParams: undefined,\n filterParams: { work_order: workOrderId },\n })\n commentList = commentsInServer.results\n }\n }\n return commentList.sort((a, b) => b.created_dt.localeCompare(a.created_dt))\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching WorkOrderCorrectiveItemComment list for a given WorkOrderCorrective ID\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\nexport async function saveWorkOrderCorrectiveItemComment(\n workOrderId: string,\n commentText: string,\n commentImages?: AttachmentUpload[]\n): Promise {\n const userStore = useUserStore()\n const cacheStore = useCacheStore()\n\n try {\n const comment: WorkOrderCorrectiveItemCommentPayload = {\n text: commentText,\n user: userStore.id,\n work_order: workOrderId,\n }\n\n const commentInServer = await postWorkOrderCorrectiveItemComment({}, comment)\n\n if (commentInServer) {\n if (commentImages && commentImages.length > 0) {\n commentInServer.attachments =\n (await uploadImages(\n \"work_order_corrective_item_comment\",\n commentInServer.id,\n commentImages\n )) || []\n }\n\n const db = await getDB()\n await db.work_order_corrective_comments.insert(commentInServer)\n // Also add the comment to the cache layer\n cacheStore.work_order_corrective_item_comments.set(commentInServer.id, commentInServer)\n\n return commentInServer\n }\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_adding_comment\"))\n\n Log.error({\n message: \"An error occurred while saving the WorkOrderCorrectiveItem comment/attachments\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\nexport async function getWorkOrderRegularItemData(\n workOrderRegularItemId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n const workOrderInCache = cacheStore.work_order_regular_item.get(workOrderRegularItemId)\n\n if (workOrderInCache) {\n return workOrderInCache\n } else {\n const db = await getDB()\n const workOrderRegularItemInDb = await db.work_order_regular_item\n .findOne(workOrderRegularItemId)\n .exec()\n\n if (workOrderRegularItemInDb) {\n const workOrderMutable = workOrderRegularItemInDb.toMutableJSON()\n cacheStore.work_order_regular_item.set(workOrderMutable.id, workOrderMutable)\n return workOrderMutable\n } else {\n return await getWorkOrderRegularItem({}, workOrderRegularItemId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Work Order Regular Item data\",\n error,\n })\n }\n}\n\nexport async function getWorkOrderRegularItemCommentData(\n commentId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n const workOrderCommentInCache = cacheStore.work_order_regular_item_comments.get(commentId)\n\n if (workOrderCommentInCache) {\n return workOrderCommentInCache\n } else {\n const db = await getDB()\n const commentInDb = await db.work_order_regular_comments.findOne(commentId).exec()\n\n if (commentInDb) {\n const mutableComment = commentInDb.toMutableJSON()\n cacheStore.work_order_regular_item_comments.set(mutableComment.id, mutableComment)\n return mutableComment\n } else {\n return await getWorkOrderRegularItemComment({}, commentId)\n }\n }\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching getWorkOrderRegularItemComment data for a given commentId\",\n error,\n data: { commentId: commentId },\n })\n }\n}\n\nexport async function getWorkOrderRegularItemCommentListForWorkOrderRegularItem(\n workOrderId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n let commentList: WorkOrderRegularItemComment[] = []\n\n if (cacheStore.work_order_regular_item_comments.size > 0) {\n for (const commentInCache of cacheStore.work_order_regular_item_comments.values()) {\n if (commentInCache.work_order === workOrderId) {\n commentList.push(commentInCache)\n }\n }\n } else {\n const db = await getDB()\n const commentsInDb = await db.work_order_regular_comments\n .find({ selector: { work_order: workOrderId } })\n .exec()\n\n if (commentsInDb.length > 0) {\n for (const comment of commentsInDb) {\n const commentMutable = comment.toMutableJSON()\n cacheStore.work_order_regular_item_comments.set(commentMutable.id, commentMutable)\n commentList.push(comment)\n }\n } else {\n const commentsInServer = await getWorkOrderRegularItemCommentList({\n mainParams: undefined,\n filterParams: { work_order: workOrderId },\n })\n commentList = commentsInServer.results\n }\n }\n return commentList.sort((a, b) => b.created_dt.localeCompare(a.created_dt))\n } catch (error) {\n Log.error({\n message:\n \"An error occurred while fetching WorkOrderRegularItemComment list for a given WorkOrderRegular ID\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\nexport async function saveWorkOrderRegularItemComment(\n workOrderId: string,\n commentText: string,\n commentImages?: AttachmentUpload[]\n): Promise {\n const userStore = useUserStore()\n const cacheStore = useCacheStore()\n\n try {\n const comment: WorkOrderRegularItemCommentPayload = {\n text: commentText,\n user: userStore.id,\n work_order: workOrderId,\n }\n\n const commentInServer = await postWorkOrderRegularItemComment({}, comment)\n\n if (commentInServer) {\n if (commentImages && commentImages.length > 0) {\n commentInServer.attachments =\n (await uploadImages(\n \"work_order_regular_item_comment\",\n commentInServer.id,\n commentImages\n )) || []\n }\n\n const db = await getDB()\n await db.work_order_regular_comments.insert(commentInServer)\n // Also save the comment in the cache layer.\n cacheStore.work_order_regular_item_comments.set(commentInServer.id, commentInServer)\n\n return commentInServer\n }\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_adding_comment\"))\n\n Log.error({\n message: \"An error occurred while saving the WorkOrderRegularItem comment/attachments\",\n error,\n data: { workOrderId: workOrderId },\n })\n }\n}\n\n/**\n * Returns the appropriate label based on provided data.\n *\n * The different states have precedence over one another, which is:\n * 1. Completed + Closed\n * 2. Closed\n * 3. Draft\n * 4. Completed\n * 5. In progress\n * 6. Open\n * 7. Planned\n */\nexport function getProgressIndicatorStateLabel(\n nonRejectedCount: number,\n totalCount: number,\n workOrder: WorkOrderCorrectiveItem | WorkOrderRegularItem\n): ProgressIndicatorState {\n if (workOrder.concluded_dt !== null) {\n return totalCount > 0 && nonRejectedCount === totalCount ? \"complete_closed\" : \"closed\"\n } else if (totalCount === 0) return \"draft\"\n else if (nonRejectedCount === totalCount) return \"complete\"\n else if (nonRejectedCount > 0) return \"in_progress\"\n else if (Date.now() > new Date(workOrder.start_dt).getTime()) return \"open\"\n else if (Date.now() < new Date(workOrder.start_dt).getTime()) return \"planned\"\n else return \"unknown\"\n}\n\n/**\n * Computes if a work order is 'overdue', 'behind' or none of those two.\n */\nexport function getDeadlineState(\n workOrder: WorkOrderCorrectiveItem | WorkOrderRegularItem,\n completedWorkCount: number,\n totalWorkCount: number\n): undefined | \"behind\" | \"overdue\" {\n // `overdue` and `behind` only make sense when there is a deadline\n if (!workOrder.deadline_dt) {\n return\n }\n const current = Date.now()\n const deadline = new Date(workOrder.deadline_dt).getTime()\n if (deadline < current) {\n return \"overdue\"\n }\n const start = new Date(workOrder.start_dt).getTime()\n if (current < start) {\n // Work order has not started yet.\n return undefined\n }\n // Source: https://www.figma.com/design/v7AuSqfZGPD2XrEvkSkPut/APEX%3A-Work-Management?node-id=678-49414&m=dev\n const daysSpent = (current - start) / MILLISECONDS_PER_DAY\n const daysRemaining = (deadline - current) / MILLISECONDS_PER_DAY\n const daysPerWork = completedWorkCount / daysSpent\n const workToDo = totalWorkCount - completedWorkCount\n const daysNeeded = workToDo * daysPerWork\n\n if (daysNeeded < daysRemaining) return \"behind\"\n}\n\n/**\n * Sort the work order data in the following way:\n *\n * 1. Not Completed\n * 2. Completed\n * 3. Closed\n *\n * Furthermore, each of the 3 categories are sorted internally into:\n *\n * #1 - Split into first with deadline and then without deadline.\n * The former is then sorted by earliest deadline.\n * The latter is sorted based on work order priority.\n *\n * #2 - Sort on work order priority.\n *\n * #3 - Sort on closed date.\n *\n * @param a\n * @param b\n */\nexport function sortWorkOrderCardData(a: WorkOrderCardData, b: WorkOrderCardData): number {\n if (a.workOrderData.concluded_dt && b.workOrderData.concluded_dt) {\n return sortWorkOrderClosedCardData(a, b)\n }\n\n const closedStatus = sortWorkOrderClosedStatus(a, b)\n\n if (closedStatus !== 0) return closedStatus\n\n return sortWorkOrderNotClosedCardData(a, b)\n}\n\n/**\n * Sort the not closed work order data in the following way:\n *\n * 1. Not Completed\n * 2. Completed\n *\n * Furthermore, each of the 2 categories are sorted internally into:\n *\n * #1 - Split into first with deadline and then without deadline.\n * The former is then sorted by earliest deadline.\n * The latter is sorted based on work order priority.\n *\n * #2 - Sort on work order priority.\n *\n * @param a\n * @param b\n */\nexport function sortWorkOrderNotClosedCardData(a: WorkOrderCardData, b: WorkOrderCardData): number {\n const aTotal = a.isCorrectiveWork ? a.issuesData.length : a.workOrderData.items.length\n const bTotal = b.isCorrectiveWork ? b.issuesData.length : b.workOrderData.items.length\n\n const aCount = a.performedWorkData.length\n const bCount = b.performedWorkData.length\n\n const aCompleted = aTotal > 0 && aTotal === aCount\n const bCompleted = bTotal > 0 && bTotal === bCount\n\n if (aCompleted !== bCompleted) {\n return aCompleted ? 1 : -1\n } else if (aCompleted && bCompleted) {\n return sortWorkOrderPriority(a.priorityData, b.priorityData)\n } else {\n return sortWorkOrderNotCompletedCardData(a, b)\n }\n}\n\n/**\n * Sort the not completed work order data in the following way:\n *\n * 1. With Deadline\n * 2. Without Deadline\n *\n * Furthermore, each of the 2 categories are sorted internally into:\n *\n * #1 - Sort by earliest deadline.\n *\n * #2 - Sort on work order priority.\n *\n * @param a\n * @param b\n */\nfunction sortWorkOrderNotCompletedCardData(a: WorkOrderCardData, b: WorkOrderCardData): number {\n if (a.workOrderData.deadline_dt && b.workOrderData.deadline_dt) {\n return sortWorkOrderDeadlineCardData(a, b)\n } else {\n const deadlineStatus = sortWorkOrderDeadlineStatus(a, b)\n\n if (deadlineStatus !== 0) return deadlineStatus\n\n return sortWorkOrderPriority(a.priorityData, b.priorityData)\n }\n}\n\nfunction sortWorkOrderClosedStatus(a: WorkOrderCardData, b: WorkOrderCardData): number {\n if (a.workOrderData.concluded_dt === null && b.workOrderData.concluded_dt === null) {\n return 0\n } else return a.workOrderData.concluded_dt === null ? -1 : 1\n}\n\nfunction sortWorkOrderDeadlineStatus(a: WorkOrderCardData, b: WorkOrderCardData): number {\n if (a.workOrderData.deadline_dt === null && b.workOrderData.deadline_dt === null) {\n return 0\n } else {\n return a.workOrderData.deadline_dt === null ? 1 : -1\n }\n}\n\n/**\n * Sort work orders based on their deadline dates.\n * This functions assumes that all the work orders have valid deadline date time.\n */\nfunction sortWorkOrderDeadlineCardData(a: WorkOrderCardData, b: WorkOrderCardData): number {\n const now = Date.now()\n const aTime = now - new Date(a.workOrderData.deadline_dt || 0).getTime()\n const bTime = now - new Date(b.workOrderData.deadline_dt || 0).getTime()\n\n return bTime - aTime\n}\n\n/**\n * Sort closed work orders based on their closing dates.\n * This functions assumes that all the work orders have valid conclusion date time.\n */\nexport function sortWorkOrderClosedCardData(a: WorkOrderCardData, b: WorkOrderCardData): number {\n const aDate = new Date(a.workOrderData.concluded_dt || 0).getTime()\n const bDate = new Date(b.workOrderData.concluded_dt || 0).getTime()\n\n return bDate - aDate\n}\n\nexport function sortWorkOrderDeadline(\n a: WorkOrderCardData | WorkOrderTableData,\n b: WorkOrderCardData | WorkOrderTableData,\n dir?: -1 | 1\n): number {\n if (a.workOrderData.deadline_dt === null && b.workOrderData.deadline_dt === null) return 0\n\n if (a.workOrderData.deadline_dt === null) return 1\n\n if (b.workOrderData.deadline_dt === null) return -1\n\n const now = Date.now()\n const aTime = now - new Date(a.workOrderData.deadline_dt).getTime()\n const bTime = now - new Date(b.workOrderData.deadline_dt).getTime()\n\n const timeDifference = bTime - aTime\n\n return dir ? timeDifference * dir : timeDifference\n}\n\nexport function sortWorkOrderPriority(\n a: WorkOrderPriority,\n b: WorkOrderPriority,\n dir?: -1 | 1\n): number {\n const rankDifference = b.rank - a.rank\n return dir ? rankDifference * dir : rankDifference\n}\n\nexport async function getWorkOrderCorrectiveCardData(\n workOrder: WorkOrderCorrectiveItem\n): Promise {\n const priority = await getWorkOrderPriorityData(workOrder.priority)\n const work = await getCorrectiveWorkOnItemListForWorkOrder(workOrder.id)\n const issues = await getIssuesOnItemForCorrectiveWorkOrder(workOrder.id)\n const workDomain = await getWorkDomainWorkspaceData(workOrder.work_domain)\n\n return {\n workOrderData: workOrder,\n priorityData: priority!,\n isCorrectiveWork: true,\n isItem: true,\n workDomainData: workDomain,\n issuesData: issues,\n performedWorkData: work?.filter((i) => i.conclusion !== \"rejected\") || [],\n }\n}\n\nexport async function getWorkOrderRegularCardData(\n workOrder: WorkOrderRegularItem\n): Promise {\n const priority = await getWorkOrderPriorityData(workOrder.priority)\n const work = await getRegularWorkOnItemListForWorkOrder(workOrder.id)\n const items = await getItemDataByIds(workOrder.items)\n const workDomain = await getWorkDomainWorkspaceData(workOrder.work_domain)\n\n return {\n workOrderData: workOrder,\n priorityData: priority!,\n isCorrectiveWork: false,\n isItem: true,\n workDomainData: workDomain,\n itemsData: items,\n performedWorkData: work?.filter((i) => i.conclusion !== \"rejected\") || [],\n }\n}\n\n// This getWorkOrderTableData function is identical to the getWorkOrderCardData function as of this writing.\n// The reason for this duplication is to maintain the separation of concerns.\n// eslint-disable-next-line sonarjs/no-identical-functions\nexport async function getWorkOrderCorrectiveTableData(\n workOrder: WorkOrderCorrectiveItem\n): Promise {\n const priority = await getWorkOrderPriorityData(workOrder.priority)\n const work = await getCorrectiveWorkOnItemListForWorkOrder(workOrder.id)\n const issues = await getIssuesOnItemForCorrectiveWorkOrder(workOrder.id)\n const workDomain = await getWorkDomainWorkspaceData(workOrder.work_domain)\n\n return {\n workOrderData: workOrder,\n priorityData: priority!,\n isCorrectiveWork: true,\n isItem: true,\n workDomainData: workDomain,\n issuesData: issues,\n performedWorkData: work?.filter((i) => i.conclusion !== \"rejected\") || [],\n }\n}\n\n// This getWorkOrderTableData function is identical to the getWorkOrderCardData function as of this writing.\n// The reason for this duplication is to maintain the separation of concerns.\n// eslint-disable-next-line sonarjs/no-identical-functions\nexport async function getWorkOrderRegularTableData(\n workOrder: WorkOrderRegularItem\n): Promise {\n const priority = await getWorkOrderPriorityData(workOrder.priority)\n const work = await getRegularWorkOnItemListForWorkOrder(workOrder.id)\n const items = await getItemDataByIds(workOrder.items)\n const workDomain = await getWorkDomainWorkspaceData(workOrder.work_domain)\n\n return {\n workOrderData: workOrder,\n priorityData: priority!,\n isCorrectiveWork: false,\n isItem: true,\n workDomainData: workDomain,\n itemsData: items,\n performedWorkData: work?.filter((i) => i.conclusion !== \"rejected\") || [],\n }\n}\n\nexport async function getHighestPriorityFromWorkOrderList(\n list: Array\n): Promise {\n const db = await getDB()\n const ids = list.map((workOrder) =>\n \"workOrderData\" in workOrder ? workOrder.workOrderData.priority : workOrder.priority\n )\n\n const prioritiesMap = await db.work_order_priority.findByIds(ids).exec()\n if (prioritiesMap.size === 0) return null\n const priorities = Array.from(prioritiesMap.values())\n\n return priorities.reduce((prev, current) => (prev.rank > current.rank ? prev : current))\n}\n\nexport async function getOpenWorkOrders(): Promise<\n Array\n> {\n const db = await getDB()\n const corrective = await db.work_order_corrective_item\n .find({\n selector: {\n // Is open, meaning not concluded and started in the past.\n concluded_dt: null,\n // TODO: there is an issue with datetimes not being UTC from the back end.\n // This code assumes UTC, but once it's fixed it should work fine.\n start_dt: { $lt: new Date().toISOString() },\n },\n })\n .exec()\n const regular = await db.work_order_regular_item\n .find({ selector: { concluded_dt: null, start_dt: { $lt: new Date().toISOString() } } })\n .exec()\n\n return [...corrective, ...regular]\n}\n\nexport async function getOpenAndAssignedWorkOrders(\n userId: string\n): Promise> {\n const db = await getDB()\n const corrective = await db.work_order_corrective_item\n .find({\n selector: {\n // Is assigned to user\n assigned_users: { $in: [userId] },\n // Is open, meaning not concluded and started in the past.\n concluded_dt: null,\n // TODO: there is an issue with datetimes not being UTC from the back end.\n // This code assumes UTC, but once it's fixed it should work fine.\n start_dt: { $lt: new Date().toISOString() },\n },\n })\n .exec()\n const regular = await db.work_order_regular_item\n .find({\n selector: {\n assigned_users: { $in: [userId] },\n concluded_dt: null,\n start_dt: { $lt: new Date().toISOString() },\n },\n })\n .exec()\n\n return [...corrective, ...regular]\n}\n\n/**\n * Attempts to close a WorkOrder.\n * Depending on if the work order is 'completed' or not, it displays the appropriate dialog.\n * Then it triggers an undo notification, allowing the user to undo their action.\n *\n * If the undo action is taken, then it returns undefined.\n * Else it will attempt to close the work order and submit a comment if the work order is not 'complete'.\n *\n * @param isCorrective\n * @param workOrder\n * @param workOrderState\n * @param workDomain\n */\nexport async function closeWorkOrder(\n isCorrective: boolean,\n workOrder: WorkOrderBase,\n workOrderState: WorkOrderStateOptions,\n workDomain: WorkDomainWorkspace\n): Promise {\n const { t } = i18n.global\n\n if (!userHasPermissionToUpdateWorkOrder(workDomain.id)) {\n showWarningNotification(t(\"permissionNotifications.no_access\"))\n return\n }\n\n const localUserSettingsStore = useLocalUserSettingsStore()\n let closingComment: string | null = null\n\n if (workOrderState === \"complete\") {\n if (!localUserSettingsStore.skipConfirmCloseWorkOrder) {\n const userResponse = await closeWorkOrderCompletedDialog()\n if (userResponse === null) return\n\n // Update the local user settings\n localUserSettingsStore.skipConfirmCloseWorkOrder = userResponse\n }\n } else {\n // User needs to have CREATE permission to create a work order comment\n if (!userHasPermissionToCreateWorkOrder()) {\n showWarningNotification(t(\"permissionNotifications.no_access\"))\n return\n }\n\n closingComment = await closeWorkOrderNotCompletedDialog()\n if (!closingComment) return\n }\n\n const undoMessage =\n workOrderState === \"complete\"\n ? t(\"notifications.closed_completed_work_order\")\n : t(\"notifications.closed_work_order\")\n\n return simpleUndoNotification(undoMessage, () =>\n closeWorkOrderOperations(isCorrective, workOrder, closingComment)\n )\n}\n\nasync function closeWorkOrderOperations(\n isCorrective: boolean,\n workOrder: WorkOrderBase,\n closingComment: string | null\n) {\n const userStore = useUserStore()\n\n workOrder.concluded_dt = new Date().toJSON()\n workOrder.concluded_by_user = userStore.id\n\n return await (isCorrective\n ? closeWorkOrderCorrectiveOnItem(workOrder, closingComment)\n : closeWorkOrderRegularOnItem(workOrder, closingComment))\n}\n\nasync function closeWorkOrderCorrectiveOnItem(\n workOrder: WorkOrderBase,\n closingComment: string | null\n) {\n const { t } = i18n.global\n\n try {\n if (closingComment) {\n await saveWorkOrderCorrectiveItemComment(workOrder.id, closingComment)\n }\n\n const closedWorkOrder = await patchWorkOrderCorrectiveItem({}, workOrder.id, workOrder)\n\n if (closedWorkOrder) {\n const db = await getDB()\n await db.work_order_corrective_item.upsert(closedWorkOrder)\n\n showSuccessNotification(t(\"notifications.work_order_corrective_closed_success\"))\n return closedWorkOrder\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_closing_work_order_corrective\"))\n Log.error({\n message: \"An error occurred during corrective work order closing data operations\",\n error,\n })\n }\n}\n\nasync function closeWorkOrderRegularOnItem(\n workOrder: WorkOrderBase,\n closingComment: string | null\n) {\n const { t } = i18n.global\n\n try {\n if (closingComment) {\n await saveWorkOrderRegularItemComment(workOrder.id, closingComment)\n }\n\n const closedWorkOrder = await patchWorkOrderRegularItem({}, workOrder.id, workOrder)\n\n if (closedWorkOrder) {\n const db = await getDB()\n await db.work_order_regular_item.upsert(closedWorkOrder)\n\n showSuccessNotification(t(\"notifications.work_order_regular_closed_success\"))\n return closedWorkOrder\n }\n } catch (error) {\n showErrorNotification(t(\"sfxErrorMsg.error_closing_work_order_regular\"))\n Log.error({\n message: \"An error occurred during regular work order closing data operations\",\n error,\n })\n }\n}\n\nexport async function updateItemListInWorkOrderRegularItem(\n workOrderId: string,\n itemList: string[]\n) {\n try {\n const data = await patchWorkOrderRegularItem({}, workOrderId, { items: itemList })\n\n const db = await getDB()\n await db.work_order_regular_item.upsert(data)\n\n return data\n } catch (error) {\n const { t } = i18n.global\n showErrorNotification(t(\"sfxErrorMsg.error_updating_regular_work_order\"))\n Log.error({\n message: \"An error occurred while updating the item list in RegularWorkOrderItem\",\n error,\n })\n }\n}\n","import { getDB } from \"src/db/databases\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { getWorkOrderPriority } from \"src/util/http/csi/workOrderPriorities\"\nimport { WorkOrderPriority } from \"src/util/types/dataModels/workOrderPriority\"\nimport { PriorityClass } from \"src/util/types/misc\"\nimport { numberToPriorityClass } from \"./misc\"\n\n/**\n * Maps `workOrderPriority` to the css classname of the associated color.\n */\nexport function getWorkOrderPriorityColor(workOrderPriority: WorkOrderPriority): PriorityClass {\n return numberToPriorityClass(workOrderPriority.rank)\n}\n\nexport async function getWorkOrderPriorityData(\n workOrderPriorityId: string\n): Promise {\n try {\n const cacheStore = useCacheStore()\n\n const priorityInCache = cacheStore.work_order_priority.get(workOrderPriorityId)\n\n if (priorityInCache) {\n return priorityInCache\n } else {\n const db = await getDB()\n const workOrderPriorityInDb = await db.work_order_priority.findOne(workOrderPriorityId).exec()\n\n if (workOrderPriorityInDb) {\n const priorityMutable = workOrderPriorityInDb.toMutableJSON()\n cacheStore.work_order_priority.set(priorityMutable.id, priorityMutable)\n return priorityMutable\n } else {\n return await getWorkOrderPriority({}, workOrderPriorityId)\n }\n }\n } catch (error) {\n Log.error({\n message: \"An error occurred while fetching Work Order Priority data\",\n error,\n })\n }\n}\n\nexport async function getHighestWorkOrderPriority(\n workOrderPriorityIds: string[]\n): Promise {\n try {\n const db = await getDB()\n const highestPriority = await db.work_order_priority\n .findOne()\n .where({ id: { $in: workOrderPriorityIds } })\n .sort({ rank: \"desc\" })\n .exec()\n return highestPriority?.toJSON()\n } catch (error) {\n Log.error({\n message: \"Could not get highest Work Order Priority data\",\n error,\n data: { workOrderPriorityIds },\n })\n }\n}\n","import { i18n } from \"src/boot/i18n\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { BreadcrumbText } from \"src/util/types/components/sfxBreadcrumb\"\n\nexport async function getWorkspaceHomeBreadcrumb(): Promise {\n const { useAuthStore } = await import(\"src/stores/authStore\")\n const authStore = useAuthStore()\n const { t } = i18n.global\n\n return {\n text: authStore.selectedWorkspace?.name || t(\"items.workspace_name\"),\n link: {\n name: NamedManagerPath.WORKSPACE,\n params: { workspaceId: authStore.selectedWorkspace?.id },\n },\n highlight: true,\n }\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentPatch } from \"src/util/types/dataModels/attachment\"\nimport { ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_FILES,\n} from \"src/util/types/dataModels/user\"\n\n/**\n * DO NOT USE THIS UNLESS YOU KNOW WHAT YOU ARE DOING.\n *\n * Get the list of all existing Attachments\n *\n * @param config custom configurations and filtering params\n */\nexport async function getAttachmentsList(config: HttpConfig = {}): Promise> {\n const entityURL = CSIurl.ATTACHMENTS_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_FILES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * DO NOT USE THIS UNLESS YOU KNOW WHAT YOU ARE DOING.\n *\n * Get an individual Attachment\n *\n * @param config custom configurations and filtering params\n * @param attachmentId\n */\nexport async function getAttachment(\n config: HttpConfig = {},\n attachmentId: string\n): Promise {\n const url = CSIurl.ATTACHMENTS_ID.replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_FILES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an individual Attachment\n *\n * @param config custom configurations and filtering params\n * @param attachmentId the id of the Attachment that should be partially updated\n * @param attachmentData\n */\nexport async function patchAttachment(\n config: HttpConfig = {},\n attachmentId: string,\n attachmentData: AttachmentPatch\n): Promise {\n const url = CSIurl.ATTACHMENTS_ID.replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_FILES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attachmentData, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get the content of an individual Attachment\n *\n * @param config custom configurations and filtering params\n * @param attachmentId\n */\nexport async function getAttachmentContent(\n config: HttpConfig = {},\n attachmentId: string\n): Promise {\n const url = CSIurl.ATTACHMENTS_ID_CONTENT.replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_FILES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\n/**\n * Patch Attachments in bulk\n *\n * @param config custom configurations and filtering params\n * @param attachments\n */\nexport async function patchAttachmentsBatch(\n config: HttpConfig = {},\n attachments: AttachmentPatch[]\n): Promise> {\n const url = CSIurl.ATTACHMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_FILES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attachments, { signal, customConfig })\n\n return data\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport {\n AttributeChar,\n AttributeFilterParams,\n AttributeNumeric,\n AttributeSelect,\n AttributeSelectOptions,\n AttributeTemporal,\n AttributeValueCharFull,\n AttributeValueNumericFull,\n AttributeValueSelectFull,\n AttributeValueTemporalFull,\n} from \"src/util/types/dataModels/attribute\"\nimport { ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ATTRIBUTES,\n} from \"src/util/types/dataModels/user\"\n\n//region Attribute Char\n\nexport async function getAttributeCharList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_CHAR_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postAttributeChar(\n config: HttpConfig = {},\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_CHAR_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function getAttributeChar(\n config: HttpConfig = {},\n attributeId: string\n): Promise {\n const url = CSIurl.ATTRIBUTES_CHAR.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putAttributeChar(\n config: HttpConfig = {},\n attributeId: string,\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_CHAR.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeChar(\n config: HttpConfig = {},\n attributeId: string,\n attribute: Partial>\n): Promise {\n const url = CSIurl.ATTRIBUTES_CHAR.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeCharValuesBatch(\n config: HttpConfig = {},\n attributes: Partial[]\n): Promise> {\n const url = CSIurl.ATTRIBUTES_CHAR_VALUES_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attributes, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attribute Numeric\n\nexport async function getAttributeNumericList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_NUMERIC_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postAttributeNumeric(\n config: HttpConfig = {},\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_NUMERIC_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function getAttributeNumeric(\n config: HttpConfig = {},\n attributeId: string\n): Promise {\n const url = CSIurl.ATTRIBUTES_NUMERIC.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putAttributeNumeric(\n config: HttpConfig = {},\n attributeId: string,\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_NUMERIC.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeNumeric(\n config: HttpConfig = {},\n attributeId: string,\n attribute: Partial>\n): Promise {\n const url = CSIurl.ATTRIBUTES_NUMERIC.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeNumericValuesBatch(\n config: HttpConfig = {},\n attributes: Partial[]\n): Promise> {\n const url = CSIurl.ATTRIBUTES_NUMERIC_VALUES_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attributes, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attribute Select\n\nexport async function getAttributeSelectList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_SELECT_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postAttributeSelect(\n config: HttpConfig = {},\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function getAttributeSelect(\n config: HttpConfig = {},\n attributeId: string\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putAttributeSelect(\n config: HttpConfig = {},\n attributeId: string,\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeSelect(\n config: HttpConfig = {},\n attributeId: string,\n attribute: Partial>\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeSelectValuesBatch(\n config: HttpConfig = {},\n attributes: Partial[]\n): Promise> {\n const url = CSIurl.ATTRIBUTES_SELECT_VALUES_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attributes, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attribute Select Options\n\n/**\n * Returns the list of select options based on the attribute id\n *\n * @param config custom configurations and filtering params\n * @param attributeId\n */\nexport async function getAttributeSelectOptionsList(\n config: HttpConfig = {},\n attributeId: string\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_SELECT_OPTIONS_ATTR_ID.replace(\"{attr_id}\", attributeId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Returns a list of attributes' select options\n *\n * @param config custom configurations and filtering params\n */\nexport async function getAttributesSelectOptionsList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_SELECT_OPTIONS_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Creates a list of attributes' select options\n *\n * @param config custom configurations and filtering params\n * @param selectOption\n */\nexport async function postAttributesSelectOptions(\n config: HttpConfig = {},\n selectOption: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT_OPTIONS_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, selectOption, { signal, customConfig })\n\n return data\n}\n\n/**\n * Returns a list of attribute select options based on the attribute option id\n *\n * @param config custom configurations and filtering params\n * @param attributeOptionId the attribute option id of the list\n */\nexport async function getAttributesSelectOption(\n config: HttpConfig = {},\n attributeOptionId: string\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT_OPTIONS.replace(\"{id}\", attributeOptionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Updates an attribute select options list based on the option id\n *\n * @param config custom configurations and filtering params\n * @param attributeOptionId the attribute option id of the list, which is to be updated\n * @param selectOption the updated list\n */\nexport async function putAttributesSelectOption(\n config: HttpConfig = {},\n attributeOptionId: string,\n selectOption: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT_OPTIONS.replace(\"{id}\", attributeOptionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, selectOption, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially updates an attribute select options list based on the option id\n *\n * @param config custom configurations and filtering params\n * @param attributeOptionId the attribute option id of the list, which is to be updated\n * @param selectOption the updated list\n */\nexport async function patchAttributesSelectOption(\n config: HttpConfig = {},\n attributeOptionId: string,\n selectOption: Partial>\n): Promise {\n const url = CSIurl.ATTRIBUTES_SELECT_OPTIONS.replace(\"{id}\", attributeOptionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, selectOption, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attribute Temporal\n\nexport async function getAttributeTemporalList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ATTRIBUTES_TEMPORAL_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postAttributeTemporal(\n config: HttpConfig = {},\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_TEMPORAL_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function getAttributeTemporal(\n config: HttpConfig = {},\n attributeId: string\n): Promise {\n const url = CSIurl.ATTRIBUTES_TEMPORAL.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putAttributeTemporal(\n config: HttpConfig = {},\n attributeId: string,\n attribute: PayloadEntity\n): Promise {\n const url = CSIurl.ATTRIBUTES_TEMPORAL.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeTemporal(\n config: HttpConfig = {},\n attributeId: string,\n attribute: Partial>\n): Promise {\n const url = CSIurl.ATTRIBUTES_TEMPORAL.replace(\"{id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attribute, { signal, customConfig })\n\n return data\n}\n\nexport async function patchAttributeTemporalValuesBatch(\n config: HttpConfig = {},\n attributes: Partial[]\n): Promise> {\n const url = CSIurl.ATTRIBUTES_TEMPORAL_VALUES_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, attributes, { signal, customConfig })\n\n return data\n}\n\n//endregion\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { EntityUrlName, History } from \"src/util/types/dataModels/history\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_READ,\n PERMISSION_ATTRIBUTES,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ISSUES,\n PERMISSION_ITEMS,\n PERMISSION_USER_ACCOUNTS,\n UserPermissionType,\n} from \"src/util/types/dataModels/user\"\n\nexport async function getEntityHistory(\n config: HttpConfig = {},\n entityName: EntityUrlName,\n entityId: string\n): Promise> {\n const entityURL = CSIurl.HISTORY_ENTITY.replace(\"{entity_url_name}\", entityName).replace(\n \"{entity_id}\",\n entityId\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const permissionType = getPermissionTypeByEntityName(entityName)\n const customConfig = getCustomConfig(abortHandler, permissionType, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getUserHistory(\n config: HttpConfig = {},\n userId: string\n): Promise> {\n const entityURL = CSIurl.HISTORY_USER.replace(\"{user_id}\", userId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nfunction getPermissionTypeByEntityName(entityName: EntityUrlName): UserPermissionType | undefined {\n switch (entityName) {\n case \"attributes/char\":\n case \"attributes/numeric\":\n case \"attributes/select\":\n case \"attributes/select/options\":\n case \"attributes/temporal\":\n return PERMISSION_ATTRIBUTES\n\n case \"identifiers\":\n return PERMISSION_IDENTIFIERS\n\n case \"issuepriorities\":\n case \"issues/onarea\":\n case \"issues/onarea/comments\":\n case \"issues/onarea/actions\":\n case \"issues/onarea/materials\":\n case \"issues/onitem\":\n case \"issues/onitem/comments\":\n case \"issues/onitem/actions\":\n case \"issues/onitem/materials\":\n return PERMISSION_ISSUES\n\n case \"itemclasses\":\n case \"itemmodels\":\n case \"items\":\n return PERMISSION_ITEMS\n\n case \"users\":\n return PERMISSION_USER_ACCOUNTS\n }\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n Identifier,\n IdentifierCreate,\n IdentifierList,\n IdentifierPatch,\n IdentifierPayload,\n IdentifierType,\n IdentifierTypeFilterParams,\n IdentifierTypeList,\n} from \"src/util/types/dataModels/identifier\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_DELETE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_IDENTIFIERS,\n} from \"src/util/types/dataModels/user\"\n\nexport async function getIdentifiersList(\n config: HttpConfig = {}\n): Promise {\n const entityURL = CSIurl.IDENTIFIERS_LIST\n const url = concatUrl(entityURL, { ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_IDENTIFIERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getIdentifiersListByType(\n config: HttpConfig = {},\n idenType: IdenType\n): Promise> {\n const entityURL = CSIurl.IDENTIFIERS_TYPE.replace(\"{iden_type}\", idenType)\n const url = concatUrl(entityURL, { ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_IDENTIFIERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postIdentifier(\n config: HttpConfig = {},\n idenType: IdentifierType,\n identifierData: IdentifierCreate\n): Promise {\n const url = CSIurl.IDENTIFIERS_TYPE.replace(\"{iden_type}\", idenType)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, identifierData, { signal, customConfig })\n\n return data\n}\n\nexport async function getIdentifier(\n config: HttpConfig = {},\n idenType: IdentifierType,\n idenID: string\n): Promise {\n const url = CSIurl.IDENTIFIERS_TYPE_ID.replace(\"{iden_type}\", idenType).replace(\n \"{iden_id}\",\n idenID\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_IDENTIFIERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putIdentifier(\n config: HttpConfig = {},\n idenType: IdentifierType,\n idenID: string,\n identifierData: IdentifierPayload\n): Promise {\n const url = CSIurl.IDENTIFIERS_TYPE_ID.replace(\"{iden_type}\", idenType).replace(\n \"{iden_id}\",\n idenID\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, identifierData, { signal, customConfig })\n\n return data\n}\n\nexport async function patchIdentifier(\n config: HttpConfig = {},\n idenType: IdentifierType,\n idenID: string,\n identifierData: IdentifierPatch\n): Promise {\n const url = CSIurl.IDENTIFIERS_TYPE_ID.replace(\"{iden_type}\", idenType).replace(\n \"{iden_id}\",\n idenID\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, identifierData, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteIdentifier(\n config: HttpConfig = {},\n idenType: IdentifierType,\n idenID: string\n) {\n const url = CSIurl.IDENTIFIERS_TYPE_ID.replace(\"{iden_type}\", idenType).replace(\n \"{iden_id}\",\n idenID\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function postIdentifiersBatch(\n config: HttpConfig = {},\n identifierData: Array\n): Promise {\n const url = CSIurl.IDENTIFIERS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, identifierData, { signal, customConfig })\n\n return data\n}\n\nexport async function patchIdentifiersBatch(\n config: HttpConfig = {},\n identifierData: Array\n): Promise {\n const url = CSIurl.IDENTIFIERS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, identifierData, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteIdentifiersBatch(\n config: HttpConfig = {},\n identifierData: Array\n) {\n const url = CSIurl.IDENTIFIERS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { data: identifierData, signal, customConfig })\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { IssuePriority, IssuePriorityFilterParams } from \"src/util/types/dataModels/issuePriority\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ISSUES,\n} from \"src/util/types/dataModels/user\"\n\n/**\n * Get the list of all Issue Priorities\n *\n * @param config custom configurations and filtering params\n */\nexport async function getIssuePrioritiesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ISSUE_PRIORITIES\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create new Issue Priority\n *\n * @param config custom configurations and filtering params\n * @param priority the new Issue Priority\n */\nexport async function postIssuePriority(\n config: HttpConfig = {},\n priority: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUE_PRIORITIES\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, priority, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get an individual Issue Priority\n *\n * @param config custom configurations and filtering params\n * @param priorityId\n */\nexport async function getIssuePriority(\n config: HttpConfig = {},\n priorityId: string\n): Promise {\n const url = CSIurl.ISSUE_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Issue Priority\n *\n * @param config custom configurations and filtering params\n * @param priorityId the id of the Issue Priority that should be updated\n * @param priority the updated Issue Priority\n */\nexport async function putIssuePriority(\n config: HttpConfig = {},\n priorityId: string,\n priority: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUE_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, priority, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an individual Issue Priority\n *\n * @param config custom configurations and filtering params\n * @param priorityId the id of the Issue Priority that should be partially updated\n * @param priority the updated Issue Priority\n */\nexport async function patchIssuePriority(\n config: HttpConfig = {},\n priorityId: string,\n priority: Partial>\n): Promise {\n const url = CSIurl.ISSUE_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, priority, { signal, customConfig })\n\n return data\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport {\n appendAttachmentToFormData,\n concatUrl,\n getCustomConfig,\n getNewAbortHandler,\n handleAttachmentBatchResponses,\n} from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { BatchErrors, ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n IssuesOnItem,\n IssuesOnItemAction,\n IssuesOnItemActionFilterParams,\n IssuesOnItemFilterParams,\n IssuesOnItemPayload,\n} from \"src/util/types/dataModels/issue\"\nimport {\n IssueComment,\n IssueCommentFilterParams,\n IssueCommentPayload,\n} from \"src/util/types/dataModels/issueComment\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ISSUES,\n} from \"src/util/types/dataModels/user\"\n\n//region Issues On Item\n\n//region Issues On Item Base\n\n/**\n * Get the list of all Issues On Item.\n *\n * @param config custom configurations and filtering params\n */\nexport async function getIssuesOnItemList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ISSUES_ON_ITEM\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create new Issue On Item.\n *\n * @param config custom configurations and filtering params\n * @param issue the new Issue On Item\n */\nexport async function postIssuesOnItem(\n config: HttpConfig = {},\n issue: IssuesOnItemPayload\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, issue, { signal, customConfig })\n\n return data\n}\n\n/**\n * Retrieve an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param issueId\n */\nexport async function getIssuesOnItem(\n config: HttpConfig = {},\n issueId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ID.replace(\"{id}\", issueId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param issueId the id of the Issue On Item that should be updated\n * @param issue the updated Issue On Item\n */\nexport async function putIssuesOnItem(\n config: HttpConfig = {},\n issueId: string,\n issue: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ID.replace(\"{id}\", issueId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, issue, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param issueId the id of the Issue On Item that should be partially updated\n * @param issue the updated Issue On Item\n */\nexport async function patchIssuesOnItem(\n config: HttpConfig = {},\n issueId: string,\n issue: Partial>\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ID.replace(\"{id}\", issueId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, issue, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Issues On Item in bulk\n *\n * @param config custom configurations and filtering params\n * @param issues\n */\nexport async function postIssuesOnItemBatch(\n config: HttpConfig = {},\n issues: IssuesOnItemPayload[]\n): Promise> {\n const url = CSIurl.ISSUES_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, issues, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Issues On Item in bulk.\n * The primary key of the issues, which are being updated\n * must be included as part of the payload data.\n *\n * @param config custom configurations and filtering params\n * @param issues\n */\nexport async function patchIssuesOnItemBatch(\n config: HttpConfig = {},\n issues: Partial[]\n): Promise> {\n const url = CSIurl.ISSUES_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, issues, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Issue On Item Action\n\n/**\n * Get the list of all Actions of an Issue On Item\n *\n * @param config custom configurations and filtering params\n */\nexport async function getIssuesOnItemActionsList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ISSUE_ON_ITEM_ACTIONS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Action of an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param action\n */\nexport async function postIssuesOnItemAction(\n config: HttpConfig = {},\n action: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, action, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get an individual Action of an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param actionId\n */\nexport async function getIssuesOnItemAction(\n config: HttpConfig = {},\n actionId: string\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS_ID.replace(\"{id}\", actionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Action of an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param actionId the id of the Action of an Issue On Item that should be updated\n * @param action the updated Action of an Issue On Item\n */\nexport async function putIssuesOnItemAction(\n config: HttpConfig = {},\n actionId: string,\n action: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS_ID.replace(\"{id}\", actionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, action, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an individual Action of an Issue On Item\n *\n * @param config custom configurations and filtering params\n * @param actionId the id of the Action of an Issue On Item that should be partially updated\n * @param action the updated Action of an Issue On Item\n */\nexport async function patchIssuesOnItemAction(\n config: HttpConfig = {},\n actionId: string,\n action: Partial>\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS_ID.replace(\"{id}\", actionId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, action, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Actions for an Issue On Item in bulk\n *\n * @param config custom configurations and filtering params\n * @param actions\n */\nexport async function postIssuesOnItemActionsBatch(\n config: HttpConfig = {},\n actions: PayloadEntity[]\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, actions, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Actions for an Issue On Item in bulk.\n * The primary keys of the Actions, which are being updated\n * must be included as part of the payload data.\n *\n * @param config custom configurations and filtering params\n * @param actions\n */\nexport async function patchIssuesOnItemActionsBatch(\n config: HttpConfig = {},\n actions: Partial[]\n): Promise {\n const url = CSIurl.ISSUE_ON_ITEM_ACTIONS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, actions, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Issue On Item Attachments\n\nexport async function getIssueOnItemAttachmentList(\n config: HttpConfig = {},\n issue_id: string\n): Promise> {\n const entityURL = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_LIST.replace(\"{issue_id}\", issue_id)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"issue_item\"]\n return i\n })\n\n return data\n}\n\nexport async function postIssueOnItemAttachment(\n config: HttpConfig = {},\n issue_id: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_LIST.replace(\"{issue_id}\", issue_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"issue_item\"]\n\n return data\n}\n\nexport async function getIssueOnItemAttachment(\n config: HttpConfig = {},\n issue_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_ID.replace(\"{issue_id}\", issue_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"issue_item\"]\n\n return data\n}\n\n/**\n * Delete an IssueOnItem Attachment\n *\n * @param config custom configurations and filtering params\n * @param issueId ID of the Issue on Item where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function deleteIssueOnItemAttachment(\n config: HttpConfig = {},\n issueId: string,\n attachmentId: string\n) {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_ID.replace(\"{issue_id}\", issueId).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n return await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getIssueOnItemAttachmentContent(\n config: HttpConfig = {},\n issue_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_ID_CONTENT.replace(\"{issue_id}\", issue_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postIssueOnItemAttachmentBatch(\n config: HttpConfig = {},\n issue_id: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.ISSUES_ON_ITEM_ATTACHMENTS_BATCH.replace(\"{issue_id}\", issue_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"issue_item\")\n}\n\n//endregion\n\n//region Issue on Item Comment\n\n/**\n * Get the list of all Issue on Item Comments\n *\n * @param config custom configurations and filtering params\n */\nexport async function getIssueOnItemCommentList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ISSUES_ON_ITEM_COMMENTS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Issue on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param issueComment the new Issue Comment\n */\nexport async function postIssueOnItemComment(\n config: HttpConfig = {},\n issueComment: IssueCommentPayload\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, issueComment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get an Issue on Item Comment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId\n */\nexport async function getIssueOnItemComment(\n config: HttpConfig = {},\n commentId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing Issue on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Issue Comment that should be updated\n * @param comment the updated Issue Comment\n */\nexport async function putIssueOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: PayloadEntity\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an Issue on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Issue Comment that should be partially updated\n * @param comment the updated Issue Comment\n */\nexport async function patchIssueOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: Partial>\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Issue on Item Comments in batch\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function postIssueOnItemCommentBatch(\n config: HttpConfig = {},\n comments: IssueCommentPayload[]\n): Promise | ObjectList> {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comments, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Issue on Item Comments in batch\n *\n * The primary key of the issue comments, which are being updated\n * must be included as part of the payload data\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function patchIssueOnItemCommentBatch(\n config: HttpConfig = {},\n comments: Partial[]\n): Promise | ObjectList> {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comments, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Issue on Item Comment Attachment\n\n/**\n * Get a list of all the Attachments of an Issue on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue Comment where the Attachments belong to\n */\nexport async function getIssueOnItemCommentAttachmentList(\n config: HttpConfig = {},\n commentId: string\n): Promise> {\n const entityURL = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\"{comment_id}\", commentId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"issue_item_comment\"]\n return i\n })\n\n return data\n}\n\n/**\n * Create a new Issue on Item Comment Attachment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue Comment where the Attachment will be added\n * @param attachment Attachment to be uploaded\n */\nexport async function postIssueOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\"{comment_id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"issue_item_comment\"]\n\n return data\n}\n\n/**\n * Get an Issue on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getIssueOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"issue_item_comment\"]\n\n return data\n}\n\n/**\n * Delete an Issue on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue on Item Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function deleteIssueOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n) {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\n/**\n * Get an Issue on Item Comment Attachment content by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getIssueOnItemCommentAttachmentContent(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\n/**\n * Create Issue on Item Comment Attachments in batch\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Issue Comment where the Attachment belongs to\n * @param attachments Attachments to be uploaded\n */\nexport async function postIssueOnItemCommentAttachmentBatch(\n config: HttpConfig = {},\n commentId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH.replace(\"{comment_id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ISSUES, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"issue_item_comment\")\n}\n\n//endregion\n\n//endregion\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ITEMS,\n} from \"src/util/types/dataModels/user\"\n\n/**\n * Get the list of all existing Item Classes\n *\n * @param config custom configurations and filtering params\n */\nexport async function getItemClassesList(config: HttpConfig = {}): Promise> {\n const entityURL = CSIurl.ITEM_CLASSES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Item Class\n *\n * @param config custom configurations and filtering params\n * @param itemClass the new Item Class\n */\nexport async function postItemClass(\n config: HttpConfig = {},\n itemClass: PayloadEntity\n): Promise {\n const url = CSIurl.ITEM_CLASSES_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, itemClass, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get an individual Item Class\n *\n * @param config custom configurations and filtering params\n * @param itemClassId\n */\nexport async function getItemClass(\n config: HttpConfig = {},\n itemClassId: string\n): Promise {\n const url = CSIurl.ITEM_CLASSES_ID.replace(\"{id}\", itemClassId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Item Class\n *\n * @param config custom configurations and filtering params\n * @param itemClassId the id of the Item Class that should be updated\n * @param itemClass the updated Item Class\n */\nexport async function putItemClass(\n config: HttpConfig = {},\n itemClassId: string,\n itemClass: PayloadEntity\n): Promise {\n const url = CSIurl.ITEM_CLASSES_ID.replace(\"{id}\", itemClassId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, itemClass, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update an individual Item Class\n *\n * @param config custom configurations and filtering params\n * @param itemClassId the id of the Item Class that should be partially updated\n * @param itemClass the updated Item Class\n */\nexport async function patchItemClass(\n config: HttpConfig = {},\n itemClassId: string,\n itemClass: Partial>\n): Promise {\n const url = CSIurl.ITEM_CLASSES_ID.replace(\"{id}\", itemClassId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, itemClass, { signal, customConfig })\n\n return data\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport {\n appendAttachmentToFormData,\n concatUrl,\n getCustomConfig,\n getNewAbortHandler,\n handleAttachmentBatchResponses,\n} from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport {\n ItemModelAttributeCharValue,\n ItemModelAttributeNumericValue,\n ItemModelAttributeSelectValue,\n ItemModelAttributeTemporalValue,\n} from \"src/util/types/dataModels/attribute\"\nimport { BatchErrors, ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_DELETE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ITEMS,\n} from \"src/util/types/dataModels/user\"\n\n//region Item Models\n\n/**\n * Get the list of all existing Item Models\n *\n * @param config custom configurations and filtering params\n */\nexport async function getItemModelsList(config: HttpConfig = {}): Promise> {\n const entityURL = CSIurl.ITEM_MODELS\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Item Model\n *\n * @param config custom configurations and filtering params\n * @param itemModel\n */\nexport async function postItemModel(\n config: HttpConfig = {},\n itemModel: PayloadEntity\n): Promise {\n const url = CSIurl.ITEM_MODELS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, itemModel, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get an individual Item Model\n *\n * @param config custom configurations and filtering params\n * @param itemModelId\n */\nexport async function getItemModel(\n config: HttpConfig = {},\n itemModelId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID.replace(\"{id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Item Model\n *\n * @param config custom configurations and filtering params\n * @param itemModelId\n * @param itemModel\n */\nexport async function putItemModel(\n config: HttpConfig = {},\n itemModelId: string,\n itemModel: PayloadEntity\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID.replace(\"{id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, itemModel, { signal, customConfig })\n\n return data\n}\n\n/**\n * (Partially) update an individual Item Model\n *\n * @param config custom configurations and filtering params\n * @param id\n * @param itemModel\n */\nexport async function patchItemModel(\n config: HttpConfig = {},\n id: string,\n itemModel: Partial>\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, itemModel, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Models Char Values\n\nexport async function getItemModelsAttributeCharValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_CHAR_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemModelsAttributeCharValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_CHAR_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemModelsAttributeCharValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_CHAR_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemModelsAttributeCharValues(\n config: HttpConfig = {},\n itemModelId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_CHAR_VALUES.replace(\"{item_model_id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Models Numeric Values\n\nexport async function getItemModelsAttributeNumericValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemModelsAttributeNumericValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemModelsAttributeNumericValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemModelsAttributeNumericValues(\n config: HttpConfig = {},\n itemModelId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES.replace(\"{item_model_id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Models Select Values\n\nexport async function getItemModelsAttributeSelectValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_SELECT_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemModelsAttributeSelectValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_SELECT_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\n// TODO-NOTE: Currently throws 500, cloud team is aware\nexport async function deleteItemModelsAttributeSelectValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_SELECT_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemModelsAttributeSelectValues(\n config: HttpConfig = {},\n itemModelId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_SELECT_VALUES.replace(\"{item_model_id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Models Temporal Values\n\nexport async function getItemModelsAttributeTemporalValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemModelsAttributeTemporalValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemModelsAttributeTemporalValue(\n config: HttpConfig = {},\n itemModelId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUE.replace(\n \"{item_model_id}\",\n itemModelId\n ).replace(\"{attr_id}\", attributeId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemModelsAttributeTemporalValues(\n config: HttpConfig = {},\n itemModelId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES.replace(\"{item_model_id}\", itemModelId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region All Values for Item Models\n\nexport async function getItemModelsAttributeCharValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEM_MODELS_ATTRIBUTES_CHAR_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemModelsAttributeNumericValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemModelsAttributeSelectValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEM_MODELS_ATTRIBUTES_SELECT_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemModelsAttributeTemporalValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attachments\n\nexport async function getItemModelAttachmentList(\n config: HttpConfig = {},\n model_id: string\n): Promise> {\n const entityURL = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_LIST.replace(\"{model_id}\", model_id)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"item_model\"]\n return i\n })\n\n return data\n}\n\nexport async function postItemModelAttachment(\n config: HttpConfig = {},\n model_id: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_LIST.replace(\"{model_id}\", model_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"item_model\"]\n\n return data\n}\n\nexport async function getItemModelAttachment(\n config: HttpConfig = {},\n model_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_ID.replace(\"{model_id}\", model_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"item_model\"]\n\n return data\n}\n\nexport async function getItemModelAttachmentContent(\n config: HttpConfig = {},\n model_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_ID_CONTENT.replace(\"{model_id}\", model_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postItemModelAttachmentBatch(\n config: HttpConfig = {},\n model_id: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.ITEM_MODELS_ID_ATTACHMENTS_BATCH.replace(\"{model_id}\", model_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"item_model\")\n}\n\n//endregion\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport {\n appendAttachmentToFormData,\n concatUrl,\n getCustomConfig,\n getNewAbortHandler,\n handleAttachmentBatchResponses,\n} from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport {\n ItemAttributeCharValue,\n ItemAttributeNumericValue,\n ItemAttributeSelectValue,\n ItemAttributeTemporalValue,\n} from \"src/util/types/dataModels/attribute\"\nimport {\n BatchErrors,\n ObjectList,\n PageParams,\n PayloadEntity,\n} from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { Item, ItemFilterParams, ItemSearchQueryID } from \"src/util/types/dataModels/item\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_DELETE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ITEMS,\n} from \"src/util/types/dataModels/user\"\nimport { WorkOrderRegularItem } from \"src/util/types/dataModels/workOrder\"\n\n//region Items\n\n/**\n * Return the list of all active Items\n *\n * @param config custom configurations and filtering params\n */\nexport async function getItemsList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEMS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Item\n *\n * @param config custom configurations and filtering params\n * @param item\n */\nexport async function postItem(config: HttpConfig = {}, item: PayloadEntity): Promise {\n const url = CSIurl.ITEMS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, item, { signal, customConfig })\n\n return data\n}\n\n/**\n * Return an individual Item\n *\n * @param config custom configurations and filtering params\n * @param id\n */\nexport async function getItem(config: HttpConfig = {}, id: string): Promise {\n const url = CSIurl.ITEMS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Item\n *\n * @param config custom configurations and filtering params\n * @param itemId\n * @param item\n */\nexport async function putItem(\n config: HttpConfig = {},\n itemId: string,\n item: PayloadEntity\n): Promise {\n const url = CSIurl.ITEMS_ID.replace(\"{id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, item, { signal, customConfig })\n\n return data\n}\n\n/**\n * (Partially) update an individual Item\n *\n * @param config custom configurations and filtering params\n * @param itemId\n * @param item\n */\nexport async function patchItem(\n config: HttpConfig = {},\n itemId: string,\n item: Partial>\n): Promise {\n const url = CSIurl.ITEMS_ID.replace(\"{id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, item, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Char Values\n\nexport async function getItemAttributeCharValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemAttributeCharValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemAttributeCharValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemAttributeCharValues(\n config: HttpConfig = {},\n itemId: string\n): Promise> {\n const url = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUES.replace(\"{item_id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Numeric Values\n\nexport async function getItemAttributeNumericValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemAttributeNumericValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemAttributeNumericValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemAttributeNumericValues(\n config: HttpConfig = {},\n itemId: string\n): Promise> {\n const url = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUES.replace(\"{item_id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Select Values\n\nexport async function getItemAttributeSelectValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemAttributeSelectValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\n// TODO-NOTE: Currently throws 500, cloud team is aware\nexport async function deleteItemAttributeSelectValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemAttributeSelectValues(\n config: HttpConfig = {},\n itemId: string\n): Promise> {\n const url = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUES.replace(\"{item_id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Temporal Values\n\nexport async function getItemAttributeTemporalValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function patchItemAttributeTemporalValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function deleteItemAttributeTemporalValue(\n config: HttpConfig = {},\n itemId: string,\n attributeId: string\n) {\n const url = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUE.replace(\"{item_id}\", itemId).replace(\n \"{attr_id}\",\n attributeId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_ATTRIBUTES,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemAttributeTemporalValues(\n config: HttpConfig = {},\n itemId: string\n): Promise> {\n const url = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUES.replace(\"{item_id}\", itemId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ATTRIBUTES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region All Values for Item\n\nexport async function getItemAttributeCharValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEMS_ATTRIBUTES_CHAR_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemAttributeNumericValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEMS_ATTRIBUTES_NUMERIC_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemAttributeSelectValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEMS_ATTRIBUTES_SELECT_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getItemAttributeTemporalValuesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.ITEMS_ATTRIBUTES_TEMPORAL_VALUES_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Batch\n\n/**\n * Create Items in bulk\n *\n * @param config custom configurations and filtering params\n * @param items\n */\nexport async function postItemsBatch(\n config: HttpConfig = {},\n items: PayloadEntity[]\n): Promise> {\n const url = CSIurl.ITEMS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, items, { signal, customConfig })\n\n return data\n}\n\n/**\n * (Partially) update Items in bulk\n * The primary keys of the items, which are being updated\n * must be included as part of the payload data.\n *\n * @param config custom configurations and filtering params\n * @param items\n */\nexport async function patchItemsBatch(\n config: HttpConfig = {},\n items: Partial[]\n): Promise> {\n const url = CSIurl.ITEMS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, items, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Item Search\n\n/**\n * An asynchronous 'search' interface to search item attributes and it's values.\n *\n * Get result from search by calling {@link getItemsSearchListResult}.\n *\n * Accepts either a single or multiple search parameters for filtering Items.\n * All Django Query set lookups are supported (see the full list at\n * https://docs.djangoproject.com/en/3.2/ref/models/querysets/#field-lookups).\n *\n * The attribute type can be one of: \"numeric\", \"char\", \"temporal\", \"select\".\n *\n * Ex1: If we want to search for Items whose attribute type is char and the id is 3 where the value contains\n * the word \"north\", the query should be \"attr-char-6__icontains=north\".\n *\n * Ex2: If we want to search for Items whose attribute type is numeric and the id is 4 where the value should\n * be greater than 800 and less than 1000, the query should be \"attr-numeric-4__gt=800__lt=1000\".\n * In here we chain search parameters.\n *\n * @param config custom configurations and filtering params\n * @param query\n */\nexport async function getItemsSearchList(\n config: HttpConfig = {},\n query: string\n): Promise {\n const url = CSIurl.ITEMS_SEARCH.concat(\"?\", query)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * List of items that the async search returns.\n *\n * @param config custom configurations and filtering params\n * @param query_id\n * @param pageParams\n */\nexport async function getItemsSearchListResult(\n config: HttpConfig = {},\n query_id: ItemSearchQueryID,\n pageParams?: PageParams\n): Promise> {\n const url = concatUrl(CSIurl.ITEMS_SEARCH, { ...query_id, ...pageParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Attachments\n\nexport async function getItemAttachmentList(\n config: HttpConfig = {},\n item_id: string\n): Promise> {\n const entityURL = CSIurl.ITEMS_ID_ATTACHMENTS_LIST.replace(\"{item_id}\", item_id)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"item\"]\n return i\n })\n\n return data\n}\n\nexport async function postItemAttachment(\n config: HttpConfig = {},\n item_id: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_LIST.replace(\"{item_id}\", item_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"item\"]\n\n return data\n}\n\nexport async function getItemAttachment(\n config: HttpConfig = {},\n item_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_ID.replace(\"{item_id}\", item_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"item\"]\n\n return data\n}\n\n/**\n * Delete an Item Attachment\n *\n * @param config custom configurations and filtering params\n * @param itemId ID of the Item where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function deleteItemAttachment(\n config: HttpConfig = {},\n itemId: string,\n attachmentId: string\n) {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_ID.replace(\"{item_id}\", itemId).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_UPDATE)\n const signal = abortHandler.controller.signal\n\n return await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getItemAttachmentContent(\n config: HttpConfig = {},\n item_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_ID_CONTENT.replace(\"{item_id}\", item_id).replace(\n \"{id}\",\n attachmentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postItemAttachmentBatch(\n config: HttpConfig = {},\n item_id: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.ITEMS_ID_ATTACHMENTS_BATCH.replace(\"{item_id}\", item_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_CREATE)\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"item\")\n}\n\n//endregion\n\n//region Item Work Orders\n\n/**\n * Returns the list of all the Work Order for the given itemId\n *\n * @param config custom configurations and filtering params\n * @param itemId\n */\nexport async function getWorkOrderListForItem(\n config: HttpConfig = {},\n itemId: string\n): Promise> {\n const entityURL = CSIurl.ITEMS_WORK_ORDER_REGULAR.replace(\"{item_id}\", itemId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_ITEMS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n//endregion\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport {\n appendAttachmentToFormData,\n concatUrl,\n getCustomConfig,\n getNewAbortHandler,\n handleAttachmentBatchResponses,\n} from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { BatchErrors, ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n CorrectiveWorkOnItem,\n CorrectiveWorkOnItemFilterParams,\n PerformedWorkComment,\n PerformedWorkCommentPayload,\n PerformedWorkFilterParams,\n RegularWorkOnItem,\n RegularWorkOnItemFilterParams,\n} from \"src/util/types/dataModels/performedWork\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_PERFORMED_WORK,\n} from \"src/util/types/dataModels/user\"\n\n//region Corrective Work Item\n\n/**\n * Return the list of all Performed Corrective Work on all the Items\n *\n * @param config custom configurations and filtering params\n */\nexport async function getCorrectiveWorkOnItemList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create new Performed Corrective Work on Item\n *\n * @param config custom configurations and filtering params\n * @param work the new Performed Corrective Work\n */\nexport async function postCorrectiveWorkOnItem(\n config: HttpConfig = {},\n work: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, work, { signal, customConfig })\n\n return data\n}\n\n/**\n * Retrieve a Corrective Work on Item\n *\n * @param config custom configurations and filtering params\n * @param workId\n */\nexport async function getCorrectiveWorkOnItem(\n config: HttpConfig = {},\n workId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Corrective Work on Item\n *\n * @param config custom configurations and filtering params\n * @param workId the id of the Corrective Work on Item that should be updated\n * @param correctiveWork the updated Corrective Work on Item\n */\nexport async function putCorrectiveWorkOnItem(\n config: HttpConfig = {},\n workId: string,\n correctiveWork: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, correctiveWork, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update a Corrective Work On Item\n *\n * @param config custom configurations and filtering params\n * @param workId the id of the Corrective Work On Item that should be partially updated\n * @param correctiveWork the updated Corrective Work\n */\nexport async function patchCorrectiveWorkOnItem(\n config: HttpConfig = {},\n workId: string,\n correctiveWork: Partial>\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, correctiveWork, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Corrective Work On Item in bulk\n *\n * @param config custom configurations and filtering params\n * @param workList\n */\nexport async function postCorrectiveWorkOnItemBatch(\n config: HttpConfig = {},\n workList: PayloadEntity[]\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workList, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Corrective Work On Item in bulk.\n * The primary keys of the corrective work, which are being updated\n * must be included as part of the payload data.\n *\n * @param config custom configurations and filtering params\n * @param workList\n */\nexport async function patchCorrectiveWorkOnItemBatch(\n config: HttpConfig = {},\n workList: Partial[]\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, workList, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Corrective Work Item Attachments\n\nexport async function getCorrectiveWorkOnItemAttachmentList(\n config: HttpConfig = {},\n work_id: string\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_LIST.replace(\n \"{work_id}\",\n work_id\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"corrective_work_item\"]\n return i\n })\n\n return data\n}\n\nexport async function postCorrectiveWorkOnItemAttachment(\n config: HttpConfig = {},\n work_id: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_LIST.replace(\"{work_id}\", work_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"corrective_work_item\"]\n\n return data\n}\n\nexport async function getCorrectiveWorkOnItemAttachment(\n config: HttpConfig = {},\n work_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID.replace(\n \"{work_id}\",\n work_id\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"corrective_work_item\"]\n\n return data\n}\n\nexport async function getCorrectiveWorkOnItemAttachmentContent(\n config: HttpConfig = {},\n work_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID_CONTENT.replace(\n \"{work_id}\",\n work_id\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postCorrectiveWorkOnItemAttachmentBatch(\n config: HttpConfig = {},\n work_id: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_BATCH.replace(\"{work_id}\", work_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"corrective_work_item\")\n}\n\n//endregion\n\n//region Corrective Work Item Comments\n\n/**\n * Get the list of all Corrective Work on Item Comments\n *\n * @param config custom configurations and filtering params\n */\nexport async function getCorrectiveWorkOnItemCommentList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Corrective Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param comment the new Corrective Work Comment\n */\nexport async function postCorrectiveWorkOnItemComment(\n config: HttpConfig = {},\n comment: PerformedWorkCommentPayload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get a Corrective Work on Item Comment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId\n */\nexport async function getCorrectiveWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing Corrective Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Corrective Work Comment that should be updated\n * @param comment the updated Corrective Work Comment\n */\nexport async function putCorrectiveWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update a Corrective Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Corrective Work Comment that should be partially updated\n * @param comment the updated Corrective Work Comment\n */\nexport async function patchCorrectiveWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: Partial>\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Corrective Work on Item Comments in batch\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function postCorrectiveWorkOnItemCommentBatch(\n config: HttpConfig = {},\n comments: PerformedWorkCommentPayload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comments, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Corrective Work on Item Comments in batch\n *\n * The primary keys of the corrective work comments, which are being updated\n * must be included as part of the payload data\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function patchCorrectiveWorkOnItemCommentBatch(\n config: HttpConfig = {},\n comments: Partial[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comments, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Corrective Work Item Comment Attachments\n\n/**\n * Get a list of all the Attachments of a Corrective Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachments belong to\n */\nexport async function getCorrectiveWorkOnItemCommentAttachmentList(\n config: HttpConfig = {},\n commentId: string\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"corrective_work_item_comment\"]\n return i\n })\n\n return data\n}\n\n/**\n * Create a new Corrective Work on Item Comment Attachment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachment will be added\n * @param attachment Attachment to be uploaded\n */\nexport async function postCorrectiveWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"corrective_work_item_comment\"]\n\n return data\n}\n\n/**\n * Get a Corrective Work on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getCorrectiveWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"corrective_work_item_comment\"]\n\n return data\n}\n\n/**\n * Delete a Corrective Work on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function deleteCorrectiveWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n) {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\n/**\n * Get a Corrective Work on Item Comment Attachment content by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getCorrectiveWorkOnItemCommentAttachmentContent(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\n/**\n * Create Corrective Work on Item Comment Attachments in batch\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Corrective Work Comment where the Attachment belongs to\n * @param attachments Attachments to be uploaded\n */\nexport async function postCorrectiveWorkOnItemCommentAttachmentBatch(\n config: HttpConfig = {},\n commentId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_BATCH.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"corrective_work_item_comment\")\n}\n\n//endregion\n\n//region Regular Work Item\n\n/**\n * Return the list of all Performed Regular Work on all the Items\n *\n * @param config custom configurations and filtering params\n */\nexport async function getRegularWorkOnItemList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_REGULAR_ITEM_LIST\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create new Performed Regular Work on Item\n *\n * @param config custom configurations and filtering params\n * @param work the new Performed Regular Work\n */\nexport async function postRegularWorkOnItem(\n config: HttpConfig = {},\n work: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, work, { signal, customConfig })\n\n return data\n}\n\n/**\n * Retrieve a Regular Work on Item\n *\n * @param config custom configurations and filtering params\n * @param workId\n */\nexport async function getRegularWorkOnItem(\n config: HttpConfig = {},\n workId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing individual Regular Work on Item\n *\n * @param config custom configurations and filtering params\n * @param workId the id of the Regular Work on Item that should be updated\n * @param regularWork the updated Regular Work on Item\n */\nexport async function putRegularWorkOnItem(\n config: HttpConfig = {},\n workId: string,\n regularWork: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, regularWork, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update a Regular Work On Item\n *\n * @param config custom configurations and filtering params\n * @param workId the id of the Regular Work On Item that should be partially updated\n * @param regularWork the updated Regular Work\n */\nexport async function patchRegularWorkOnItem(\n config: HttpConfig = {},\n workId: string,\n regularWork: Partial>\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ID.replace(\"{id}\", workId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, regularWork, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Regular Work On Item in bulk\n *\n * @param config custom configurations and filtering params\n * @param workList\n */\nexport async function postRegularWorkOnItemBatch(\n config: HttpConfig = {},\n workList: PayloadEntity[]\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workList, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Regular Work On Item in bulk.\n * The primary keys of the regular work, which are being updated\n * must be included as part of the payload data.\n *\n * @param config custom configurations and filtering params\n * @param workList\n */\nexport async function patchRegularWorkOnItemBatch(\n config: HttpConfig = {},\n workList: Partial[]\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, workList, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Regular Work Item Attachments\n\nexport async function getRegularWorkOnItemAttachmentList(\n config: HttpConfig = {},\n work_id: string\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_LIST.replace(\n \"{work_id}\",\n work_id\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"regular_work_item\"]\n return i\n })\n\n return data\n}\n\nexport async function postRegularWorkOnItemAttachment(\n config: HttpConfig = {},\n work_id: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_LIST.replace(\"{work_id}\", work_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"regular_work_item\"]\n\n return data\n}\n\nexport async function getRegularWorkOnItemAttachment(\n config: HttpConfig = {},\n work_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID.replace(\n \"{work_id}\",\n work_id\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"regular_work_item\"]\n\n return data\n}\n\nexport async function getRegularWorkOnItemAttachmentContent(\n config: HttpConfig = {},\n work_id: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID_CONTENT.replace(\n \"{work_id}\",\n work_id\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postRegularWorkOnItemAttachmentBatch(\n config: HttpConfig = {},\n work_id: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_BATCH.replace(\"{work_id}\", work_id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"regular_work_item\")\n}\n\n//endregion\n\n//region Regular Work Item Comments\n\n/**\n * Get the list of all Regular Work on Item Comments\n *\n * @param config custom configurations and filtering params\n */\nexport async function getRegularWorkOnItemCommentList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a new Regular Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param comment the new Regular Work Comment\n */\nexport async function postRegularWorkOnItemComment(\n config: HttpConfig = {},\n comment: PerformedWorkCommentPayload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Get a Regular Work on Item Comment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId\n */\nexport async function getRegularWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing Regular Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Regular Work Comment that should be updated\n * @param comment the updated Regular Work Comment\n */\nexport async function putRegularWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: PayloadEntity\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update a Regular Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId the id of the Regular Work Comment that should be partially updated\n * @param comment the updated Regular Work Comment\n */\nexport async function patchRegularWorkOnItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: Partial>\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comment, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create Regular Work on Item Comments in batch\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function postRegularWorkOnItemCommentBatch(\n config: HttpConfig = {},\n comments: PerformedWorkCommentPayload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comments, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update Regular Work on Item Comments in batch\n *\n * The primary keys of the corrective work comments, which are being updated\n * must be included as part of the payload data\n *\n * @param config custom configurations and filtering params\n * @param comments\n */\nexport async function patchRegularWorkOnItemCommentBatch(\n config: HttpConfig = {},\n comments: Partial[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comments, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Regular Work Item Comment Attachment\n\n/**\n * Get a list of all the Attachments of a Regular Work on Item Comment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachments belong to\n */\nexport async function getRegularWorkOnItemCommentAttachmentList(\n config: HttpConfig = {},\n commentId: string\n): Promise> {\n const entityURL = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"regular_work_item_comment\"]\n return i\n })\n\n return data\n}\n\n/**\n * Create a new Regular Work on Item Comment Attachment\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachment will be added\n * @param attachment Attachment to be uploaded\n */\nexport async function postRegularWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"regular_work_item_comment\"]\n\n return data\n}\n\n/**\n * Get a Regular Work on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getRegularWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"regular_work_item_comment\"]\n\n return data\n}\n\n/**\n * Delete a Regular Work on Item Comment Attachment by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function deleteRegularWorkOnItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n) {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\n/**\n * Get a Regular Work on Item Comment Attachment content by ID\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachment belongs to\n * @param attachmentId ID of the Attachment\n */\nexport async function getRegularWorkOnItemCommentAttachmentContent(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\n/**\n * Create Regular Work on Item Comment Attachments in batch\n *\n * @param config custom configurations and filtering params\n * @param commentId ID of the Regular Work Comment where the Attachment belongs to\n * @param attachments Attachments to be uploaded\n */\nexport async function postRegularWorkOnItemCommentAttachmentBatch(\n config: HttpConfig = {},\n commentId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_BATCH.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"regular_work_item_comment\")\n}\n\n//endregion\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport { PERMISSION_ACCESS_READ, PERMISSION_WORK_DOMAINS } from \"src/util/types/dataModels/user\"\nimport { WorkDomainFilterParams, WorkDomainWorkspace } from \"src/util/types/dataModels/workDomain\"\n\n/**\n * Return the list of all the Work Domains\n *\n * @param config custom configurations and filtering params\n */\nexport async function getWorkDomainsWorkspaceList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_DOMAINS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkDomainWorkspace(\n config: HttpConfig = {},\n id: string\n): Promise {\n const url = CSIurl.WORK_DOMAINS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_WORK_ORDERS,\n} from \"src/util/types/dataModels/user\"\nimport {\n WorkOrderPriority,\n WorkOrderPriorityFilterParams,\n} from \"src/util/types/dataModels/workOrderPriority\"\n\nexport async function getWorkOrderPrioritiesList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_PRIORITIES\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postWorkOrderPriority(\n config: HttpConfig = {},\n priority: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_PRIORITIES\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, priority, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkOrderPriority(\n config: HttpConfig = {},\n priorityId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putWorkOrderPriority(\n config: HttpConfig = {},\n priorityId: string,\n priority: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, priority, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderPriority(\n config: HttpConfig = {},\n priorityId: string,\n priority: Partial>\n): Promise {\n const url = CSIurl.WORK_ORDER_PRIORITIES_ID.replace(\"{id}\", priorityId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, priority, { signal, customConfig })\n\n return data\n}\n","import { csiAPI } from \"src/boot/axios\"\nimport { CSIurl } from \"src/util/enums/urls\"\nimport {\n appendAttachmentToFormData,\n concatUrl,\n getCustomConfig,\n getNewAbortHandler,\n handleAttachmentBatchResponses,\n} from \"src/util/http/httpHelper\"\nimport { Attachment, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { BatchErrors, ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_WORK_ORDERS,\n} from \"src/util/types/dataModels/user\"\nimport {\n WorkOrderCorrectiveItem,\n WorkOrderCorrectiveItemFilterParams,\n WorkOrderRegularItem,\n WorkOrderRegularItemFilterParams,\n} from \"src/util/types/dataModels/workOrder\"\nimport {\n WorkOrderCommentFilterParams,\n WorkOrderCorrectiveItemComment,\n WorkOrderRegularItemComment,\n} from \"src/util/types/dataModels/workOrderComment\"\n\n//region Work Order Corrective\n\n//region Work Order Corrective Item\n\nexport async function getWorkOrderCorrectiveItemList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItem(\n config: HttpConfig = {},\n payload: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkOrderCorrectiveItem(\n config: HttpConfig = {},\n workOrderId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putWorkOrderCorrectiveItem(\n config: HttpConfig = {},\n workOrderId: string,\n payload: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderCorrectiveItem(\n config: HttpConfig = {},\n workOrderId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Attachment\n\nexport async function getWorkOrderCorrectiveItemAttachmentList(\n config: HttpConfig = {},\n workOrderId: string\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"work_order_corrective_item\"]\n return i\n })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"work_order_corrective_item\"]\n\n return data\n}\n\nexport async function getWorkOrderCorrectiveItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"work_order_corrective_item\"]\n\n return data\n}\n\nexport async function deleteWorkOrderCorrectiveItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n) {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n return await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getWorkOrderCorrectiveItemAttachmentContent(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID_CONTENT.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItemAttachmentBatch(\n config: HttpConfig = {},\n workOrderId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_BATCH.replace(\"{wo_id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"work_order_corrective_item\")\n}\n\n//endregion\n\n//region Work Order Corrective Item Batch\n\nexport async function postWorkOrderCorrectiveItemBatch(\n config: HttpConfig = {},\n workOrders: PayloadEntity[]\n): Promise<\n ObjectList | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workOrders, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderCorrectiveItemBatch(\n config: HttpConfig = {},\n workOrders: Partial>[]\n): Promise<\n ObjectList | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, workOrders, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment\n\nexport async function getWorkOrderCorrectiveItemCommentList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItemComment(\n config: HttpConfig = {},\n workOrderComment: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workOrderComment, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkOrderCorrectiveItemComment(\n config: HttpConfig = {},\n commentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putWorkOrderCorrectiveItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, comment, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderCorrectiveItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: Partial>\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comment, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment Attachment\n\nexport async function getWorkOrderCorrectiveItemCommentAttachmentList(\n config: HttpConfig = {},\n commentId: string\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"work_order_corrective_item_comment\"]\n return i\n })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"work_order_corrective_item_comment\"]\n\n return data\n}\n\nexport async function getWorkOrderCorrectiveItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"work_order_corrective_item_comment\"]\n\n return data\n}\n\nexport async function deleteWorkOrderCorrectiveItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getWorkOrderCorrectiveItemCommentAttachmentContent(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postWorkOrderCorrectiveItemCommentAttachmentBatch(\n config: HttpConfig = {},\n commentId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"work_order_corrective_item_comment\")\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment Batch\n\nexport async function postWorkOrderCorrectiveItemCommentBatch(\n config: HttpConfig = {},\n comments: PayloadEntity[]\n): Promise<\n | ObjectList\n | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comments, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderCorrectiveItemCommentBatch(\n config: HttpConfig = {},\n comments: Partial>[]\n): Promise<\n | ObjectList\n | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comments, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//endregion\n\n//region Work Order Regular\n\n//region Work Order Regular Item\n\nexport async function getWorkOrderRegularItemList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_REGULAR_ON_ITEM\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postWorkOrderRegularItem(\n config: HttpConfig = {},\n payload: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkOrderRegularItem(\n config: HttpConfig = {},\n workOrderId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putWorkOrderRegularItem(\n config: HttpConfig = {},\n workOrderId: string,\n payload: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, payload, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderRegularItem(\n config: HttpConfig = {},\n workOrderId: string,\n payload: Partial>\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ID.replace(\"{id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, payload, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Attachment\n\nexport async function getWorkOrderRegularItemAttachmentList(\n config: HttpConfig = {},\n workOrderId: string\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"work_order_regular_item\"]\n return i\n })\n\n return data\n}\n\nexport async function postWorkOrderRegularItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS.replace(\"{wo_id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"work_order_regular_item\"]\n\n return data\n}\n\nexport async function getWorkOrderRegularItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"work_order_regular_item\"]\n\n return data\n}\n\nexport async function deleteWorkOrderRegularItemAttachment(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n) {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n return await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getWorkOrderRegularItemAttachmentContent(\n config: HttpConfig = {},\n workOrderId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID_CONTENT.replace(\n \"{wo_id}\",\n workOrderId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postWorkOrderRegularItemAttachmentBatch(\n config: HttpConfig = {},\n workOrderId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_BATCH.replace(\"{wo_id}\", workOrderId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"work_order_regular_item\")\n}\n\n//endregion\n\n//region Work Order Corrective Item Batch\n\nexport async function postWorkOrderRegularItemBatch(\n config: HttpConfig = {},\n workOrders: PayloadEntity[]\n): Promise> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workOrders, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderRegularItemBatch(\n config: HttpConfig = {},\n workOrders: Partial>[]\n): Promise | ObjectList> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, workOrders, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment\n\nexport async function getWorkOrderRegularItemCommentList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function postWorkOrderRegularItemComment(\n config: HttpConfig = {},\n workOrderComment: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, workOrderComment, { signal, customConfig })\n\n return data\n}\n\nexport async function getWorkOrderRegularItemComment(\n config: HttpConfig = {},\n commentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function putWorkOrderRegularItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: PayloadEntity\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.put(url, comment, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderRegularItemComment(\n config: HttpConfig = {},\n commentId: string,\n comment: Partial>\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ID.replace(\"{id}\", commentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comment, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment Attachment\n\nexport async function getWorkOrderRegularItemCommentAttachmentList(\n config: HttpConfig = {},\n commentId: string\n): Promise> {\n const entityURL = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const url = concatUrl(entityURL, { ...config?.mainParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: ObjectList } = await csiAPI.get(url, { signal, customConfig })\n\n data.results = data.results.map((i) => {\n i.context = [\"work_order_regular_item_comment\"]\n return i\n })\n\n return data\n}\n\nexport async function postWorkOrderRegularItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachment: AttachmentUpload\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = appendAttachmentToFormData(attachment)\n\n const { data }: { data: Attachment } = await csiAPI.post(url, formData, {\n headers,\n signal,\n customConfig,\n })\n\n data.context = [\"work_order_regular_item_comment\"]\n\n return data\n}\n\nexport async function getWorkOrderRegularItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data }: { data: Attachment } = await csiAPI.get(url, { signal, customConfig })\n\n data.context = [\"work_order_regular_item_comment\"]\n\n return data\n}\n\nexport async function deleteWorkOrderRegularItemCommentAttachment(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n await csiAPI.delete(url, { signal, customConfig })\n}\n\nexport async function getWorkOrderRegularItemCommentAttachmentContent(\n config: HttpConfig = {},\n commentId: string,\n attachmentId: string\n): Promise {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT.replace(\n \"{comment_id}\",\n commentId\n ).replace(\"{id}\", attachmentId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n }\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORK_ORDERS, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.get(url, { headers, signal, responseType: \"blob\", customConfig })\n\n return data\n}\n\nexport async function postWorkOrderRegularItemCommentAttachmentBatch(\n config: HttpConfig = {},\n commentId: string,\n attachments: AttachmentUpload[]\n): Promise | ObjectList> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH.replace(\n \"{comment_id}\",\n commentId\n )\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const formData = new FormData()\n\n for (const attachment of attachments) {\n appendAttachmentToFormData(attachment, formData)\n }\n\n const response = await csiAPI.post(url, formData, { headers, signal, customConfig })\n\n return handleAttachmentBatchResponses(response, \"work_order_regular_item_comment\")\n}\n\n//endregion\n\n//region Work Order Corrective Item Comment Batch\n\nexport async function postWorkOrderRegularItemCommentBatch(\n config: HttpConfig = {},\n comments: PayloadEntity[]\n): Promise<\n ObjectList | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.post(url, comments, { signal, customConfig })\n\n return data\n}\n\nexport async function patchWorkOrderRegularItemCommentBatch(\n config: HttpConfig = {},\n comments: Partial>[]\n): Promise<\n ObjectList | ObjectList\n> {\n const url = CSIurl.WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_BATCH\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_ORDERS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await csiAPI.patch(url, comments, { signal, customConfig })\n\n return data\n}\n\n//endregion\n\n//endregion\n","import { AxiosResponse, CanceledError, isAxiosError } from \"axios\"\nimport { CustomHTTPAxiosConfig } from \"src/boot/axios\"\nimport { useApiAbortStore } from \"src/stores/apiAbortStore\"\nimport { useApiCallStore } from \"src/stores/apiCallStore\"\nimport { Log } from \"src/util/classes/log\"\nimport {\n Attachment,\n AttachmentContext,\n AttachmentUpload,\n} from \"src/util/types/dataModels/attachment\"\nimport { BatchErrors, ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { HttpAbortConfig, HttpConfig, HttpRequestType } from \"src/util/types/dataModels/http\"\nimport { UserPermissionAccess, UserPermissionType } from \"src/util/types/dataModels/user\"\n\n// Concatenate a given url with different parameters separate by a \"?\"\nexport function concatUrl(\n url: string,\n args: Record | boolean | undefined | null>\n) {\n const params = new URLSearchParams()\n\n for (const [key, value] of Object.entries(args)) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n const arrayString = value.join(\",\")\n params.append(key, arrayString)\n } else {\n params.append(key, String(value))\n }\n }\n }\n\n const queryString = params.toString()\n return queryString ? url + \"?\" + queryString : url\n}\n\nexport function getNewAbortHandler(requestType: HttpRequestType, url?: string) {\n const apiAbortStore = useApiAbortStore()\n return apiAbortStore.createController(requestType, url)\n}\n\nexport function getCustomConfig(\n abortConfig: HttpAbortConfig,\n permissionType?: UserPermissionType,\n accessLevel?: UserPermissionAccess\n): CustomHTTPAxiosConfig {\n return {\n sfxAbortId: abortConfig.id,\n multiRequest: Boolean(abortConfig.multiRequest),\n permissionType,\n accessLevel,\n }\n}\n\nexport async function getAllEntitiesSequential(\n httpFunction: (config: HttpConfig, ...args: unknown[]) => Promise>,\n options: EntityConcurrentOptions,\n config: HttpConfig,\n list: T[] = [],\n page = 1,\n page_size = 250\n): Promise {\n // Somehow we fucked up and passed bad inputs\n if (page <= 0 || page_size < 0) {\n Log.error({\n message: \"Received negative values for page or page_size\",\n data: { page, page_size },\n })\n\n if (config.abortHandler) {\n const apiAbortStore = useApiAbortStore()\n apiAbortStore.removeController(config.abortHandler.id)\n }\n return list\n }\n\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", options.callUrl)\n abortHandler.multiRequest = true\n\n const data = await httpFunction({\n abortHandler,\n mainParams: {\n page,\n page_size,\n updated_dt__gte: options.lastCall,\n },\n })\n list.push(...data.results)\n\n // No more items\n if (data.count <= page * page_size) {\n const apiAbortStore = useApiAbortStore()\n apiAbortStore.removeController(abortHandler.id)\n return list\n }\n\n return await getAllEntitiesSequential(httpFunction, options, config, list, ++page, page_size)\n}\n\nexport async function getAllEntitiesConcurrent(\n httpFunction: (config: HttpConfig, ...args: unknown[]) => Promise>,\n options: EntityConcurrentOptions,\n config?: HttpConfig,\n page_size = 250\n): Promise {\n let list: T[] = []\n const apiAbortStore = useApiAbortStore()\n const apiCallStore = useApiCallStore()\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", options.callUrl)\n abortHandler.multiRequest = true\n\n const initialRequest = await httpFunction({\n mainParams: { page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n })\n\n list.push(...initialRequest.results)\n\n if (initialRequest.count > page_size) {\n const maxRequests = Math.ceil(initialRequest.count / page_size)\n const requests = []\n\n // \"i\" starts at 1 so that we skip the initial request\n for (let i = 1; i < maxRequests; i++) {\n const page = i + 1 // Pages begin from 1, so they are off by 1\n requests.push(\n httpFunction({\n mainParams: { page, page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n })\n )\n }\n\n const rawRemainingData = await Promise.allSettled(requests)\n const remainingData = rawRemainingData.flatMap((data) =>\n data.status === \"fulfilled\" ? data.value.results : []\n )\n\n list = list.concat(remainingData)\n }\n\n // If not aborted, then we successfully fetched the data, so update last call time\n if (!abortHandler.controller.signal.aborted) {\n apiCallStore.updateLastApiCallTimeConcurrent(options.callUrl)\n }\n\n if (!abortHandler.batchRequest) {\n // Need to manually remove controller as if we do it here, it would stop counting for other request in the batch\n apiAbortStore.removeController(abortHandler.id)\n }\n\n return list\n}\n\nexport async function getAllEntitiesForIdConcurrent(\n httpFunction: (config: HttpConfig, id: string) => Promise>,\n options: EntityConcurrentOptions,\n id: string,\n config?: HttpConfig,\n page_size = 250\n): Promise {\n let list: T[] = []\n const apiAbortStore = useApiAbortStore()\n const apiCallStore = useApiCallStore()\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", options.callUrl)\n abortHandler.multiRequest = true\n\n const initialRequest = await httpFunction(\n {\n mainParams: { page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n },\n id\n )\n\n list.push(...initialRequest.results)\n\n if (initialRequest.count > page_size) {\n const maxRequests = Math.ceil(initialRequest.count / page_size)\n const requests = []\n\n // \"i\" starts at 1 so that we skip the initial request\n for (let i = 1; i < maxRequests; i++) {\n const page = i + 1 // Pages begin from 1, so they are off by 1\n requests.push(\n httpFunction(\n {\n mainParams: { page, page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n },\n id\n )\n )\n }\n\n const rawRemainingData = await Promise.allSettled(requests)\n const remainingData = rawRemainingData.flatMap((data) =>\n data.status === \"fulfilled\" ? data.value.results : []\n )\n\n list = list.concat(remainingData)\n }\n\n // If not aborted, then we successfully fetched the data, so update last call time\n if (!abortHandler.controller.signal.aborted) {\n apiCallStore.updateLastApiCallTimeConcurrent(options.callUrl)\n }\n\n if (!abortHandler.batchRequest) {\n // Need to manually remove controller as if we do it here, it would stop counting for other request in the batch\n apiAbortStore.removeController(abortHandler.id)\n }\n\n return list\n}\n\nexport type EntityConcurrentOptions = {\n lastCall: string | undefined\n callUrl: string\n}\n\n/**\n * Concurrent fetch method specifically for fetching the attachments for various entities.\n * We use it since the backend doesn't want to bother making endpoints for getting them in an easy way.\n * Boo!\n */\nexport async function getAllAttachmentForEntity(\n httpFunction: (config: HttpConfig, entityId: string) => Promise>,\n options: EntityConcurrentOptions,\n entityId: string,\n page_size = 250\n): Promise {\n let list: Attachment[] = []\n const apiAbortStore = useApiAbortStore()\n const apiCallStore = useApiCallStore()\n const abortHandler = getNewAbortHandler(\"GET\", options.callUrl)\n abortHandler.multiRequest = true\n\n const initialRequest = await httpFunction(\n {\n mainParams: { page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n },\n entityId\n )\n\n list.push(...initialRequest.results)\n\n if (initialRequest.count > page_size) {\n const maxRequests = Math.ceil(initialRequest.count / page_size)\n const requests = []\n\n // \"i\" starts at 1 so that we skip the initial request\n for (let i = 1; i < maxRequests; i++) {\n const page = i + 1 // Pages begin from 1, so they are off by 1\n requests.push(\n httpFunction(\n {\n mainParams: { page, page_size, updated_dt__gte: options.lastCall },\n abortHandler,\n },\n entityId\n )\n )\n }\n\n const rawRemainingData = await Promise.allSettled(requests)\n const remainingData = rawRemainingData.flatMap((data) =>\n data.status === \"fulfilled\" ? data.value.results : []\n )\n\n list = list.concat(remainingData)\n }\n\n // If not aborted, then we successfully fetched the data, so update last call time\n if (!abortHandler.controller.signal.aborted) {\n apiCallStore.updateLastApiCallTimeConcurrent(options.callUrl)\n }\n\n apiAbortStore.removeController(abortHandler.id)\n\n return list\n}\n\n/**\n * If no form data is provided, it will create on its own.\n * If you provide form data, there is no need to reassign it.\n *\n * @param attachment\n * @param formData\n */\nexport function appendAttachmentToFormData(\n attachment: AttachmentUpload,\n formData = new FormData()\n): FormData {\n const name = attachment.name || attachment.data.name\n formData.append(name, attachment.data)\n\n if (attachment.description) {\n formData.append(\"description\", attachment.description)\n }\n\n return formData\n}\n\nexport function handleAttachmentBatchResponses(\n response: AxiosResponse | ObjectList>,\n context: AttachmentContext\n): ObjectList | ObjectList {\n response.data.results = response.data.results.map((i) => {\n if (\"id\" in i) i.context = [context]\n return i\n })\n\n return response.data\n}\n\nexport function isIgnoredError(error: unknown) {\n // We don't care about canceled errors since they are handled\n if (error instanceof CanceledError) return true\n\n // We don't care about forbidden errors since they are handled\n return isAxiosError(error) && (error.status === 403 || error.response?.status === 403)\n}\n","import { springboardAPI } from \"src/boot/axios\"\nimport { getCommonDB } from \"src/db/databases\"\nimport { SpringboardURL } from \"src/util/enums/urls\"\nimport { getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_DELETE,\n PERMISSION_ACCESS_READ,\n PERMISSION_USER_ACCOUNTS,\n UserBasic,\n UserCurrent,\n UserPassword,\n UserRole,\n} from \"src/util/types/dataModels/user\"\n\n/**\n * The following endpoints are springboard and not CSI\n */\n\n/**\n * Returns the current user data and settings\n */\nexport async function getCurrentUser(config: HttpConfig = {}): Promise {\n const url = SpringboardURL.USER_ME\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Updates the current user data and settings\n *\n * @param config\n * @param userData object of user data\n */\nexport async function patchCurrentUser(\n config: HttpConfig = {},\n userData: Partial\n): Promise {\n const url = SpringboardURL.USER_ME\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.patch(url, userData, { signal, customConfig })\n\n return data\n}\n\n/**\n * Change the password for the current user\n *\n * @param config\n * @param passwords object of current and new passwords\n */\nexport async function patchChangePassword(config: HttpConfig = {}, passwords: UserPassword) {\n const url = SpringboardURL.USER_ME_PASSWORD\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(abortHandler)\n const signal = abortHandler.controller.signal\n\n await springboardAPI.patch(url, passwords, { signal, customConfig })\n}\n\nexport async function getUserRoles(config: HttpConfig = {}): Promise> {\n const url = SpringboardURL.USER_ROLES\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\nexport async function getUser(config: HttpConfig = {}, userId: string): Promise {\n const url = SpringboardURL.USER_ID.replace(\"{id}\", userId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n const db = await getCommonDB()\n await db.user.upsert(data)\n\n return data\n}\n\nexport async function getUserImage(config: HttpConfig = {}, userId: string): Promise {\n const url = SpringboardURL.USER_ID_IMAGE.replace(\"{id}\", userId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, {\n headers,\n signal,\n responseType: \"blob\",\n customConfig,\n })\n\n return data\n}\n\nexport async function getCurrentUserImage(config: HttpConfig = {}): Promise {\n const url = SpringboardURL.USER_ME_IMAGE\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, {\n headers,\n signal,\n responseType: \"blob\",\n customConfig,\n })\n\n return data\n}\n\nexport async function postCurrentUserImage(\n config: HttpConfig = {},\n image: File\n): Promise<{ image: string }> {\n const url = SpringboardURL.USER_ME_IMAGE\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n // Expected format is { \"image\": \"...data\" }\n const formData = new FormData()\n formData.append(\"image\", image)\n\n const { data } = await springboardAPI.post(url, formData, { headers, signal, customConfig })\n\n return data\n}\n\nexport async function deleteCurrentUserImage(config: HttpConfig = {}) {\n const url = SpringboardURL.USER_ME_IMAGE\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"DELETE\", url)\n\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_ACCESS_DELETE\n )\n const signal = abortHandler.controller.signal\n\n await springboardAPI.delete(url, { signal, customConfig })\n}\n","import { springboardAPI } from \"src/boot/axios\"\nimport { SpringboardURL } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { ObjectList, PayloadEntity } from \"src/util/types/dataModels/genericObject\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_CREATE,\n PERMISSION_ACCESS_READ,\n PERMISSION_ACCESS_UPDATE,\n PERMISSION_WORK_DOMAINS,\n} from \"src/util/types/dataModels/user\"\nimport { WorkDomainFilterParams, WorkDomainGlobal } from \"src/util/types/dataModels/workDomain\"\n\n/**\n * Return the list of all the Work Domains\n *\n * @param config custom configurations and filtering params\n */\nexport async function getWorkDomainsGlobalList(\n config: HttpConfig = {}\n): Promise> {\n const entityURL = SpringboardURL.WORK_DOMAINS\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", entityURL)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Create a Work Domain\n *\n * @param config custom configurations and filtering params\n * @param workDomain\n */\nexport async function postWorkDomainGlobal(\n config: HttpConfig = {},\n workDomain: PayloadEntity\n): Promise {\n const url = SpringboardURL.WORK_DOMAINS\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"POST\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_CREATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.post(url, workDomain, { signal, customConfig })\n\n return data\n}\n\n/**\n * Return a Work Domain\n *\n * @param config custom configurations and filtering params\n * @param id\n */\nexport async function getWorkDomainGlobal(\n config: HttpConfig = {},\n id: string\n): Promise {\n const url = SpringboardURL.WORK_DOMAINS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_READ\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Replace an existing Work Domain\n *\n * @param config custom configurations and filtering params\n * @param id\n * @param workDomain\n */\nexport async function putWorkDomainGlobal(\n config: HttpConfig = {},\n id: string,\n workDomain: PayloadEntity\n): Promise {\n const url = SpringboardURL.WORK_DOMAINS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PUT\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.put(url, workDomain, { signal, customConfig })\n\n return data\n}\n\n/**\n * Partially update a Work Domain\n *\n * @param config custom configurations and filtering params\n * @param id\n * @param workDomain\n */\nexport async function patchWorkDomainGlobal(\n config: HttpConfig = {},\n id: string,\n workDomain: Partial>\n): Promise {\n const url = SpringboardURL.WORK_DOMAINS_ID.replace(\"{id}\", id)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"PATCH\", url)\n const customConfig = getCustomConfig(\n abortHandler,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_ACCESS_UPDATE\n )\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.patch(url, workDomain, { signal, customConfig })\n\n return data\n}\n","import { springboardAPI } from \"src/boot/axios\"\nimport { SpringboardURL } from \"src/util/enums/urls\"\nimport { concatUrl, getCustomConfig, getNewAbortHandler } from \"src/util/http/httpHelper\"\nimport { HttpConfig } from \"src/util/types/dataModels/http\"\nimport {\n PERMISSION_ACCESS_READ,\n PERMISSION_WORKSPACES,\n UserBasic,\n} from \"src/util/types/dataModels/user\"\nimport { WorkspaceDetail, WorkspaceUserFilterParams } from \"src/util/types/dataModels/workspace\"\n\n/**\n * The following endpoints are springboard and not CSI\n */\n\n/**\n * Returns the list of workspaces for the user\n */\nexport async function getWorkspaceList(config: HttpConfig = {}): Promise {\n const url = SpringboardURL.WORKSPACES_LIST\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORKSPACES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Returns the workspace data for the given workspace id\n *\n * @param config\n * @param workspaceId\n */\nexport async function getWorkspace(\n config: HttpConfig = {},\n workspaceId: string\n): Promise {\n const url = SpringboardURL.WORKSPACES_ID.replace(\"{id}\", workspaceId)\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORKSPACES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n\n/**\n * Returns the users for a given workspace.\n *\n * @param config\n * @param workspaceId\n */\nexport async function getUsersForWorkspace(\n config: HttpConfig = {},\n workspaceId: string\n): Promise {\n const entityURL = SpringboardURL.WORKSPACES_ID_USERS.replace(\"{id}\", workspaceId)\n const url = concatUrl(entityURL, { ...config?.mainParams, ...config?.filterParams })\n const abortHandler = config?.abortHandler || getNewAbortHandler(\"GET\", url)\n const customConfig = getCustomConfig(abortHandler, PERMISSION_WORKSPACES, PERMISSION_ACCESS_READ)\n const signal = abortHandler.controller.signal\n\n const { data } = await springboardAPI.get(url, { signal, customConfig })\n\n return data\n}\n","import { date, uid } from \"quasar\"\nimport { CardNotificationEvent } from \"src/util/enums/notifications\"\nimport { getRandomID, getRandomInt, getTimeOfEvent } from \"src/util/functions/randomData\"\nimport { SystemNotificationCardData, UserNotificationCardData } from \"src/util/types/notifications\"\nimport { Config, names, starWars, uniqueNamesGenerator } from \"unique-names-generator\"\n\nconst mockUserNotifications: UserNotificationCardData[] = []\nconst mockSystemNotifications: SystemNotificationCardData[] = []\n\nconst config: Config = {\n dictionaries: [names, starWars],\n separator: \" \",\n}\n\n// Object.keys() returns an array of both keys and values, hence divide its length by 2\nconst eventsInTotal = Object.keys(CardNotificationEvent).length / 2\n\nfunction addPredefinedData() {\n mockUserNotifications.push(\n {\n id: uid(),\n triggeringUser: uniqueNamesGenerator(config),\n timeSinceReceived: getTimeOfEvent(\"today\"),\n eventName: getRandomInt(eventsInTotal),\n relationId: \"GS-R-2021-002\",\n relationRepresentation: \"Clean up Cellar Deck\",\n hasItem: true,\n hasIssue: true,\n priority: getRandomInt(3, 1),\n isRead: false,\n isSystemCardNotification: false,\n },\n {\n // This notification should not appear, cuz it's older than 90 days\n id: uid(),\n triggeringUser: \"Invisible Notification\",\n timeSinceReceived: getTimeOfEvent(\"old\"),\n eventName: getRandomInt(eventsInTotal),\n relationId: \"GS-R-2021-002\",\n relationRepresentation: \"Clean up Cellar Deck\",\n hasItem: false,\n hasWorkOrder: true,\n priority: getRandomInt(3, 1),\n isRead: false,\n isSystemCardNotification: false,\n },\n {\n // This notification should not appear, cuz it's older than 90 days\n id: uid(),\n triggeringUser: \"Invisible Notification\",\n timeSinceReceived: getTimeOfEvent(\"old\"),\n eventName: getRandomInt(eventsInTotal),\n relationId: \"1278-15-10-45\",\n relationRepresentation: \"Out of toilet paper\",\n hasItem: true,\n hasIssue: true,\n priority: getRandomInt(3, 1),\n isRead: false,\n isSystemCardNotification: false,\n },\n {\n id: uid(),\n triggeringUser: uniqueNamesGenerator(config),\n timeSinceReceived: getTimeOfEvent(\"recent\"),\n eventName: getRandomInt(eventsInTotal),\n relationId: \"1278-15-10-45\",\n relationRepresentation: \"ElE-R-2023-002\",\n hasItem: false,\n isRead: false,\n isSystemCardNotification: false,\n }\n )\n}\n\nfunction addExtraMockData() {\n for (let i = 0; i <= 5; i++) {\n const id = uid()\n const triggeringUser = uniqueNamesGenerator(config)\n const hasItem = Math.random() < 0.5\n const hasIssue = Math.random() < 0.5\n const hasWorkOrder = Math.random() < 0.5\n const isRead = Math.random() < 0.5\n const priority = hasIssue || hasWorkOrder ? getRandomInt(3, 1) : undefined\n\n const notificationData: UserNotificationCardData = {\n id,\n triggeringUser,\n timeSinceReceived: getTimeOfEvent(\"random\"),\n eventName: getRandomInt(eventsInTotal),\n relationId: getRandomID(10),\n relationRepresentation: getRandomID(11),\n hasItem,\n hasIssue,\n hasWorkOrder,\n priority,\n isRead,\n isSystemCardNotification: false,\n }\n mockUserNotifications.push(notificationData)\n }\n}\n\nfunction addMockSystemNotificationData() {\n const dateInThePast = date.subtractFromDate(new Date(), { days: getRandomInt(20, 2) })\n // Make the minutes divisible by 5 (so that we don't see weird cases like fx. 11:18)\n const startTime = date.adjustDate(dateInThePast, {\n minutes: getRandomInt(11, 1) * 5,\n })\n\n const endTime = date.addToDate(startTime, { minutes: getRandomInt(11, 1) * 5 })\n\n // This notification should not appear, cuz its end time is in the past\n mockSystemNotifications.push({\n id: uid(),\n timeSinceReceived: getTimeOfEvent(\"recent\"),\n startTime,\n endTime,\n isRead: false,\n isSystemCardNotification: true,\n })\n\n for (let i = 0; i <= 5; i++) {\n const dateInTheFuture = date.addToDate(new Date(), { days: getRandomInt(60, 1) })\n // Make the minutes divisible by 5 (so that we don't see weird cases like fx. 11:18)\n const startTime = date.adjustDate(dateInTheFuture, {\n minutes: getRandomInt(11, 1) * 5,\n })\n\n const endTime = date.addToDate(startTime, { minutes: getRandomInt(11, 1) * 5 })\n const isRead = Math.random() < 0.5\n\n const systemNotificationData: SystemNotificationCardData = {\n id: uid(),\n timeSinceReceived: getTimeOfEvent(\"random\"),\n startTime: startTime,\n endTime: endTime,\n isRead,\n isSystemCardNotification: true,\n }\n mockSystemNotifications.push(systemNotificationData)\n }\n}\n\nexport function getNotificationMockData() {\n const storedData = localStorage.getItem(\"mockNotifications\")\n if (storedData) {\n return JSON.parse(storedData)\n } else {\n mockUserNotifications.length = 0\n mockSystemNotifications.length = 0\n\n // Fill up hard coded examples\n addPredefinedData()\n // Fill up dynamically generated examples\n addExtraMockData()\n // Fill up all system cards examples\n addMockSystemNotificationData()\n\n const allNotifications = [...mockUserNotifications, ...mockSystemNotifications]\n\n localStorage.setItem(\"mockNotifications\", JSON.stringify(allNotifications))\n return allNotifications\n }\n}\n","/**\n * Generic class to handle in-memory search on arbitrary items.\n *\n * New items can be added dynamically.\n * Items are generically typed and the extractor determines how to interpret them.\n *\n * Search terms must be strings, but result can be anything.\n * However, not that there is an advantage to using results that are comparable\n * with `===` when using the `uniqueValueOptimization` option.\n *\n * ## Use cases\n *\n * ### Tag search\n *\n * Items with tags can be searched by treating the `searchTerm` as the tag and\n * adding each item to multiple terms. E.g. if item an item `Carrot` has the\n * tags `food` and `plant` and the item `Cow` has the tags `food` and `animal`,\n * tag search can be setup by\n * ```\n * const map = new SearchMap()\n * map.addTerm(\"food\", Carrot)\n * map.addTerm(\"food\", Cow)\n * map.addTerm(\"plant\", Carrot)\n * map.addTerm(\"animal\", Cow)\n * ```\n *\n * To optimize this, the extractor could have its signature changed to let it\n * add multiple entries per item. This improvement is listed below under\n * _Future work_.\n *\n * ### Title search\n *\n * This is the simplest form of search, which involves finding an item or value\n * by full or partial match.\n * It is built like tag search, but usually limited to one result per search\n * term, and the extractor can be used to add items easily.\n *\n * An extractor is defined to do the work of splitting the input items into\n * search term and value.\n *\n * ## Future work\n *\n * Going forward, this class will be expanded as needed. The following are features we highly expect will be relevant in\n * the future.\n *\n * - Removing items.\n * - Removing terms (will remove multiple result entries).\n * - Make it possible for the extractor to add multiple entries per item.\n * - Optional extractor.\n * - Index access for exact matches. Perhaps configurable to be for partial instead.\n */\nexport class SearchMap {\n /**\n * Maps search terms to result arrays.\n * Each added term will have at least one entry of the result type.\n */\n private resultMap: Map\n private readonly extractor: (item: ItemType) => [{ term: string; value: ResultType }]\n private readonly caseSensitive: boolean\n private readonly uniqueValueOptimization: boolean\n\n /**\n * Constructs a new Search Map, by setting it up with an extractor.\n *\n * @param extractor The extractor extracts the term (the exact string matched on exact match search) and the result\n * from the data items. This way it defines which part of the items is the result we are looking for (it could be the\n * whole item or just a part of it), and which part we use to define the search term string that will yield the\n * result(s) on a hit.\n * @param caseSensitive Whether search is case-sensitive.\n * @param uniqueValueOptimization Optimize by only keeping one of each result in each result arrays under each term.\n * Enabling this makes {@link addItem} idempotent - i.e. adding the same result for the same term twice will make no\n * changes to the search map the second time.\n * Note that result values are compared with `===`, so adding two identical objects (e.g. by making a shallow copy of\n * an object and adding them both under the same term) will add them both to the result array.\n * @param dataItems An iterable with the initial data items to base the search on.\n */\n constructor(\n extractor: (item: ItemType) => [{ term: string; value: ResultType }],\n { caseSensitive = false, uniqueValueOptimization = false } = {},\n dataItems?: Iterable\n ) {\n this.resultMap = new Map()\n this.extractor = extractor\n this.caseSensitive = caseSensitive\n this.uniqueValueOptimization = uniqueValueOptimization\n\n if (dataItems) {\n for (const dataItem of dataItems) {\n this.addItem(dataItem)\n }\n }\n }\n\n //region Properties\n\n /**\n * Get the number of added terms\n */\n get termCount() {\n return this.resultMap.size\n }\n\n //endregion\n\n //region Adding\n\n /**\n * Add a specific term to the map.\n *\n * @param searchTerm The term to add.\n * @param value The value to add under the term.\n */\n addTerm(searchTerm: string, value: ResultType) {\n if (!this.caseSensitive) {\n searchTerm = searchTerm.toLowerCase()\n }\n\n // When the result map does not have the term...\n if (!this.resultMap.has(searchTerm)) {\n // ...add it with the current value...\n this.resultMap.set(searchTerm, [value])\n } else {\n // ...otherwise, if...\n const termResults = this.resultMap.get(searchTerm)\n if (\n termResults && // (Fool typing because `Map.get()` has return type `V | undefined` - it will always be an array here).\n (!this.uniqueValueOptimization || // ...unique optimization is disabled, or...\n !termResults.includes(value)) // ...the term result array does not already include the value...\n ) {\n // ...add the value\n termResults.push(value)\n }\n }\n }\n\n /**\n * Adds an item to the map.\n *\n * @param item The item to extract and add.\n */\n addItem(item: ItemType) {\n const entries = this.extractor(item)\n for (const entry of entries) {\n this.addTerm(entry.term, entry.value)\n }\n }\n\n //endregion\n\n //region Querying\n\n /**\n * Search for an exact match of a term.\n *\n * E.g. if the map contains the terms \"Alpha\", \"Bravo\" and \"Charlie\", results can be yielded for each of these terms\n * and no results can be yielded for any other terms.\n *\n * @param searchTerm The term to search for.\n * @param maxResults Maximum number of yielded results.\n */\n getExactMatches(searchTerm: string, maxResults?: number): ResultType[] {\n if (!this.caseSensitive) {\n searchTerm = searchTerm.toLowerCase()\n }\n if (this.resultMap.has(searchTerm)) {\n const result = this.resultMap.get(searchTerm)\n // Slice on too many results\n if (result && maxResults && result.length > maxResults) {\n return result.slice(0, maxResults)\n }\n return result || []\n } else {\n return []\n }\n }\n\n /**\n * Like {@link getExactMatches}, but returns undefined on no matches.\n * Useful if you want to test whether the result is truthy or falsy, as empty arrays are truthy.\n *\n * @param searchTerm The term to search for.\n * @param maxResults Maximum number of yielded results.\n */\n getExactMatchesOrUndefined(searchTerm: string, maxResults?: number): ResultType[] | undefined {\n const result = this.getExactMatches(searchTerm, maxResults)\n return result.length === 0 ? undefined : result\n }\n\n /**\n * Search for a partial match of a term.\n *\n * E.g. if the map contains the terms \"Alpha\", \"Bravo\" and \"Charlie\", searching for the term \"ha\" can yield the\n * concatenated results from both \"Alpha\" and \"Charlie\".\n *\n * @param searchTerm The term to search for.\n * @param maxResults Maximum number of yielded results.\n */\n getPartialMatches(searchTerm: string, maxResults?: number): ResultType[] {\n if (!this.caseSensitive) {\n searchTerm = searchTerm.toLowerCase()\n }\n\n // Note: We could use a set here to de-duplicate, but that would not work for object result types.\n // Furthermore, we do not expect the same result to show up under two different terms.\n // - JMK, 2021-06-21\n const result: ResultType[] = []\n\n searchLoop: for (const key of this.resultMap.keys()) {\n // Using the Map key iterator to avoid filling memory by constructing arrays\n if (key.includes(searchTerm)) {\n // Term is valid. Add results to final result.\n const keyResults = this.resultMap.get(key) || [] // Last part to avoid typing complaining about possibly undefined\n for (const keyResult of keyResults) {\n result.push(keyResult)\n if (result.length === maxResults) {\n break searchLoop\n }\n }\n }\n }\n\n return result\n }\n\n /**\n * Like {@link getPartialMatches}, but returns undefined on no matches.\n * Useful if you want to test whether the result is truthy or falsy, as empty arrays are truthy.\n *\n * @param searchTerm The term to search for.\n * @param maxResults Maximum number of yielded results.\n */\n getPartialMatchesOrUndefined(searchTerm: string, maxResults?: number): ResultType[] | undefined {\n const result = this.getPartialMatches(searchTerm, maxResults)\n return result.length === 0 ? undefined : result\n }\n\n //endregion\n}\n","import { UserSettings } from \"src/stores/configurationStore\"\n\nexport interface UserCurrent extends UserBasic {\n settings: { data: UserSettings } | null\n permissions: Record & PermissionsGlobal\n}\n\ntype PermissionsGlobal = {\n global?: UserPermissions\n}\n\ntype PermissionsForWorkspace = {\n // Each work domain is an object with its UUID as a key, and the value being an object of user permissions\n work_domain_permissions: Record\n workspace_permissions: UserPermissions\n}\n\nexport interface UserPassword {\n current_password: string\n password: string\n}\n\nexport interface UserBasic {\n id: string // UUID\n email: string\n first_name: string\n last_name: string\n is_active: boolean\n is_superuser: boolean\n roles: string[] // UUIDs\n}\n\nexport type UserWithAvatar = UserBasic & { avatar?: string | null }\n\nexport type UserAvatar = {\n id: string // userID\n path: string\n type: string\n}\n\nexport interface UserRole {\n id: string // UUID\n name: string // min 1, max 128\n organisation: string // UUID\n service_provider: string // UUID\n workspaces: string[] // UUID\n work_domains: string[] // UUID\n}\n\nexport const PERMISSION_ACCESS_CREATE = \"c\"\nexport const PERMISSION_ACCESS_READ = \"r\"\nexport const PERMISSION_ACCESS_UPDATE = \"u\"\nexport const PERMISSION_ACCESS_DELETE = \"d\"\n// Currently (15 Jan 2024) no real meaning, only if the user has access to the internal Admin UI\nexport const PERMISSION_ACCESS_ADMIN_UI = \"+\"\n\n// Allows for checks for all the user permission and their permutations\ntype Permutations = T extends string\n ? T | `${T}${Permutations>}`\n : never\n\nexport type UserPermissionAccess =\n | typeof PERMISSION_ACCESS_CREATE\n | typeof PERMISSION_ACCESS_READ\n | typeof PERMISSION_ACCESS_UPDATE\n | typeof PERMISSION_ACCESS_DELETE\n | typeof PERMISSION_ACCESS_ADMIN_UI\n\n// \"C\", \"R\", \"U\", \"D\", \"+\" and all of their combinations and permutations\ntype UserPermissionAccessCombinations = Permutations\n\nexport type UserPermissions = {\n [Permission in UserPermissionType]: UserPermissionAccessCombinations\n}\n\nexport const PERMISSION_ANNOUNCEMENTS = \"announcements\"\nexport const PERMISSION_ATTRIBUTES = \"attributes\"\nexport const PERMISSION_AUDIT = \"audit\"\nexport const PERMISSION_CHANGE_APPROVALS = \"change_approvals\"\nexport const PERMISSION_CHANGE_REQUESTS = \"change_requests\"\nexport const PERMISSION_ORGANISATIONS = \"organisations\"\nexport const PERMISSION_FILES = \"files\"\nexport const PERMISSION_GIS = \"gis\"\nexport const PERMISSION_HISTORY = \"history\"\nexport const PERMISSION_IDENTIFIERS = \"identifiers\"\nexport const PERMISSION_ISSUES = \"issues\"\nexport const PERMISSION_ITEMS = \"items\"\nexport const PERMISSION_LICENSE_ACCOUNTS = \"license_accounts\"\nexport const PERMISSION_OAUTH_APPS = \"oauth_apps\"\nexport const PERMISSION_OAUTH_TOKENS = \"oauth_tokens\"\nexport const PERMISSION_PERFORMED_WORK = \"performed_work\"\nexport const PERMISSION_PLANNING = \"planning\"\nexport const PERMISSION_PROCEDURES = \"procedures\"\nexport const PERMISSION_SERVICE_PROVIDERS = \"service_providers\"\nexport const PERMISSION_SPRINGBOARD_ADMIN_UI = \"springboard_admin_ui\"\nexport const PERMISSION_USER_ACCOUNTS = \"user_accounts\"\nexport const PERMISSION_USER_ROLES = \"user_roles\"\nexport const PERMISSION_USER_SETTINGS = \"user_settings\"\nexport const PERMISSION_VPC = \"vpc\"\nexport const PERMISSION_WORKSPACES = \"workspaces\"\nexport const PERMISSION_WORKSPACE_ADMIN_UI = \"workspace_admin_ui\"\nexport const PERMISSION_WORK_DOMAINS = \"work_domains\"\nexport const PERMISSION_WORK_ORDERS = \"work_orders\"\n\nconst PERMISSIONS_LIST = [\n PERMISSION_ANNOUNCEMENTS,\n PERMISSION_ATTRIBUTES,\n PERMISSION_AUDIT,\n PERMISSION_CHANGE_APPROVALS,\n PERMISSION_CHANGE_REQUESTS,\n PERMISSION_ORGANISATIONS,\n PERMISSION_FILES,\n PERMISSION_GIS,\n PERMISSION_HISTORY,\n PERMISSION_IDENTIFIERS,\n PERMISSION_ISSUES,\n PERMISSION_ITEMS,\n PERMISSION_LICENSE_ACCOUNTS,\n PERMISSION_OAUTH_APPS,\n PERMISSION_OAUTH_TOKENS,\n PERMISSION_PERFORMED_WORK,\n PERMISSION_PLANNING,\n PERMISSION_PROCEDURES,\n PERMISSION_SERVICE_PROVIDERS,\n PERMISSION_SPRINGBOARD_ADMIN_UI,\n PERMISSION_USER_ACCOUNTS,\n PERMISSION_USER_ROLES,\n PERMISSION_USER_SETTINGS,\n PERMISSION_VPC,\n PERMISSION_WORKSPACES,\n PERMISSION_WORKSPACE_ADMIN_UI,\n PERMISSION_WORK_DOMAINS,\n PERMISSION_WORK_ORDERS,\n] as const\n\nexport type UserPermissionType = (typeof PERMISSIONS_LIST)[number]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, resolveComponent as _resolveComponent, mergeProps as _mergeProps, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { computed, useAttrs } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n ...{\n inheritAttrs: false,\n},\n __name: 'SfxBtn',\n props: {\n class: {\n type: String,\n default: undefined,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n\n\n//endregion\n\n//region Variables\n\nconst attrs = useAttrs()\n\nconst isDisabled = computed(() => attrs.disable)\n\nconst filteredAttrs = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { disable, ...restAttrs } = attrs\n if (restAttrs.onClick && typeof restAttrs.onClick === \"function\") {\n restAttrs.onClick = handleClickEvent(restAttrs.onClick)\n }\n return restAttrs\n})\n\n//endregion\n\n//region Functions\n\nfunction handleClickEvent(clickFn: unknown) {\n if (isDisabled.value) return\n return clickFn\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_btn = _resolveComponent(\"q-btn\")!\n\n return (_openBlock(), _createBlock(_component_q_btn, _mergeProps({\n unelevated: \"\",\n \"no-caps\": \"\",\n color: \"primary\",\n class: `sfx-btn${props.class ? ` ${props.class}` : ''} ${isDisabled.value ? ' disabled' : ''}`\n }, filteredAttrs.value), _createSlots({ _: 2 }, [\n (_ctx.$slots.default)\n ? {\n name: \"default\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.loading)\n ? {\n name: \"loading\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"loading\")\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1040, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxBtn.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBtn.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QBtn});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, mergeProps as _mergeProps, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\n\n//region Props and Emits\n\n// If the button's flat design is not desired in some cases,\n// a prop can be defined to make it possible to disable it.\n// Note: If the flat prop is disabled, a color for the button\n// (and maybe for its text) should be specified.\n\n\nexport default /*#__PURE__*/_defineComponent({\n ...{\n inheritAttrs: false,\n},\n __name: 'SfxBtnIcon',\n props: {\n icon: {\n type: String,\n required: true,\n },\n\n class: {\n type: String,\n },\n\n color: {\n type: String,\n },\n\n textColor: {\n type: String,\n },\n\n size: {\n type: String,\n default: \"lg\",\n },\n\n padding: {\n type: String,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"click\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n\n\n//endregion\n\n//region Functions\n\nfunction handleClick(event: Event) {\n // Adding event allows for emit modifiers like \"stop, once, etc.\" to be used\n emit(\"click\", event)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxBtn, _mergeProps({\n flat: \"\",\n dense: \"\",\n round: \"\",\n icon: props.icon,\n class: props.class,\n color: props.color,\n \"text-color\": props.textColor,\n size: props.size,\n padding: props.padding,\n disable: props.disable,\n onClick: handleClick\n }, _ctx.$attrs), _createSlots({ _: 2 }, [\n (_ctx.$slots.default)\n ? {\n name: \"default\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.loading)\n ? {\n name: \"loading\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"loading\")\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1040, [\"icon\", \"class\", \"color\", \"text-color\", \"size\", \"padding\", \"disable\"]))\n}\n}\n\n})","import script from \"./SfxBtnIcon.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBtnIcon.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, mergeProps as _mergeProps, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxBtnLink',\n props: {\n inline: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxBtn, _mergeProps({\n flat: \"\",\n dense: props.inline,\n padding: props.inline ? '0' : undefined\n }, _ctx.$attrs), _createSlots({ _: 2 }, [\n (_ctx.$slots.default)\n ? {\n name: \"default\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.loading)\n ? {\n name: \"loading\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"loading\")\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1040, [\"dense\", \"padding\"]))\n}\n}\n\n})","import script from \"./SfxBtnLink.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBtnLink.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, mergeProps as _mergeProps, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxBtnOutline',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxBtn, _mergeProps({ outline: \"\" }, _ctx.$attrs), _createSlots({ _: 2 }, [\n (_ctx.$slots.default)\n ? {\n name: \"default\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.loading)\n ? {\n name: \"loading\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"loading\")\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1040))\n}\n}\n\n})","import script from \"./SfxBtnOutline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBtnOutline.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxBtnUndo',\n props: {\n modelValue: {\n required: true,\n },\n\n originalValue: {\n required: true,\n },\n},\n emits: [\"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst currentModel = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\n//endregion\n\n//region Functions\n\nfunction resetValue() {\n currentModel.value = props.originalValue\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxBtnIcon, {\n icon: _unref(Icons).UNDO,\n color: \"transparent\",\n \"text-color\": \"navy-base\",\n onClick: resetValue\n }, null, 8, [\"icon\"]))\n}\n}\n\n})","import script from \"./SfxBtnUndo.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBtnUndo.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementBlock as _createElementBlock, createVNode as _createVNode, withCtx as _withCtx, Fragment as _Fragment, withModifiers as _withModifiers, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"sfx-card__icon-row q-mr-xs\"\n}\n\nimport { QImgProps } from \"quasar\"\nimport SfxIconRow from \"src/components/special/SfxIconRow.vue\"\nimport { SFX_CARD_HEIGHT, SFX_CARD_IMG_WIDTH } from \"src/util/constants/configurations\"\nimport { IMG_PLACEHOLDER } from \"src/util/constants/files\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCard',\n props: {\n active: {\n type: Boolean,\n default: false,\n },\n\n clickable: {\n type: Boolean,\n default: false,\n },\n\n closed: {\n type: Boolean,\n default: false,\n },\n\n imgSrc: {\n type: String,\n default: undefined,\n },\n\n imgBgColor: {\n type: String,\n default: undefined,\n },\n\n imgFit: {\n type: String as PropType,\n default: \"cover\",\n },\n\n hasImg: {\n type: Boolean,\n default: false,\n },\n\n imgPlaceholder: {\n type: String,\n },\n\n iconRow: {\n type: Array as PropType,\n default: (): IconRowElement[] => [],\n },\n\n bordered: {\n type: Boolean,\n default: true,\n },\n\n height: {\n type: Number,\n default: SFX_CARD_HEIGHT,\n },\n},\n emits: [\"click\", \"clickCtrl\", \"clickShift\", \"clickMeta\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst classes = computed(() => {\n return {\n \"sfx-card--active\": props.active,\n \"sfx-card--hoverable\": props.clickable,\n \"sfx-card--closed\": props.closed,\n \"cursor-pointer\": props.clickable,\n }\n})\n\nconst cardSize = computed(() => props.height.toString() + \"px\")\n\nconst cardStyles = computed(() => {\n return {\n \"max-height\": cardSize.value,\n }\n})\n\n// Subtract 4px because of the card's borders (2px each)\nconst imgHeight = String(props.height - 4) + \"px\"\n\nconst imgStyles = computed(() => {\n return {\n \"background-color\": props.imgBgColor,\n height: imgHeight,\n width: SFX_CARD_IMG_WIDTH,\n \"min-width\": SFX_CARD_IMG_WIDTH,\n }\n})\n\nconst placeholder = computed(() => props.imgPlaceholder ?? IMG_PLACEHOLDER)\n\n//endregion\n\n//region Functions\n\nfunction clearMemory(src: string) {\n URL.revokeObjectURL(src)\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_separator = _resolveComponent(\"q-separator\")!\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _directive_ripple = _resolveDirective(\"ripple\")!\n\n return _withDirectives((_openBlock(), _createBlock(_component_q_card, {\n bordered: props.bordered,\n flat: \"\",\n class: _normalizeClass([\"sfx-card\", classes.value]),\n style: _normalizeStyle(cardStyles.value),\n onClick: [\n _cache[0] || (_cache[0] = _withModifiers(($event: any) => (props.clickable ? emit('click') : undefined), [\"exact\"])),\n _cache[1] || (_cache[1] = _withModifiers(($event: any) => (props.clickable ? emit('clickCtrl') : undefined), [\"ctrl\"])),\n _cache[2] || (_cache[2] = _withModifiers(($event: any) => (props.clickable ? emit('clickShift') : undefined), [\"shift\"])),\n _cache[3] || (_cache[3] = _withModifiers(($event: any) => (props.clickable ? emit('clickMeta') : undefined), [\"meta\"]))\n ]\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card_section, {\n horizontal: Boolean(props.hasImg || _ctx.$slots.graphics)\n }, {\n default: _withCtx(() => [\n (props.hasImg)\n ? (_openBlock(), _createBlock(_component_q_img, {\n key: 0,\n src: props.imgSrc,\n onLoad: clearMemory,\n style: _normalizeStyle(imgStyles.value),\n \"placeholder-src\": placeholder.value,\n fit: props.imgFit\n }, null, 8, [\"src\", \"style\", \"placeholder-src\", \"fit\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.graphics)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"sfx-card__graphics\",\n style: _normalizeStyle(imgStyles.value)\n }, [\n _renderSlot(_ctx.$slots, \"graphics\")\n ], 4))\n : _createCommentVNode(\"\", true),\n (Boolean(props.hasImg || _ctx.$slots.graphics))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders\"\n }),\n _createVNode(_component_q_card_section, {\n class: \"full-height full-width\",\n style: {\"min-width\":\"0\"}\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n })\n ], 64))\n : _renderSlot(_ctx.$slots, \"default\", { key: 3 })\n ]),\n _: 3\n }, 8, [\"horizontal\"]),\n (props.iconRow?.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(SfxIconRow, {\n icons: props.iconRow\n }, null, 8, [\"icons\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"bordered\", \"class\", \"style\"])), [\n [_directive_ripple]\n ])\n}\n}\n\n})","import script from \"./SfxCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCard.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QSeparator from 'quasar/src/components/separator/QSeparator.js';import Ripple from 'quasar/src/directives/ripple/Ripple.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCard,QCardSection,QImg,QSeparator});qInstall(script, 'directives', {Ripple});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-caption text-fun-label-and-icon\" }\nconst _hoisted_2 = { class: \"text-subtitle1\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-body2 ellipsis\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"text-h6\"\n}\nconst _hoisted_5 = { class: \"text-field-label\" }\nconst _hoisted_6 = { class: \"text-info\" }\n\nimport { date } from \"quasar\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport { DATE_TIME_FULL_MASK, SFX_CARD_ATTACHMENT_HEIGHT } from \"src/util/constants/configurations\"\nimport { Attachment } from \"src/util/types/dataModels/attachment\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardAttachment',\n props: {\n attachment: {\n type: Object as PropType,\n required: true,\n },\n\n // Translated entity\n entity: {\n type: String,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst placeholderImg = computed(() => getPlaceholderImg())\n\nconst createdDate = computed(() =>\n date.formatDate(props.attachment?.created_dt, DATE_TIME_FULL_MASK)\n)\n\n//endregion\n\n//region Functions\n\nfunction getPlaceholderImg() {\n switch (props.attachment?.extension) {\n case \"pdf\": {\n return \"img/file-types/pdf.svg\"\n }\n case \"csv\": {\n return \"img/file-types/csv.svg\"\n }\n case \"xlsx\": {\n return \"img/file-types/xlsx.svg\"\n }\n case \"docx\": {\n return \"img/file-types/docx.svg\"\n }\n case \"txt\": {\n return \"img/file-types/txt.svg\"\n }\n case \"jpg\": {\n return \"img/file-types/jpg.svg\"\n }\n case \"jpeg\": {\n return \"img/file-types/jpeg.svg\"\n }\n case \"png\": {\n return \"img/file-types/png.svg\"\n }\n case \"dwg\": {\n return \"img/file-types/dwg.svg\"\n }\n case \"tsv\": {\n return \"img/file-types/tsv.svg\"\n }\n default: {\n return \"img/file-types/default.svg\"\n }\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n \"has-img\": \"\",\n clickable: \"\",\n class: \"q-mb-md\",\n \"img-src\": placeholderImg.value,\n height: _unref(SFX_CARD_ATTACHMENT_HEIGHT)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(createdDate.value), 1),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_truncate_middle, props.attachment?.name]\n ]),\n (props.attachment.description)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(props.attachment.description), 1))\n : _createCommentVNode(\"\", true),\n (props.entity)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\"sfxCard.relation\")), 1),\n _createVNode(_component_q_space),\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(props.entity), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"img-src\", \"height\"]))\n}\n}\n\n})","import script from \"./SfxCardAttachment.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardAttachment.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, mergeProps as _mergeProps, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardCondensed',\n props: {\n done: {\n type: Boolean,\n },\n\n problem: {\n type: Boolean,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst classes = computed(() => {\n let cssClass = \"\"\n\n if (props.done) {\n cssClass = \"sfx-card-condensed__done\"\n } else if (props.problem) {\n cssClass = \"sfx-card-condensed__problem\"\n }\n\n return cssClass\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxCard, _mergeProps({ clickable: \"\" }, _ctx.$attrs, {\n class: [\"q-my-sm sfx-card-condensed\", classes.value],\n height: _unref(SFX_CARD_CONDENSED_HEIGHT)\n }), {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 16, [\"class\", \"height\"]))\n}\n}\n\n})","import script from \"./SfxCardCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderSlot as _renderSlot, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\n\nimport { date } from \"quasar\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardEventBase',\n props: {\n title: {\n type: String,\n required: true,\n },\n\n createdDate: {\n type: String,\n required: true,\n },\n\n manager: {\n type: Boolean,\n default: false,\n },\n\n titleClass: {\n type: String,\n },\n\n clickable: {\n type: Boolean,\n default: false,\n },\n\n noContent: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"click\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\n// `createdDateTime` can be either created date of Issue, CorrectiveWork, WorkOrder etc. Or it can be\n// the created date of the EventCard. Meaning the date time of the action which resulted in the relevant EventCard\nconst createdDateTime = computed(() => date.formatDate(props.createdDate, DATE_TIME_FULL_MASK))\nconst titleClass = computed(() => [props.manager ? \"text-h4\" : \"text-h6\", props.titleClass ?? \"\"])\nconst createdDateClass = computed(() => (props.manager ? \"text-subtitle1\" : \"text-subtitle2\"))\nconst contentClass = computed(() =>\n props.manager && !props.noContent ? \"q-gutter-y-sm q-mt-sm\" : \"\"\n)\n\n//endregion\n\n//region Functions\n\nfunction handleClick() {\n emit(\"click\")\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: \"sfx-card-issue-status\",\n clickable: props.clickable,\n onClick: handleClick\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", {\n class: _normalizeClass(titleClass.value)\n }, _toDisplayString(__props.title), 3),\n _createVNode(_component_q_space),\n _createElementVNode(\"span\", {\n class: _normalizeClass(createdDateClass.value)\n }, _toDisplayString(createdDateTime.value), 3)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass(contentClass.value)\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n _: 3\n }, 8, [\"clickable\"]))\n}\n}\n\n})","import script from \"./SfxCardEventBase.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardEventBase.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_3 = { class: \"sfx-card__top-right-label\" }\nconst _hoisted_4 = { class: \"text-h4\" }\n\nimport SfxCardCondensed from \"src/components/card/SfxCardCondensed.vue\"\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { getAttachmentContent, getFirstImageAttachment } from \"src/util/functions/attachments\"\nimport {\n getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue,\n getIssueCardIcons,\n getIssueCardTime,\n} from \"src/util/functions/issues\"\nimport { getWorkOrderCorrectiveItemData } from \"src/util/functions/workOrder\"\nimport { getWorkOrderPriorityData } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { IssueCardData } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardIssueCondensed',\n props: {\n issue: {\n type: Object as PropType,\n required: true,\n },\n\n highlight: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\n\nconst timeSinceRaised = computed(() => getIssueCardTime(props.issue))\nconst storeIssue = ref()\n\nconst overdue = computed(() => (props.issue.overdueTime || 0) > 0)\nconst timeLabel = computed(() =>\n overdue.value ? t(\"sfxCard.issue_label_deadline\") : t(\"sfxCard.issue_label_raised\")\n)\nconst chipOverdueLabel = t(\"time.generic_overdue\")\nconst workDone = computed(() => props.issue.correctiveWork?.conclusion === \"accepted\")\nconst icons = ref>([])\n\nconst workDomainDesignation = computed(() => workDomainRaw.value?.designation)\nconst issueThumbnail = ref()\n\nconst issueThumbnailRaw = ref(props.issue.thumbnail)\nconst itemRaw = ref(props.issue.actionableItem)\nconst workDomainRaw = ref(props.issue.workDomainData)\n\nconst correctiveWorkOnItemForIssue = ref()\n\nconst classes = computed(() => {\n return {\n \"sfx-card-issue__overdue\": overdue.value,\n \"sfx-card-highlight\": props.highlight,\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function assignData(issue: IssueCardData) {\n resetData()\n\n storeIssue.value = cacheStore.issueCard.get(issue.issueData.id)\n\n correctiveWorkOnItemForIssue.value = await getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(\n issue.issueData.id\n )\n\n assignItem(issue)\n assignWorkDomain(issue)\n await assignThumbnailAttachment(issue)\n icons.value = await getIcons(issue)\n}\n\nfunction resetData() {\n issueThumbnailRaw.value = undefined\n itemRaw.value = undefined\n workDomainRaw.value = undefined\n}\n\nfunction assignItem(issue: IssueCardData) {\n // We already have the data so skip it\n if (itemRaw.value) return\n\n const item = cacheStore.item.get(issue.issueData.actionable_item)\n\n itemRaw.value = item\n\n if (storeIssue.value) storeIssue.value.actionableItem = item\n}\n\nfunction assignWorkDomain(issue: IssueCardData) {\n // We already have the data so skip it\n if (workDomainRaw.value) return\n\n const workDomain = cacheStore.work_domain_workspace.get(issue.issueData.work_domain)\n\n workDomainRaw.value = workDomain\n\n if (storeIssue.value) storeIssue.value.workDomainData = workDomain\n}\n\nasync function assignThumbnailAttachment(issue: IssueCardData) {\n // We already have the data so skip it\n if (issueThumbnailRaw.value !== undefined) return\n\n if (issue.issueData.attachments.length > 0) {\n const thumbnail = await getFirstImageAttachment(issue.issueData.attachments)\n\n if (thumbnail) {\n issueThumbnailRaw.value = thumbnail\n\n if (storeIssue.value) storeIssue.value.thumbnail = thumbnail\n }\n }\n}\n\nasync function getIcons(issue: IssueCardData) {\n const issuePriority = issue.priorityData\n const correctiveWork = correctiveWorkOnItemForIssue.value\n let workOrder\n if (issue.issueData.corrective_work_order) {\n workOrder = await getWorkOrderCorrectiveItemData(issue.issueData.corrective_work_order)\n }\n let workOrderPriority\n if (workOrder) {\n workOrderPriority = await getWorkOrderPriorityData(workOrder?.priority)\n }\n return getIssueCardIcons(issuePriority, workOrderPriority, correctiveWork)\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => issueThumbnailRaw.value,\n async (thumbnail) => {\n issueThumbnail.value = thumbnail\n ? await getAttachmentContent(thumbnail, \"issue_item\", props.issue?.issueData.id)\n : undefined\n },\n { immediate: true }\n)\n\nwatch(\n () => props.issue,\n async (newIssue) => {\n await assignData(newIssue)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCardCondensed, {\n class: _normalizeClass(classes.value),\n \"img-src\": issueThumbnail.value,\n \"icon-row\": icons.value,\n done: workDone.value,\n hasImg: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(workDomainDesignation.value), 1),\n (overdue.value)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_space),\n _createElementVNode(\"span\", _hoisted_3, [\n _createVNode(SfxChip, {\n label: _unref(chipOverdueLabel),\n \"icon-right\": \"warning\",\n color: \"negative\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_4, null, 512), [\n [_directive_truncate_middle, props.issue?.issueData.title]\n ]),\n _createVNode(SfxDataPoint, {\n label: timeLabel.value,\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(timeSinceRaised.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }, 8, [\"class\", \"img-src\", \"icon-row\", \"done\"]))\n}\n}\n\n})","import script from \"./SfxCardIssueCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardIssueCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_2 = { class: \"text-h4\" }\n\nimport { DeepReadonlyObject } from \"rxdb\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { ItemModel } from \"src/util/types/dataModels/itemModel\"\nimport { PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardModel',\n props: {\n itemModel: {\n type: Object as PropType>,\n required: true,\n },\n\n itemClassDesignation: {\n type: String,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n clickable: \"\",\n class: \"q-my-md\",\n \"img-src\": 'https://picsum.photos/1920/1080',\n hasImg: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(props.itemClassDesignation), 1),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_truncate_middle, props.itemModel?.designation]\n ]),\n _createVNode(SfxDataPoint, {\n \"card-field\": \"\",\n label: _ctx.$t('sfxCard.model_code')\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.itemModel.model_code), 1)\n ]),\n _: 1\n }, 8, [\"label\"]),\n _createVNode(SfxDataPoint, {\n \"card-field\": \"\",\n label: _ctx.$t('sfxCard.model_manufacturer')\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.itemModel.manufacturer), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxCardModel.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardModel.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row justify-between\" }\nconst _hoisted_2 = { class: \"row items-center\" }\nconst _hoisted_3 = { class: \"text-subtitle2 text-blue-grey-7\" }\nconst _hoisted_4 = { class: \"text-subtitle2 text-blue-grey-7\" }\nconst _hoisted_5 = { class: \"text-h4 text-info q-mb-sm\" }\nconst _hoisted_6 = { class: \"row text-h6\" }\nconst _hoisted_7 = { class: \"text-weight-regular text-blue-grey-7\" }\nconst _hoisted_8 = { class: \"text-weight-bold\" }\n\nimport { date } from \"quasar\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport { LABELS } from \"src/env/labels\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { SystemNotificationCardData } from \"src/util/types/notifications\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardNotificationSystem',\n props: {\n data: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst timeSinceReceived = computed(() => {\n let date = props.data.timeSinceReceived\n if (typeof date !== \"string\") {\n date = date.toJSON()\n }\n return getTemporalInfo(date, \"card\")\n})\n\nconst startTime = computed(() => date.formatDate(props.data.startTime, DATE_TIME_FULL_MASK))\n\nconst expectedDuration = computed(() =>\n date.getDateDiff(props.data.endTime, props.data.startTime, \"minutes\")\n)\n\nconst iconRow: IconRowElement[] = [\n {\n name: Icons.NOTIFICATION_FROM_SUPPORT,\n color: \"warning\",\n },\n]\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_img = _resolveComponent(\"q-img\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: \"bg-orange-1 q-mb-sm sfx-card-notification\",\n active: \"\",\n \"icon-row\": iconRow,\n clickable: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_q_img, {\n class: \"sfx-system-avatar q-mr-sm\",\n src: \"img/system_notification_avatar.svg\",\n alt: _ctx.$t('sfxUserDisplay.profile_picture')\n }, null, 8, [\"alt\"]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxCard.support\", { support: _unref(LABELS).SUPPORT })), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(timeSinceReceived.value), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.$t(\"sfxCard.maintenance_scheduled\")), 1),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(expectedDuration.value + \" \" + _ctx.$t(\"notifications.time_period\")) + \"  \", 1),\n _createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t(\"notifications.event_start\") + \" \" + startTime.value), 1)\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxCardNotificationSystem.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardNotificationSystem.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QImg});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"row justify-between\" }\nconst _hoisted_2 = { class: \"text-subtitle2 text-blue-grey-7\" }\nconst _hoisted_3 = { class: \"row justify-between items-center q-mt-xs q-mb-sm\" }\nconst _hoisted_4 = { class: \"text-h4 text-info\" }\nconst _hoisted_5 = { class: \"row text-h6\" }\nconst _hoisted_6 = { class: \"text-weight-regular text-blue-grey-7\" }\nconst _hoisted_7 = { class: \"text-weight-bold\" }\n\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxUserData from \"src/components/special/SfxUserData.vue\"\nimport { useUserStore } from \"src/stores/userStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getPriorityColor, translateEventName } from \"src/util/functions/notifications\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { getUserWithAvatarData } from \"src/util/functions/user\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { UserWithAvatar } from \"src/util/types/dataModels/user\"\nimport { UserNotificationCardData } from \"src/util/types/notifications\"\nimport { computed, onBeforeMount, PropType, ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardNotificationUser',\n props: {\n data: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst userStore = useUserStore()\nconst userData = ref()\nconst userClasses = [\"text-subtitle2\", \"text-blue-grey-7\"]\n\nconst iconRowElements = computed(() => {\n const icons = []\n\n const itemOrAreaIcon = {\n name: props.data.hasItem ? Icons.ITEM : Icons.AREAS,\n color: \"blue-grey-6\",\n }\n\n icons.push(itemOrAreaIcon)\n\n if (props.data.hasIssue) {\n icons.push({\n name: Icons.ISSUE,\n color: getPriorityColor(props.data.priority || 0),\n })\n } else if (props.data.hasWorkOrder) {\n icons.push({\n name: Icons.WORK_ORDERS,\n color: getPriorityColor(props.data.priority || 0),\n })\n }\n\n return icons\n})\n\nconst timeSinceReceived = computed(() => {\n let date = props.data.timeSinceReceived\n if (date instanceof Date) {\n date = date.toJSON()\n }\n return getTemporalInfo(date, \"card\")\n})\n\nconst eventName = translateEventName(props.data.eventName)\n\n// TODO: Make a check if the object (work order/issue) exists when we have the data, then change the value accordingly\n// TODO: If it doesn't exist a dialog should state that.\nconst referenceExists = ref(true)\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n // TODO: Needs to be changed with getUserAvatar(id: ...) when we have the data\n userData.value = await getUserWithAvatarData(userStore.id)\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: \"q-mb-sm sfx-card-notification\",\n active: \"\",\n \"icon-row\": iconRowElements.value,\n clickable: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(SfxUserData, {\n \"user-data\": userData.value,\n \"user-name-classes\": userClasses\n }, null, 8, [\"user-data\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(timeSinceReceived.value), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_unref(eventName)), 1),\n (referenceExists.value)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n name: _unref(Icons).INTERNAL_LINK,\n size: \"xs\",\n class: \"no-padding\"\n }, null, 8, [\"name\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(props.data.relationId) + \" \", 1),\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(props.data.relationRepresentation), 1)\n ])\n ]),\n _: 1\n }, 8, [\"icon-row\"]))\n}\n}\n\n})","import script from \"./SfxCardNotificationUser.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardNotificationUser.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-subtitle2 text-fun-label-and-icon row\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"text-h4\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"text-h4 text-italic\"\n}\nconst _hoisted_4 = { class: \"text-caption text-field-label ellipsis capitalize\" }\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = { key: 1 }\nconst _hoisted_7 = { class: \"text-body2 ellipsis\" }\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = { key: 1 }\n\nimport { date } from \"quasar\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { IdentifierType } from \"src/util/types/dataModels/identifier\"\nimport {\n UnsubmittedWorkEntity,\n UnsubmittedWorkType,\n} from \"src/util/types/dataModels/unsubmittedWork\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardObject',\n props: {\n active: {\n type: Boolean,\n default: false,\n },\n\n objectType: {\n type: String as PropType,\n required: true,\n },\n\n title: {\n type: String,\n },\n\n titlePlaceholder: {\n type: String,\n },\n\n user: {\n type: String,\n },\n\n entityType: {\n type: String as PropType,\n },\n\n entityData: {\n type: String,\n },\n\n dateTime: {\n type: String,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst objectType = computed(() => {\n switch (props.objectType) {\n case \"adhocCorrective\": {\n return t(\"sfxCard.ad_hoc_corrective\")\n }\n case \"adhocRegular\": {\n return t(\"sfxCard.ad_hoc_regular\")\n }\n case \"plannedCorrective\": {\n return t(\"sfxCard.planned_corrective\")\n }\n case \"plannedRegular\": {\n return t(\"sfxCard.planned_regular\")\n }\n case \"qr\": {\n return t(\"sfxCard.qr\")\n }\n case \"rfid\": {\n return t(\"sfxCard.rfid\")\n }\n default: {\n return t(\"sfxCard.barcode\")\n }\n }\n})\n\nconst formattedDate = computed(() => date.formatDate(props.dateTime, DATE_TIME_FULL_MASK))\nconst user = computed(() => props.user || t(\"sfxCard.unknown_user\"))\nconst userType = computed(() => (!props.entityType && !props.entityData) || props.user)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: \"q-my-md\",\n active: props.active,\n clickable: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", null, _toDisplayString(objectType.value), 1),\n _createVNode(_component_q_space),\n _createElementVNode(\"span\", null, _toDisplayString(formattedDate.value), 1)\n ]),\n (props.title)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, null, 512)), [\n [_directive_truncate_middle, props.title]\n ])\n : (props.titlePlaceholder)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(props.titlePlaceholder), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n (userType.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\"sfxCard.by\")), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(props.entityType), 1))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n (userType.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString(user.value), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(props.entityData), 1))\n ])\n ]),\n _: 1\n }, 8, [\"active\"]))\n}\n}\n\n})","import script from \"./SfxCardObject.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardObject.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"ellipsis text-subtitle2\" }\nconst _hoisted_3 = { class: \"sfx-card__top-right-label\" }\nconst _hoisted_4 = { class: \"text-h4\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = { class: \"col\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"sfx-card__icon-row-margin self-end q-mt-lg\"\n}\n\nimport { date } from \"quasar\"\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport SfxIconRow from \"src/components/special/SfxIconRow.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { getProgressIndicatorStateLabel } from \"src/util/functions/workOrder\"\nimport { getWorkOrderPriorityColor } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxDataPoint from \"../data-point/SfxDataPoint.vue\"\nimport SfxProgressIndicator from \"../special/SfxProgressIndicator.vue\"\nimport SfxCard from \"./SfxCard.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardWorkOrder',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\nconst storeWorkOrder = ref()\n\nconst workDomainRaw = ref(props.workOrder?.workDomainData)\nconst workOrderIconsStaticRaw = ref(props.workOrder?.icons)\nconst workOrderIconsDynamicRaw = ref([])\n\nconst workDomainDesignation = computed(() => workDomainRaw.value?.designation)\nconst deadline = computed(() =>\n props.workOrder?.workOrderData.deadline_dt !== null\n ? getTemporalInfo(props.workOrder?.workOrderData.deadline_dt, \"deadline\")\n : undefined\n)\nconst referenceLabel = t(\"sfxCard.reference\")\nconst deadLineLabel = t(\"sfxCard.deadline\")\n\nconst chipOverdueLabel = t(\"time.generic_overdue\")\nconst chipBehindLabel = t(\"time.generic_behind\")\n\nconst workOrderIcons = computed(() => {\n const row: IconRowElement[] = workOrderIconsDynamicRaw.value || []\n return row.concat(workOrderIconsStaticRaw.value || [])\n})\n\nconst cardClasses = computed(() => {\n const classes = []\n\n if (isOverdue.value) {\n classes.push(\"sfx-card-work-order__overdue\")\n } else if (isBehind.value) {\n classes.push(\"sfx-card-work-order__behind\")\n }\n\n return classes\n})\n\n// We already have the item list in regular work, but we need to manually fetch the data for corrective\n// This is why the total # is gotten from different places.\nconst totalCount = computed(() =>\n props.workOrder?.isCorrectiveWork\n ? props.workOrder.issuesData.length\n : props.workOrder.workOrderData.items.length\n)\n\n// The passed work list has already been filtered for rejected work\nconst workDone = computed(() => props.workOrder?.performedWorkData.length)\n\nconst state = computed(() =>\n getProgressIndicatorStateLabel(workDone.value, totalCount.value, props.workOrder?.workOrderData)\n)\n\nconst isOverdue = ref(false)\nconst isBehind = ref(false)\nconst timeWarningLabel = computed(() => isOverdue.value || isBehind.value)\n\nconst isClosed = computed(() => state.value === \"closed\" || state.value === \"complete_closed\")\n\n//endregion\n\n//region Functions\n\nfunction assignData(workOrder: WorkOrderCardData) {\n resetData()\n\n storeWorkOrder.value = cacheStore.workOrderCard.get(workOrder.workOrderData.id)\n\n assignWorkDomain(workOrder)\n assignWorkOrderIconsStatic(workOrder)\n assignWorkOrderIconsDynamic(workOrder)\n assignTimeWarning(workOrder)\n}\n\nfunction resetData() {\n workOrderIconsStaticRaw.value = undefined\n workOrderIconsDynamicRaw.value = []\n workDomainRaw.value = undefined\n isOverdue.value = false\n isBehind.value = false\n}\n\nfunction assignWorkDomain(workOrder: WorkOrderCardData) {\n // We already have the data so skip it\n if (workDomainRaw.value) return\n\n const workDomain = cacheStore.work_domain_workspace.get(workOrder.workOrderData.work_domain)\n\n workDomainRaw.value = workDomain\n\n if (storeWorkOrder.value) storeWorkOrder.value.workDomainData = workDomain\n}\n\nasync function assignWorkOrderIconsStatic(workOrder: WorkOrderCardData) {\n if (workOrderIconsStaticRaw.value !== undefined) return\n\n const iconRow: IconRowElement[] = [\n {\n name: workOrder.isCorrectiveWork ? Icons.WORK_CORRECTIVE : Icons.WORK_REGULAR,\n color: \"fun-label-and-icon\",\n },\n {\n name: workOrder.isItem ? Icons.ITEM : Icons.AREAS,\n color: \"fun-label-and-icon\",\n },\n ]\n\n workOrderIconsStaticRaw.value = iconRow\n\n if (storeWorkOrder.value) storeWorkOrder.value.icons = iconRow\n}\n\nfunction assignWorkOrderIconsDynamic(workOrder: WorkOrderCardData) {\n const iconRow: IconRowElement[] = []\n\n if (state.value === \"complete\" || state.value === \"complete_closed\") {\n iconRow.push({ name: Icons.ACCEPT, color: \"positive\" })\n } else {\n iconRow.push({\n name: Icons.WORK_ORDERS,\n color: getWorkOrderPriorityColor(workOrder.priorityData),\n })\n }\n\n workOrderIconsDynamicRaw.value = iconRow\n}\n\nfunction assignTimeWarning(workOrder: WorkOrderCardData) {\n const deadline = workOrder.workOrderData.deadline_dt\n if (\n deadline === null ||\n state.value === \"complete\" ||\n state.value === \"closed\" ||\n state.value === \"complete_closed\"\n )\n return\n\n if (Date.now() >= new Date(deadline).getTime()) {\n isOverdue.value = true\n } else {\n const workPerDay =\n totalCount.value / date.getDateDiff(deadline, workOrder.workOrderData.start_dt, \"days\")\n const daysWorked = date.getDateDiff(workOrder.workOrderData.start_dt, Date.now(), \"days\")\n\n const expectedWorkDone = Math.floor(workPerDay * daysWorked)\n\n if (expectedWorkDone < workDone.value) {\n isBehind.value = true\n }\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.workOrder,\n async (newWorkOrder) => {\n assignData(newWorkOrder)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n clickable: \"\",\n closed: isClosed.value,\n class: _normalizeClass([\"sfx-card-work-order\", cardClasses.value])\n }, {\n graphics: _withCtx(() => [\n _createVNode(SfxProgressIndicator, {\n current: workDone.value,\n total: totalCount.value,\n state: state.value,\n mode: \"technician\",\n class: \"q-px-sm\"\n }, null, 8, [\"current\", \"total\", \"state\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(workDomainDesignation.value), 1),\n (timeWarningLabel.value)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_space),\n _createElementVNode(\"span\", _hoisted_3, [\n (isOverdue.value)\n ? (_openBlock(), _createBlock(SfxChip, {\n key: 0,\n label: _unref(chipOverdueLabel),\n \"icon-right\": \"warning\",\n color: \"negative\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"]))\n : (isBehind.value)\n ? (_openBlock(), _createBlock(SfxChip, {\n key: 1,\n label: _unref(chipBehindLabel),\n \"icon-right\": \"turtle\",\n color: \"warning\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_4, null, 512), [\n [_directive_truncate_middle, props.workOrder?.workOrderData?.designation]\n ]),\n _createVNode(SfxDataPoint, {\n label: _unref(referenceLabel),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.workOrder?.workOrderData.reference), 1)\n ]),\n _: 1\n }, 8, [\"label\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n (deadline.value)\n ? (_openBlock(), _createBlock(SfxDataPoint, {\n key: 0,\n label: _unref(deadLineLabel),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(deadline.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (workOrderIcons.value?.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(SfxIconRow, { icons: workOrderIcons.value }, null, 8, [\"icons\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"closed\", \"class\"]))\n}\n}\n\n})","import script from \"./SfxCardWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardWorkOrder.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"ellipsis text-subtitle2\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"sfx-card__top-right-label\"\n}\nconst _hoisted_4 = { class: \"text-h4\" }\nconst _hoisted_5 = { class: \"row\" }\nconst _hoisted_6 = { class: \"col\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"sfx-card__icon-row-margin self-end q-mt-lg\"\n}\n\nimport { date } from \"quasar\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport SfxIconRow from \"src/components/special/SfxIconRow.vue\"\nimport SfxProgressIndicator from \"src/components/special/SfxProgressIndicator.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getTemporalInfo } from \"src/util/functions/time\"\nimport { getProgressIndicatorStateLabel } from \"src/util/functions/workOrder\"\nimport { getWorkOrderPriorityColor } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardWorkOrderCondensed',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n\n closable: {\n type: Boolean,\n default: () => false,\n },\n\n clickable: {\n type: Boolean,\n default: () => true,\n },\n},\n emits: [\"clickClose\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\n\nconst deadLineLabel = t(\"sfxCard.deadline\")\nconst chipOverdueLabel = t(\"time.generic_overdue\")\nconst chipBehindLabel = t(\"time.generic_behind\")\n\nconst storeWorkOrder = ref()\nconst workDomainRaw = ref(props.workOrder?.workDomainData)\nconst workOrderIcons = ref(props.workOrder?.icons)\n\nconst workDomainDesignation = computed(() => workDomainRaw.value?.designation)\n\nconst deadline = computed(() =>\n props.workOrder?.workOrderData.deadline_dt !== null\n ? getTemporalInfo(props.workOrder?.workOrderData.deadline_dt, \"deadline\")\n : undefined\n)\n\nconst cardClasses = computed(() => {\n const classes = []\n\n if (isOverdue.value) {\n classes.push(\"sfx-card-work-order__overdue\")\n } else if (isBehind.value) {\n classes.push(\"sfx-card-work-order__behind\")\n }\n\n return classes\n})\n\n// We already have the item list in regular work, but we need to manually fetch the data for corrective\n// This is why the total # is gotten from different places.\nconst totalCount = computed(() =>\n props.workOrder?.isCorrectiveWork\n ? props.workOrder.issuesData.length\n : props.workOrder.workOrderData.items.length\n)\n\n// The passed work list has already been filtered for rejected work\nconst workDone = computed(() => props.workOrder?.performedWorkData.length)\n\nconst state = computed(() =>\n getProgressIndicatorStateLabel(workDone.value, totalCount.value, props.workOrder?.workOrderData)\n)\n\nconst isOverdue = ref(false)\nconst isBehind = ref(false)\nconst timeWarningLabel = computed(() => isOverdue.value || isBehind.value)\n\nconst isClosed = computed(() => state.value === \"closed\" || state.value === \"complete_closed\")\n\n//endregion\n\n//region Functions\n\nfunction assignData(workOrder: WorkOrderCardData) {\n resetData()\n\n storeWorkOrder.value = cacheStore.workOrderCard.get(workOrder.workOrderData.id)\n\n assignWorkDomain(workOrder)\n assignWorkOrderIcons(workOrder)\n assignTimeWarning(workOrder)\n}\n\nfunction resetData() {\n workOrderIcons.value = undefined\n workDomainRaw.value = undefined\n isOverdue.value = false\n isBehind.value = false\n}\n\nfunction assignWorkDomain(workOrder: WorkOrderCardData) {\n // We already have the data so skip it\n if (workDomainRaw.value) return\n\n const workDomain = cacheStore.work_domain_workspace.get(workOrder.workOrderData.work_domain)\n\n workDomainRaw.value = workDomain\n\n if (storeWorkOrder.value) storeWorkOrder.value.workDomainData = workDomain\n}\n\nasync function assignWorkOrderIcons(workOrder: WorkOrderCardData) {\n if (workOrderIcons.value !== undefined) return\n\n const iconRow: IconRowElement[] = []\n\n if (state.value === \"complete\" || state.value === \"complete_closed\") {\n iconRow.push({ name: Icons.ACCEPT, color: \"positive\" })\n } else {\n //work order priority icon, use key for hex color to be dynamic\n iconRow.push({\n name: Icons.WORK_ORDERS,\n color: getWorkOrderPriorityColor(workOrder.priorityData),\n })\n }\n\n iconRow.push({\n name: workOrder.isCorrectiveWork ? Icons.WORK_CORRECTIVE : Icons.WORK_REGULAR,\n color: \"fun-label-and-icon\",\n })\n\n // We don't add the entity icon for item or area, since the condensed cards are only going to be used\n // in either of those screens and the relation would be obvious\n\n workOrderIcons.value = iconRow\n\n if (storeWorkOrder.value) storeWorkOrder.value.icons = iconRow\n}\n\nfunction assignTimeWarning(workOrder: WorkOrderCardData) {\n const deadline = workOrder.workOrderData.deadline_dt\n if (\n deadline === null ||\n state.value === \"complete\" ||\n state.value === \"closed\" ||\n state.value === \"complete_closed\"\n )\n return\n\n if (Date.now() >= new Date(deadline).getTime()) {\n isOverdue.value = true\n } else {\n const workPerDay =\n totalCount.value / date.getDateDiff(deadline, workOrder.workOrderData.start_dt, \"days\")\n const daysWorked = date.getDateDiff(workOrder.workOrderData.start_dt, Date.now(), \"days\")\n\n const expectedWorkDone = Math.floor(workPerDay * daysWorked)\n\n if (expectedWorkDone < workDone.value) {\n isBehind.value = true\n }\n }\n}\n\nfunction handleClose() {\n emit(\"clickClose\")\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.workOrder,\n async (newWorkOrder) => {\n assignData(newWorkOrder)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: _normalizeClass([\"sfx-card-work-order q-my-md\", cardClasses.value]),\n closed: isClosed.value,\n clickable: props.clickable,\n height: _unref(SFX_CARD_CONDENSED_HEIGHT)\n }, {\n graphics: _withCtx(() => [\n _createVNode(SfxProgressIndicator, {\n current: workDone.value,\n total: totalCount.value,\n state: state.value,\n mode: \"condensed\"\n }, null, 8, [\"current\", \"total\", \"state\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(workDomainDesignation.value), 1),\n _createVNode(_component_q_space),\n (timeWarningLabel.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n (isOverdue.value)\n ? (_openBlock(), _createBlock(SfxChip, {\n key: 0,\n label: _unref(chipOverdueLabel),\n \"icon-right\": \"warning\",\n color: \"negative\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"]))\n : (isBehind.value)\n ? (_openBlock(), _createBlock(SfxChip, {\n key: 1,\n label: _unref(chipBehindLabel),\n \"icon-right\": \"turtle\",\n color: \"warning\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (props.closable)\n ? (_openBlock(), _createBlock(SfxBtnIcon, {\n key: 1,\n icon: _unref(Icons).CLOSE,\n onClick: _withModifiers(handleClose, [\"exact\",\"stop\"]),\n padding: \"none\",\n class: \"sfx-card__top-right-close-button\"\n }, null, 8, [\"icon\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_4, null, 512), [\n [_directive_truncate_middle, props.workOrder?.workOrderData?.designation]\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n (deadline.value)\n ? (_openBlock(), _createBlock(SfxDataPoint, {\n key: 0,\n label: _unref(deadLineLabel),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(deadline.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (workOrderIcons.value?.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(SfxIconRow, { icons: workOrderIcons.value }, null, 8, [\"icons\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"class\", \"closed\", \"clickable\", \"height\"]))\n}\n}\n\n})","import script from \"./SfxCardWorkOrderCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardWorkOrderCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_2 = { class: \"text-h4\" }\nconst _hoisted_3 = { class: \"row\" }\nconst _hoisted_4 = { class: \"col\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"sfx-card__icon-row-margin self-end q-mt-lg\"\n}\n\nimport { date } from \"quasar\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport SfxIconRow from \"src/components/special/SfxIconRow.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { CORRECTIVE_WORK_IMG, REGULAR_WORK_IMG } from \"src/util/constants/files\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getWorkOrderPriorityColor } from \"src/util/functions/workOrderPriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { WorkOrderCardData } from \"src/util/types/dataModels/workOrder\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardWorkOrderForEntity',\n props: {\n workOrder: {\n type: Object as PropType,\n required: true,\n },\n\n workPerformed: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst cacheStore = useCacheStore()\n\nconst storeWork = ref()\nconst workTypeThumbnail = ref()\nconst workDomainRaw = ref(props.workOrder?.workDomainData)\nconst workIconsRaw = ref(props.workOrder?.icons)\n\nconst workDomain = computed(() => workDomainRaw.value?.designation)\n\nconst workStatementTitle = computed(() => props.workOrder?.workOrderData.designation)\n\nconst deadline = computed(() =>\n props.workOrder?.workOrderData.deadline_dt\n ? date.formatDate(props.workOrder.workOrderData.deadline_dt, DATE_TIME_FULL_MASK)\n : t(\"time.not_applicable\")\n)\n\nconst workDescription = computed(() => props.workOrder?.workOrderData.instructions)\n\nconst workIcons = computed(() => workIconsRaw.value || [])\n\nconst classes = computed(() => {\n return { \"sfx-card-work-order-for-entity\": props.workPerformed }\n})\n\n//endregion\n\n//region Functions\n\nfunction assignData(workOrder: WorkOrderCardData) {\n resetData()\n\n storeWork.value = cacheStore.workOrderCard.get(workOrder.workOrderData.id)\n\n assignThumbnailIcon(workOrder.isCorrectiveWork)\n assignWorkDomain(workOrder.workOrderData.work_domain)\n assignIcons(workOrder)\n}\n\nfunction resetData() {\n workTypeThumbnail.value = undefined\n workDomainRaw.value = undefined\n workIconsRaw.value = undefined\n}\n\nasync function assignThumbnailIcon(isCorrectiveWork: boolean) {\n workTypeThumbnail.value = isCorrectiveWork ? CORRECTIVE_WORK_IMG : REGULAR_WORK_IMG\n}\n\nfunction assignWorkDomain(workDomainId: string) {\n // We already have the data so skip it\n if (workDomainRaw.value) return\n\n const workDomainData = cacheStore.work_domain_workspace.get(workDomainId)\n\n workDomainRaw.value = workDomainData\n\n if (storeWork.value) storeWork.value.workDomainData = workDomainData\n}\n\nfunction assignIcons(workOrder: WorkOrderCardData) {\n if (workIconsRaw.value !== undefined) return\n\n const iconRow: IconRowElement[] = []\n iconRow.push(\n { name: Icons.WORK_ORDERS, color: getWorkOrderPriorityColor(workOrder.priorityData) },\n { name: Icons.ACCEPT, color: props.workPerformed ? \"positive\" : undefined }\n )\n\n workIconsRaw.value = iconRow\n\n if (storeWork.value) storeWork.value.icons = iconRow\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.workOrder,\n async (newWork) => {\n assignData(newWork)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, {\n class: _normalizeClass([\"q-mb-sm\", classes.value]),\n \"img-src\": workTypeThumbnail.value,\n \"img-fit\": 'none',\n clickable: \"\",\n hasImg: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(workDomain.value), 1),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_truncate_middle, workStatementTitle.value]\n ]),\n _createVNode(SfxDataPoint, {\n \"card-field\": \"\",\n label: _ctx.$t('sfxCard.deadline')\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(deadline.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(SfxDataPoint, {\n \"card-field\": \"\",\n label: _ctx.$t('sfxCard.work_description')\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(workDescription.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n (workIcons.value?.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(SfxIconRow, { icons: workIcons.value }, null, 8, [\"icons\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"class\", \"img-src\"]))\n}\n}\n\n})","import script from \"./SfxCardWorkOrderForEntity.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardWorkOrderForEntity.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, createBlock as _createBlock, Fragment as _Fragment, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, mergeProps as _mergeProps } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"sfx-card__top-right-label\"\n}\nconst _hoisted_4 = { class: \"text-h4\" }\n\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getAttachmentContent, getFirstImageAttachment } from \"src/util/functions/attachments\"\nimport { getIssuePriorityColor } from \"src/util/functions/issuePriority\"\nimport { getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue } from \"src/util/functions/issues\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { IssueCardData } from \"src/util/types/dataModels/issue\"\nimport { CorrectiveWorkOnItem } from \"src/util/types/dataModels/performedWork\"\nimport { computed, PropType, ref, watch } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardWorkOrderIssueCondensed',\n props: {\n issue: {\n type: Object as PropType,\n required: true,\n },\n\n // If the card has closable set to true, then it would have the X/Remove icon on the top right.\n closable: {\n type: Boolean,\n default: () => false,\n },\n\n // If performed is true, then add the green border and background, and all additional icons.\n performed: {\n type: Boolean,\n default: () => false,\n },\n},\n emits: [\"clickClose\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst cacheStore = useCacheStore()\n\nconst storeIssue = ref()\n\nconst overdue = computed(() => (props.issue.overdueTime || 0) > 0)\nconst workDone = computed(() => props.issue.correctiveWork?.conclusion === \"accepted\")\nconst itemDesignation = computed(() => itemRaw.value?.designation)\n\nconst iconRow = ref([])\nconst workDomainDesignation = computed(() => workDomainRaw.value?.designation)\nconst issueThumbnail = ref()\n\nconst issueThumbnailRaw = ref(props.issue.thumbnail)\nconst itemRaw = ref(props.issue.actionableItem)\nconst workDomainRaw = ref(props.issue.workDomainData)\n\nconst correctiveWorkOnItemForIssue = ref()\n\nconst cardClasses = computed(() => {\n return {\n \"sfx-card-issue__overdue\": !props.performed && overdue.value,\n \"sfx-card-work-order-entity-condensed__performed\": props.performed,\n \"sfx-card-work-order-entity-condensed__accepted\": props.performed && workDone.value,\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function assignData(issue: IssueCardData) {\n resetData()\n\n storeIssue.value = cacheStore.issueCard.get(issue.issueData.id)\n\n correctiveWorkOnItemForIssue.value = await getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue(\n issue.issueData.id\n )\n\n assignItem(issue)\n assignWorkDomain(issue)\n iconRow.value = await getIconRow(issue)\n await assignThumbnailAttachment(issue)\n}\n\nfunction resetData() {\n issueThumbnailRaw.value = undefined\n itemRaw.value = undefined\n workDomainRaw.value = undefined\n}\n\nfunction assignItem(issue: IssueCardData) {\n // We already have the data so skip it\n if (itemRaw.value) return\n\n const item = cacheStore.item.get(issue.issueData.actionable_item)\n\n itemRaw.value = item\n\n if (storeIssue.value) storeIssue.value.actionableItem = item\n}\n\nfunction assignWorkDomain(issue: IssueCardData) {\n // We already have the data so skip it\n if (workDomainRaw.value) return\n\n const workDomain = cacheStore.work_domain_workspace.get(issue.issueData.work_domain)\n\n workDomainRaw.value = workDomain\n\n if (storeIssue.value) storeIssue.value.workDomainData = workDomain\n}\n\nasync function assignThumbnailAttachment(issue: IssueCardData) {\n // We already have the data so skip it\n if (issueThumbnailRaw.value !== undefined) return\n\n if (issue.issueData.attachments.length > 0) {\n const thumbnail = await getFirstImageAttachment(issue.issueData.attachments)\n\n if (thumbnail) {\n issueThumbnailRaw.value = thumbnail\n\n if (storeIssue.value) storeIssue.value.thumbnail = thumbnail\n }\n }\n}\n\nasync function getIconRow(issue: IssueCardData) {\n // If the issue is NOT performed:\n\n // From left to right, the icon order is:\n // 1. Issue priority\n\n // If the issue IS performed:\n\n // From left to right, the icon order is:\n // 1. Issue priority\n // 2. Corrective Work Icon\n // 3. Tick mark (if work done)\n\n const iconRow: IconRowElement[] = [\n {\n name: Icons.ISSUE,\n color: Boolean(issue.priorityData) ? getIssuePriorityColor(issue.priorityData!) : undefined,\n },\n ]\n\n if (props.performed) {\n iconRow.push(\n {\n name: Icons.WORK_CORRECTIVE,\n color: \"fun-label-and-icon\",\n },\n {\n name: Icons.TICK,\n color: workDone.value ? \"positive\" : undefined,\n }\n )\n }\n\n return iconRow\n}\n\nfunction handleClose() {\n emit(\"clickClose\")\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => issueThumbnailRaw.value,\n async (thumbnail) => {\n issueThumbnail.value = thumbnail\n ? await getAttachmentContent(thumbnail, \"issue_item\", props.issue?.issueData.id)\n : undefined\n },\n { immediate: true }\n)\n\nwatch(\n () => props.issue,\n async (newIssue) => {\n await assignData(newIssue)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, _mergeProps({ clickable: \"\" }, _ctx.$attrs, {\n class: [\"sfx-card-work-order-entity-condensed q-my-md\", cardClasses.value],\n \"icon-row\": iconRow.value,\n height: _unref(SFX_CARD_CONDENSED_HEIGHT),\n \"img-src\": issueThumbnail.value,\n hasImg: \"\"\n }), {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(workDomainDesignation.value), 1),\n (overdue.value || props.closable)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_space),\n (overdue.value)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n _createVNode(SfxChip, {\n label: _ctx.$t('time.generic_overdue'),\n \"icon-right\": \"warning\",\n color: \"negative\",\n \"text-color\": \"white\"\n }, null, 8, [\"label\"])\n ]))\n : _createCommentVNode(\"\", true),\n (props.closable)\n ? (_openBlock(), _createBlock(SfxBtnIcon, {\n key: 1,\n icon: _unref(Icons).CLOSE,\n onClick: _withModifiers(handleClose, [\"exact\",\"stop\"]),\n padding: \"none\",\n class: \"sfx-card__top-right-close-button\"\n }, null, 8, [\"icon\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_4, null, 512), [\n [_directive_truncate_middle, props.issue?.issueData.title]\n ]),\n _createVNode(SfxDataPoint, {\n label: _ctx.$t('sfxCard.item'),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(itemDesignation.value), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }, 16, [\"class\", \"icon-row\", \"height\", \"img-src\"]))\n}\n}\n\n})","import script from \"./SfxCardWorkOrderIssueCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardWorkOrderIssueCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withModifiers as _withModifiers, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, mergeProps as _mergeProps, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\nconst _hoisted_2 = { class: \"text-subtitle2 ellipsis\" }\nconst _hoisted_3 = { class: \"text-h4\" }\n\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxCard from \"src/components/card/SfxCard.vue\"\nimport SfxDataPoint from \"src/components/data-point/SfxDataPoint.vue\"\nimport { useCacheStore } from \"src/stores/cacheStore\"\nimport { SFX_CARD_CONDENSED_HEIGHT } from \"src/util/constants/configurations\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getAttachmentContent } from \"src/util/functions/attachments\"\nimport { getIssuePriorityColor } from \"src/util/functions/issuePriority\"\nimport { IconRowElement } from \"src/util/types/components/sfxIconRow\"\nimport { ItemCardData } from \"src/util/types/dataModels/item\"\nimport { ItemClass } from \"src/util/types/dataModels/itemClass\"\nimport { computed, PropType, ref, watch } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardWorkOrderItemCondensed',\n props: {\n item: {\n type: Object as PropType,\n required: true,\n },\n\n // If the card has closable set to true, then it would have the X/Remove icon on the top right.\n closable: {\n type: Boolean,\n default: () => false,\n },\n\n // If performed is true, then add the green border and background, and all additional icons.\n performed: {\n type: Boolean,\n default: () => false,\n },\n},\n emits: [\"clickClose\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst cacheStore = useCacheStore()\nconst storeItem = ref()\n\nconst itemClassRaw = ref(props.item.itemClassData)\nconst itemThumbnailRaw = ref(props.item.thumbnail)\n\nconst itemThumbnail = ref()\nconst itemClassDesignation = computed(() => itemClassRaw.value?.designation)\nconst iconRow = ref([])\nconst workDone = computed(() => props.item?.regularWork?.conclusion === \"accepted\")\nconst cardClasses = computed(() => {\n return {\n \"sfx-card-work-order-entity-condensed__performed\": props.performed,\n \"sfx-card-work-order-entity-condensed__accepted\": props.performed && workDone.value,\n }\n})\n\n//endregion\n\n//region Functions\n\nfunction assignData(item: ItemCardData) {\n storeItem.value = cacheStore.itemCard.get(item.itemData.id)\n\n assignItemClass(item)\n iconRow.value = getIconRow(item)\n assignThumbnail(item)\n}\n\nfunction assignItemClass(item: ItemCardData) {\n // We already have the data so skip it\n if (itemClassRaw.value) return\n\n const itemClass = cacheStore.item_class.get(item.itemData.item_class)\n\n itemClassRaw.value = itemClass\n\n if (storeItem.value) storeItem.value.itemClassData = itemClass\n}\n\nasync function assignThumbnail(item: ItemCardData) {\n // We already have the data so skip it\n if (itemThumbnailRaw.value !== undefined) return\n\n // There is no image, so no point continuing\n if (item.itemData.main_image === null) return\n\n const attachment = cacheStore.attachment.get(item.itemData.main_image)\n\n if (attachment) {\n itemThumbnailRaw.value = attachment\n\n if (storeItem.value) storeItem.value.thumbnail = attachment\n }\n}\n\nfunction getIconRow(item: ItemCardData) {\n // If the item is NOT performed:\n\n // From left to right, the icon order is:\n // 1. Highest Issue priority\n\n // If the item IS performed:\n\n // From left to right, the icon order is:\n // 1. Highest Issue priority\n // 2. Regular Work Icon\n // 3. Tick mark (if work done)\n\n const iconRow: IconRowElement[] = []\n iconRow.push({\n name: Icons.ISSUE,\n color: Boolean(item.issuePriorityData)\n ? getIssuePriorityColor(item.issuePriorityData!)\n : undefined,\n })\n\n if (props.performed) {\n iconRow.push(\n {\n name: Icons.WORK_REGULAR,\n color: \"fun-label-and-icon\",\n },\n {\n name: Icons.TICK,\n color: workDone.value ? \"positive\" : undefined,\n }\n )\n }\n\n return iconRow\n}\n\nfunction handleClose() {\n emit(\"clickClose\")\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => itemThumbnailRaw.value,\n async (thumbnail) => {\n itemThumbnail.value = thumbnail\n ? await getAttachmentContent(thumbnail, \"item\", props.item?.itemData.id)\n : undefined\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item,\n (newItem) => {\n assignData(newItem)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _directive_truncate_middle = _resolveDirective(\"truncate-middle\")!\n\n return (_openBlock(), _createBlock(SfxCard, _mergeProps({ clickable: \"\" }, _ctx.$attrs, {\n class: [\"sfx-card-work-order-entity-condensed q-my-md\", cardClasses.value],\n \"icon-row\": iconRow.value,\n height: _unref(SFX_CARD_CONDENSED_HEIGHT),\n \"img-src\": itemThumbnail.value,\n hasImg: \"\"\n }), {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(itemClassDesignation.value), 1),\n (props.closable)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_space),\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).CLOSE,\n onClick: _withModifiers(handleClose, [\"exact\",\"stop\"]),\n padding: \"none\",\n class: \"sfx-card__top-right-close-button\"\n }, null, 8, [\"icon\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_3, null, 512), [\n [_directive_truncate_middle, props.item?.itemData.designation]\n ]),\n _createVNode(SfxDataPoint, {\n label: _ctx.$t('sfxCard.item_id'),\n \"card-field\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.item.itemData.item_id), 1)\n ]),\n _: 1\n }, 8, [\"label\"])\n ]),\n _: 1\n }, 16, [\"class\", \"icon-row\", \"height\", \"img-src\"]))\n}\n}\n\n})","import script from \"./SfxCardWorkOrderItemCondensed.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardWorkOrderItemCondensed.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, unref as _unref, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\nconst _hoisted_2 = { class: \"column\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = { class: \"text-body1\" }\n\nimport { date } from \"quasar\"\nimport SfxCardEventBase from \"src/components/card/SfxCardEventBase.vue\"\nimport SfxUserData from \"src/components/special/SfxUserData.vue\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { getUserWithAvatarData } from \"src/util/functions/user\"\nimport { IssueCorrectiveWorkRejectedEventCard } from \"src/util/types/dataModels/issue\"\nimport { UserWithAvatar } from \"src/util/types/dataModels/user\"\nimport { computed, onBeforeMount, PropType, ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxCardIssueEventWorkRejected',\n props: {\n issueEventCard: {\n type: Object as PropType,\n required: true,\n },\n\n manager: {\n type: Boolean,\n default: false,\n },\n\n showHand: {\n type: Boolean,\n default: true,\n },\n},\n emits: [\"click\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst correctedTime = computed(() =>\n date.formatDate(props.issueEventCard.correctedDate, DATE_TIME_FULL_MASK)\n)\nconst captionClass = computed(() => (props.manager ? \"text-body1\" : \"text-caption\"))\nconst iconSize = computed(() => (props.manager ? \"32px\" : \"24px\"))\nconst userDataClosed = ref()\nconst userDataCorrected = ref()\n\n//endregion\n\n//region Lifecycle\n\nonBeforeMount(async () => {\n userDataClosed.value = await getUserWithAvatarData(props.issueEventCard?.userIdClosed)\n userDataCorrected.value = await getUserWithAvatarData(props.issueEventCard?.userIdCorrected)\n})\n\n//endregion\n\n//region Functions\n\nfunction handleClick() {\n emit(\"click\")\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createBlock(SfxCardEventBase, {\n title: _ctx.$t('sfxCard.title_corrective_work_rejected'),\n createdDate: props.issueEventCard.rejectedDate,\n manager: props.manager,\n class: \"sfx-card-issue-status--work-rejected\",\n clickable: \"\",\n onClick: handleClick\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"text-fun-label-and-icon\", captionClass.value])\n }, _toDisplayString(_ctx.$t(\"sfxCard.corrected_on_date_by\", { date: correctedTime.value })), 3),\n _createVNode(SfxUserData, { \"user-data\": userDataCorrected.value }, null, 8, [\"user-data\"])\n ]),\n (props.showHand)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_q_space),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).CLICKABLE,\n size: iconSize.value\n }, null, 8, [\"name\", \"size\"])\n ])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"text-fun-label-and-icon\", captionClass.value])\n }, _toDisplayString(_ctx.$t(\"sfxCard.rejection_reason\")), 3),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(props.issueEventCard.reason), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"text-fun-label-and-icon\", captionClass.value])\n }, _toDisplayString(_ctx.$t(\"sfxCard.by\")), 3),\n _createVNode(SfxUserData, { \"user-data\": userDataClosed.value }, null, 8, [\"user-data\"])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"createdDate\", \"manager\"]))\n}\n}\n\n})","import script from \"./SfxCardIssueEventWorkRejected.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxCardIssueEventWorkRejected.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSpace,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, resolveComponent as _resolveComponent, mergeProps as _mergeProps, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { computed } from \"vue\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxChip',\n props: {\n manager: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\n//region Props and Emits\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst extraClasses = computed(() =>\n props.manager ? [\"text-h4\", \"sfx-chip-manager\"] : [\"text-h6\", \"sfx-chip-technician\"]\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_chip = _resolveComponent(\"q-chip\")!\n\n return (_openBlock(), _createBlock(_component_q_chip, _mergeProps({\n class: [\"sfx-chip\", extraClasses.value],\n ripple: false,\n square: \"\"\n }, _ctx.$attrs), {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 16, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxChip.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxChip.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QChip from 'quasar/src/components/chip/QChip.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QChip});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode } from \"vue\"\n\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\ntype Icon = {\n name: string\n color?: string\n}\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDataPoint',\n props: {\n label: {\n required: true,\n type: String,\n },\n\n entityIcon: {\n type: Object as PropType,\n },\n\n navigationIcon: {\n type: String,\n },\n\n clickable: {\n type: Boolean,\n default: false,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n\n cardField: {\n type: Boolean,\n default: false,\n },\n\n hasIdentifier: {\n type: Boolean,\n default: false,\n },\n\n manager: {\n type: Boolean,\n default: false,\n },\n\n iconSpaceLarge: {\n type: Boolean,\n default: false,\n },\n\n valueEllipsis: {\n type: Number,\n default: 0,\n validator: (value: number) => {\n return value >= 0 && value <= 3\n },\n },\n},\n emits: [\"click\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst classes = computed(() => {\n return {\n \"sfx-data-point__clickable\": props.clickable,\n \"sfx-data-point__card-field\": props.cardField,\n \"sfx-data-point__has-identifier\": props.hasIdentifier,\n \"sfx-data-point__manager\": props.manager,\n \"sfx-data-point__technician\": !props.manager,\n }\n})\n\nconst pointerClass = computed(() => {\n return {\n \"cursor-pointer\": props.clickable,\n }\n})\n\nconst isHexColor = computed(() => props.entityIcon?.color && props.entityIcon?.color.includes(\"#\"))\nconst iconStyle = computed(() =>\n isHexColor.value ? { color: props.entityIcon?.color + \"!important\" } : undefined\n)\nconst iconColor = computed(() =>\n isHexColor.value ? undefined : props.entityIcon?.color || \"navy-base\"\n)\nconst iconClass = computed(() => (props.iconSpaceLarge ? \"q-pr-sm\" : \"q-pr-xs\"))\n\nconst valueEllipsisClass = computed(() => {\n switch (props.valueEllipsis) {\n case 0:\n default:\n return\n case 1:\n return \"ellipsis\"\n case 2:\n return \"ellipsis-2-lines\"\n case 3:\n return \"ellipsis-3-lines\"\n }\n})\n\nconst iconSize = computed(() => (props.manager ? \"32px\" : \"24px\"))\n\n//endregion\n\n//region Functions\n\nfunction handleClick() {\n emit(\"click\")\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_field = _resolveComponent(\"q-field\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n\n return (_openBlock(), _createBlock(_component_q_item, {\n class: _normalizeClass([\"sfx-data-point\", classes.value]),\n clickable: props.clickable,\n onClick: handleClick,\n dense: \"\",\n disable: props.disable\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_field, {\n label: props.label,\n class: _normalizeClass(pointerClass.value),\n \"stack-label\": \"\",\n borderless: \"\",\n readonly: \"\",\n dense: \"\"\n }, _createSlots({\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"sfx-data-point__value\", valueEllipsisClass.value])\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n _createTextVNode(\"N/A\")\n ])\n ], 2)\n ]),\n _: 2\n }, [\n (props.entityIcon || props.navigationIcon || _ctx.$slots.chip)\n ? {\n name: \"append\",\n fn: _withCtx(() => [\n (props.entityIcon)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n class: _normalizeClass(iconClass.value),\n name: props.entityIcon.name,\n color: iconColor.value,\n style: _normalizeStyle(iconStyle.value),\n size: iconSize.value\n }, null, 8, [\"class\", \"name\", \"color\", \"style\", \"size\"]))\n : _createCommentVNode(\"\", true),\n (props.navigationIcon)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 1,\n class: \"q-pr-xs\",\n name: props.navigationIcon,\n size: iconSize.value,\n color: \"navy-base\"\n }, null, 8, [\"name\", \"size\"]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"chip\")\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"label\", \"class\"])\n ]),\n _: 3\n }, 8, [\"class\", \"clickable\", \"disable\"]))\n}\n}\n\n})","import script from \"./SfxDataPoint.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDataPoint.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport QField from 'quasar/src/components/field/QField.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QItem,QField,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, Fragment as _Fragment, unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nimport { format, useDialogPluginComponent } from \"quasar\"\nimport SfxBtn from \"src/components/button/SfxBtn.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { computed } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxDialogConfirmation',\n props: {\n modelValue: {\n type: Boolean,\n default: undefined,\n },\n\n title: {\n type: String,\n },\n\n content: {\n type: String,\n },\n\n html: {\n type: Boolean,\n default: false,\n },\n\n persistent: {\n type: Boolean,\n default: false,\n },\n\n confirmButtonClasses: {\n type: String,\n },\n\n confirmButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_confirm\"))\n },\n },\n\n rejectButtonText: {\n type: String,\n default: () => {\n const { t } = useI18n()\n return format.capitalize(t(\"sfxButtons.btn_cancel\"))\n },\n },\n},\n emits: [...useDialogPluginComponent.emits, \"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_card_section = _resolveComponent(\"q-card-section\")!\n const _component_q_card_actions = _resolveComponent(\"q-card-actions\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n const _component_q_dialog = _resolveComponent(\"q-dialog\")!\n\n return (_openBlock(), _createBlock(_component_q_dialog, {\n ref_key: \"dialogRef\",\n ref: dialogRef,\n onHide: _unref(onDialogHide),\n persistent: props.persistent,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_card, { class: \"q-dialog-plugin\" }, {\n default: _withCtx(() => [\n (props.title)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 0,\n class: \"q-dialog__title text-h3 q-pb-xs\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.title), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (props.content)\n ? (_openBlock(), _createBlock(_component_q_card_section, {\n key: 1,\n class: \"text-body1 sfx-confirm-content\"\n }, {\n default: _withCtx(() => [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.content\n }, null, 8, _hoisted_1))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.content), 1)\n ], 64))\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card_actions, { class: \"q-px-md q-pb-md\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n onClick: _unref(onDialogCancel),\n label: props.rejectButtonText,\n class: \"col q-mr-sm\"\n }, null, 8, [\"onClick\", \"label\"]),\n _createVNode(SfxBtn, {\n onClick: _unref(onDialogOK),\n label: props.confirmButtonText,\n class: _normalizeClass([\"col\", __props.confirmButtonClasses])\n }, null, 8, [\"onClick\", \"label\", \"class\"])\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"onHide\", \"persistent\", \"modelValue\"]))\n}\n}\n\n})","import script from \"./SfxDialogConfirmation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxDialogConfirmation.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QDialog from 'quasar/src/components/dialog/QDialog.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QCardSection from 'quasar/src/components/card/QCardSection.js';\nimport QCardActions from 'quasar/src/components/card/QCardActions.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QDialog,QCard,QCardSection,QCardActions});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"q-mt-lg text-center\" }\nconst _hoisted_2 = { class: \"text-h3\" }\nconst _hoisted_3 = { class: \"text-body1\" }\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = { key: 1 }\nconst _hoisted_6 = {\n key: 2,\n class: \"text-info text-bold\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"text-body1\"\n}\nconst _hoisted_8 = { class: \"text-weight-bold\" }\nconst _hoisted_9 = [\"innerHTML\"]\n\nimport { i18n } from \"src/boot/i18n\"\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { MissingEntityDefinition } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType, ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxEmptyPage',\n props: {\n missingEntity: {\n required: true,\n type: Object as PropType,\n },\n\n allowHTML: {\n type: Boolean,\n default: false,\n },\n\n error: {\n type: Boolean,\n default: false,\n },\n\n iconColor: {\n type: String,\n },\n\n showWorkspace: {\n type: Boolean,\n default: false,\n },\n\n verticalCenter: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = i18n.global\nconst authStore = useAuthStore()\nconst configurationStore = useConfigurationStore()\n\nconst mainDiv = ref()\n\nconst paddingTop = computed(() => {\n if (props.verticalCenter) {\n const mainDivHeight = mainDiv.value?.offsetHeight\n return { paddingTop: `calc(45vh - ${mainDivHeight}px)` }\n } else {\n return null\n }\n})\n\nconst currentWorkspaceName = computed(() => {\n return authStore.selectedWorkspace?.name || t(\"sfxEmpty.this_workspace\")\n})\n\nconst textColorClass = computed(() => {\n return {\n \"text-error\": props.error,\n }\n})\n\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n ref_key: \"mainDiv\",\n ref: mainDiv,\n class: \"column items-center justify-center text-quote-text\",\n style: _normalizeStyle(paddingTop.value)\n }, [\n (props.missingEntity?.icon)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n name: props.missingEntity.icon,\n color: props.iconColor,\n size: \"48px\"\n }, null, 8, [\"name\", \"color\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", {\n class: _normalizeClass(textColorClass.value)\n }, _toDisplayString(props.missingEntity.title), 3)\n ]),\n _createElementVNode(\"p\", _hoisted_3, [\n (__props.allowHTML)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.missingEntity.subtitle\n }, null, 8, _hoisted_4))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(props.missingEntity.subtitle), 1)),\n (props.showWorkspace)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(currentWorkspaceName.value), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (props.error)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxEmpty.contact_administrator\")), 1),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"sfxEmpty.http_404\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (easterEggsEnabled.value && props.missingEntity?.quote)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 1,\n class: \"text-italic text-body1\",\n innerHTML: props.missingEntity.quote\n }, null, 8, _hoisted_9))\n : _createCommentVNode(\"\", true)\n ])\n ], 4))\n}\n}\n\n})","import script from \"./SfxEmptyPage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxEmptyPage.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"column items-center justify-center text-quote-text\" }\nconst _hoisted_2 = { class: \"q-mt-lg text-center\" }\nconst _hoisted_3 = { class: \"text-h2 q-mb-sm\" }\nconst _hoisted_4 = { class: \"text-body0 q-mb-sm\" }\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { key: 1 }\nconst _hoisted_7 = {\n key: 2,\n class: \"text-info text-bold\"\n}\nconst _hoisted_8 = {\n key: 0,\n class: \"text-body0 q-mt-lg q-mb-sm\"\n}\nconst _hoisted_9 = { class: \"text-weight-bold q-mt-lg q-mb-sm\" }\nconst _hoisted_10 = [\"innerHTML\"]\n\nimport { useAuthStore } from \"src/stores/authStore\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { MissingEntityDefinition } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxEmptyPageManager',\n props: {\n missingEntity: {\n required: true,\n type: Object as PropType,\n },\n\n allowHTML: {\n type: Boolean,\n default: false,\n },\n\n error: {\n type: Boolean,\n default: false,\n },\n\n iconColor: {\n type: String,\n },\n\n showWorkspace: {\n type: Boolean,\n default: false,\n },\n\n quoteTextSmall: {\n type: Boolean,\n default: false,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst authStore = useAuthStore()\nconst configurationStore = useConfigurationStore()\n\nconst currentWorkspaceName = computed(() => {\n return authStore.selectedWorkspace?.name || t(\"sfxEmpty.this_workspace\")\n})\n\nconst textColorClass = computed(() => {\n return {\n \"text-error\": props.error,\n }\n})\n\nconst quoteClass = computed(() => (props.quoteTextSmall ? \"text-body1\" : \"text-body0\"))\n\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (props.missingEntity?.icon)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n name: props.missingEntity.icon,\n color: props.iconColor,\n class: \"q-mb-sm\",\n size: \"120px\"\n }, null, 8, [\"name\", \"color\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, [\n _createElementVNode(\"span\", {\n class: _normalizeClass(textColorClass.value)\n }, _toDisplayString(props.missingEntity.title), 3)\n ]),\n _createElementVNode(\"p\", _hoisted_4, [\n (__props.allowHTML)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.missingEntity?.subtitle\n }, null, 8, _hoisted_5))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(props.missingEntity.subtitle), 1)),\n (props.showWorkspace)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString(currentWorkspaceName.value), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (props.error)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"sfxEmpty.contact_administrator\")), 1),\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t(\"sfxEmpty.http_404\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (easterEggsEnabled.value && props.missingEntity?.quote)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 1,\n class: _normalizeClass([\"text-italic q-mt-lg q-mb-sm\", quoteClass.value]),\n innerHTML: props.missingEntity.quote\n }, null, 10, _hoisted_10))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./SfxEmptyPageManager.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxEmptyPageManager.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withCtx as _withCtx, createBlock as _createBlock, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"absolute-full column flex-center transparent image-gallery-item--error\" }\nconst _hoisted_2 = { class: \"text-error\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"flex items-center text-subtitle2\"\n}\n\nimport { Notify } from \"quasar\"\nimport { IMG_PLACEHOLDER } from \"src/util/constants/files\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { deleteImage } from \"src/util/functions/dialogs\"\nimport { showImageView, showPhotoGalleryOverlay } from \"src/util/functions/overlays\"\nimport { ImageGalleryItem } from \"src/util/types/components/sfxImageGallery\"\nimport { AttachmentContext } from \"src/util/types/dataModels/attachment\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\nconst imageSize = \"56px\"\n\n//endregion\n\n//region Functions\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxImageGallerySmall',\n props: {\n imageSrc: {\n type: Array as PropType>,\n required: true,\n },\n\n canDelete: {\n type: Boolean,\n default: false,\n },\n\n entityId: {\n type: String,\n },\n\n entityType: {\n type: String as PropType,\n },\n\n disableEditImage: Boolean,\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst imageList = computed(() => props.imageSrc.slice(0, 4))\nconst imageListRemainder = computed(() => props.imageSrc.slice(4))\nasync function handleImageClick(image: ImageGalleryItem) {\n if (process.env.IS_MANAGER_MODE && props.entityId && props.entityType) {\n await showPhotoGalleryOverlay(props.entityId, props.entityType, props.disableEditImage)\n } else {\n showImageView(image, props.imageSrc)\n }\n}\n\nasync function requestDeletion(image: ImageGalleryItem) {\n if (props.canDelete) {\n const data = await deleteImage()\n\n if (data) {\n Notify.create({\n message: `Request for removal of: ${image.attachmentData.name}, because: ${data}`,\n progress: true,\n color: \"positive\",\n })\n }\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _directive_touch_hold = _resolveDirective(\"touch-hold\")!\n\n return (_openBlock(), _createBlock(_component_q_list, { class: \"row no-wrap scroll image-gallery full-width\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(imageList.value, (image, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"image-gallery-item\"\n }, [\n _withDirectives((_openBlock(), _createBlock(_component_q_img, {\n src: image.src,\n \"placeholder-src\": _unref(IMG_PLACEHOLDER),\n onClick: ($event: any) => (handleImageClick(image)),\n width: imageSize,\n height: imageSize,\n ratio: \"1\",\n class: \"image-gallery-item--image\"\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: \"25px\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxImage.no_image_small\")), 1)\n ])\n ]),\n _: 2\n }, 1032, [\"src\", \"placeholder-src\", \"onClick\"])), [\n [\n _directive_touch_hold,\n () => requestDeletion(image),\n void 0,\n { mouse: true }\n ]\n ])\n ]))\n }), 128)),\n (imageListRemainder.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, \" +\" + _toDisplayString(imageListRemainder.value.length), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxImageGallerySmall.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxImageGallerySmall.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QList from 'quasar/src/components/item/QList.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';import TouchHold from 'quasar/src/directives/touch-hold/TouchHold.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QList,QImg,QIcon});qInstall(script, 'directives', {TouchHold});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withCtx as _withCtx, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"row items-center justify-between uploader-element\"\n}\nconst _hoisted_2 = { class: \"text-overline\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"row items-center\"\n}\n\nimport { Platform, QFile } from \"quasar\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxImageGallerySmall from \"src/components/images/SfxImageGallerySmall.vue\"\nimport { Log } from \"src/util/classes/log\"\nimport { IMAGE_FILE_MAIN_MIME_TYPES } from \"src/util/constants/files\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { uploadImagesInApp } from \"src/util/functions/appImages\"\nimport { undoNotificationDialog } from \"src/util/functions/dialogs\"\nimport { ImageGalleryItem } from \"src/util/types/components/sfxImageGallery\"\nimport { AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { computed, PropType, ref, watch, watchEffect } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxImageUploader',\n props: {\n uploadedImages: {\n type: Array as PropType,\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:uploadedImages\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst title = t(\"sfxImage.title_photographs\")\n\nconst inputFileField = ref()\n\nconst imageFiles = ref()\nlet deletedImage: AttachmentUpload | undefined\n\nconst images = computed(() => props.uploadedImages || [])\n\nconst hasImages = computed(() => images.value.length > 0)\n\nconst imageGalleryItems = computed(() => getImageFromAttachment(images.value))\n\nconst capacitorEnv = computed(() => Platform.is.capacitor)\nconst classes = computed(() => {\n return {\n \"sfx-image-uploader-required\": props.required,\n \"sfx-image-uploader-disable\": props.disable,\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function getImage() {\n if (capacitorEnv.value) {\n try {\n const imageData = await uploadImagesInApp()\n\n if (imageData) {\n const imageAttachment: AttachmentUpload = { name: imageData.name, data: imageData.data }\n images.value?.push(imageAttachment)\n }\n } catch (error) {\n Log.error({ message: \"Failed to fetch images in android\", error })\n }\n } else {\n //Activate the hidden QFile component to fetch the files\n inputFileField.value?.pickFiles()\n }\n}\n\nfunction getImageFromAttachment(images: AttachmentUpload[]): ImageGalleryItem[] {\n let imageGalleryItems: ImageGalleryItem[] = []\n\n for (const image of images) {\n const imageData: ImageGalleryItem = {\n attachmentData: {\n name: image.name || \"\", // Name would never be \"\" in this scenario\n extension: image.name?.split(\".\").pop() || \"\",\n },\n src: URL.createObjectURL(image.data),\n }\n imageGalleryItems.push(imageData)\n }\n return imageGalleryItems\n}\n\nfunction handleDelete() {\n //Deleting the last image\n deletedImage = images.value?.pop()\n\n undoNotificationDialog(t(\"notifications.photo_removed\"), undo)\n}\n\n// Undo button functionality\nasync function undo() {\n if (deletedImage) {\n images.value?.push(deletedImage)\n deletedImage = undefined\n }\n}\n\n//endregion\n\n//region Setup Code\n\n//Watching for any images coming from QFile component\nwatch(\n () => imageFiles.value,\n () => {\n let imageData: AttachmentUpload[] = []\n for (const imageFile of imageFiles.value) {\n const image = {\n name: imageFile.name,\n data: imageFile,\n }\n imageData.push(image)\n }\n images.value?.push(...imageData)\n }\n)\n\nwatchEffect(() => emit(\"update:uploadedImages\", images.value))\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (!capacitorEnv.value)\n ? (_openBlock(), _createBlock(_unref(QFile), {\n key: 0,\n class: \"hidden\",\n ref_key: \"inputFileField\",\n ref: inputFileField,\n modelValue: imageFiles.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((imageFiles).value = $event)),\n accept: _unref(IMAGE_FILE_MAIN_MIME_TYPES),\n multiple: \"\"\n }, null, 8, [\"modelValue\", \"accept\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_card, {\n flat: \"\",\n class: _normalizeClass([classes.value, \"q-pa-md sfx-image-uploader\"])\n }, {\n default: _withCtx(() => [\n (props.uploadedImages?.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(title)), 1),\n _createVNode(_component_q_icon, {\n name: _unref(Icons).SQUARE_PLUS,\n size: \"sm\",\n onClick: getImage\n }, null, 8, [\"name\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(SfxImageGallerySmall, {\n class: \"col\",\n \"image-src\": imageGalleryItems.value\n }, null, 8, [\"image-src\"]),\n _createVNode(SfxBtnIcon, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (handleDelete())),\n icon: _unref(Icons).DELETE,\n size: \"18px\",\n disable: !hasImages.value,\n class: \"q-mx-sm\"\n }, null, 8, [\"icon\", \"disable\"]),\n _createVNode(SfxBtnOutline, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (getImage())),\n icon: _unref(Icons).ADD_PHOTO\n }, null, 8, [\"icon\"])\n ]))\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 64))\n}\n}\n\n})","import script from \"./SfxImageUploader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxImageUploader.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QFile from 'quasar/src/components/file/QFile.js';\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QFile,QCard,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, normalizeStyle as _normalizeStyle, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex column full-height\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"column flex-center full-height text-quote-text\"\n}\nconst _hoisted_3 = { class: \"text-h3 q-my-xs\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"text-body1 text-italic q-mt-md\"\n}\nconst _hoisted_5 = { class: \"row full-height flex flex-center\" }\nconst _hoisted_6 = { class: \"col image-overview-previous\" }\nconst _hoisted_7 = { class: \"image-overview-bad-image column absolute-full flex-center transparent\" }\nconst _hoisted_8 = { class: \"text-error\" }\nconst _hoisted_9 = { class: \"col\" }\nconst _hoisted_10 = { class: \"column absolute-full flex-center transparent\" }\nconst _hoisted_11 = { class: \"text-error\" }\nconst _hoisted_12 = { class: \"col image-overview-next\" }\nconst _hoisted_13 = { class: \"image-overview-bad-image column absolute-full flex-center transparent\" }\nconst _hoisted_14 = { class: \"text-error\" }\nconst _hoisted_15 = { class: \"text-h4 text-navy-base\" }\nconst _hoisted_16 = { class: \"text-h5 text-fun-label-and-icon\" }\nconst _hoisted_17 = { class: \"absolute-full column flex-center transparent image-gallery-item--error\" }\nconst _hoisted_18 = { class: \"text-error\" }\n\nimport axios from \"axios\"\nimport { date, QFile } from \"quasar\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { getDB } from \"src/db/databases\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { DATE_TIME_FULL_MASK } from \"src/util/constants/configurations\"\nimport {\n ATTACHMENT_IMAGE_EXTENSIONS,\n IMAGE_FILE_MAIN_MIME_TYPES,\n MAX_UPLOAD_FILE_SIZE,\n} from \"src/util/constants/files\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport {\n deleteEntityAttachments,\n getAttachmentCardData,\n getEntityAttachmentIdList,\n partitionBatchErrors,\n removeBatchErrorsAndPrint,\n updateEntityInUI,\n} from \"src/util/functions/attachments\"\nimport { imageDeleteDialog } from \"src/util/functions/dialogs\"\nimport { getTranslatedEntityForAttachment } from \"src/util/functions/entity\"\nimport { postAttachmentForEntityBatch } from \"src/util/functions/entityData\"\nimport {\n showAttachmentUploadingNotification,\n showErrorNotification,\n showFileTypeNotAllowedPartialNotification,\n showIssueDownloadingFileNotification,\n showMaxFileSizeExceededNotification,\n} from \"src/util/functions/notifications\"\nimport { ImageViewerItem } from \"src/util/types/components/sfxImageGallery\"\nimport { AttachmentContext, AttachmentUpload } from \"src/util/types/dataModels/attachment\"\nimport { DragAndDropValue } from \"src/util/types/misc\"\nimport { computed, PropType, ref, shallowRef, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst canUpload = true\nconst ICON_SIZE = \"48px\"\nconst THUMBNAIL_SIZE = \"56px\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxImageViewerManager',\n props: {\n entityId: {\n type: String,\n required: true,\n },\n\n entityType: {\n type: String as PropType,\n required: true,\n },\n\n imageList: {\n type: Array as PropType,\n required: true,\n },\n\n startImage: {\n type: Object as PropType,\n },\n\n disableEditImage: Boolean,\n},\n emits: [\"update:imageList\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst translatedEntity = computed(() => getTranslatedEntityForAttachment(props.entityType))\n\nconst dndContent = t(\"sfxImage.dnd_content\", { entity: translatedEntity.value })\nconst dndQuote = t(\"sfxImage.dnd_quote\")\nconst configurationStore = useConfigurationStore()\nconst easterEggsEnabled = computed(() => configurationStore.easterEggs)\n\nconst slideModel = shallowRef(\n props.startImage && props.imageList.includes(props.startImage)\n ? props.imageList.indexOf(props.startImage)\n : 0\n)\n\nconst imageList = computed({\n get() {\n return props.imageList\n },\n\n set(value) {\n return emit(\"update:imageList\", value)\n },\n})\n\nconst currentImage = computed(\n () => props.imageList.at(slideModel.value) || null\n)\nconst previousImage = computed(\n () => props.imageList.at(slideModel.value - 1) || null\n)\nconst nextImage = computed(\n () =>\n props.imageList.at(\n props.imageList.length - 1 === slideModel.value ? 0 : slideModel.value + 1\n ) || null\n)\n\nconst filePicker = ref(null)\nconst filePickerFiles = ref([])\n\nconst canDownload = computed(\n () => Boolean(currentImage.value) && currentImage.value?.attachmentData.state === 2\n)\nconst canDelete = computed(\n () =>\n Boolean(currentImage.value) &&\n (currentImage.value?.attachmentData.state === 2 ||\n currentImage.value?.attachmentData.state === -1)\n)\n\nconst thumbnails = shallowRef()\n\nconst imageDetailsDiv = ref()\nconst actionButtonsDiv = ref()\nconst thumbnailsDiv = ref()\n\nconst carouselStyle = computed(() => {\n // 48 is the actionButtonsDiv margin\n const actionButtonsDivHeight = actionButtonsDiv.value?.offsetHeight + 48\n\n if (imageList.value?.length > 0) {\n const imageDetailsDivHeight = imageDetailsDiv.value?.offsetHeight\n const thumbnailsDivHeight = thumbnailsDiv.value?.offsetHeight\n const totalHeight = imageDetailsDivHeight + actionButtonsDivHeight + thumbnailsDivHeight\n\n return \"height: \" + `calc(100% - ${totalHeight}px)`\n } else {\n // 72 is the height of the thumbnailsDiv when it has thumbnails\n // Hardcoded this value to avoid the action button moving when there are no thumbnails\n return \"height: \" + `calc(100% - ${actionButtonsDivHeight + 72}px)`\n }\n})\n\nconst disableBtnAction = computed(() => props.entityType === \"issue_item\" || props.disableEditImage)\n\n//endregion\n\n//region Functions\n\nfunction openImage(image: ImageViewerItem) {\n window.open(image.src, \"_blank\")\n}\n\nfunction dragScroll(offset: { x: number; y: number }) {\n const acceleration = 0.1 // control speed gain\n const scrollBy = (thumbnails.value.$el.offsetWidth / thumbnails.value.$el.scrollWidth) * -offset.x\n thumbnails.value?.$el.scrollBy({ left: scrollBy * acceleration })\n}\n\nfunction setImageIndex(index: number) {\n slideModel.value = index\n}\n\nfunction getFormattedDate(dateTime: string): string {\n return date.formatDate(dateTime, DATE_TIME_FULL_MASK)\n}\n\nasync function downloadFile() {\n if (!currentImage.value) return\n\n try {\n const result = await axios.get(currentImage.value.src, { responseType: \"blob\" })\n\n const blob = new Blob([result.data])\n const link = document.createElement(\"a\")\n link.href = URL.createObjectURL(blob)\n link.download =\n currentImage.value.attachmentData.name + \".\" + currentImage.value.attachmentData.extension\n link.click()\n URL.revokeObjectURL(link.href)\n } catch (error) {\n showIssueDownloadingFileNotification()\n Log.error({\n message: \"Bad image download from image viewer\",\n error,\n data: { image: currentImage.value },\n })\n }\n}\n\nfunction dropFile(dndValue: DragAndDropValue) {\n // User not allowed to upload\n if (disableBtnAction.value) return\n\n handleFileUpload(dndValue.detail)\n}\n\nfunction handleFileUpload(files: File[]) {\n const allowedFiles: AttachmentUpload[] = []\n const disallowedFiles: File[] = []\n let filesSize = 0\n\n for (const file of files) {\n const extension = file.name.split(\".\").pop()\n if (extension && ATTACHMENT_IMAGE_EXTENSIONS.includes(extension)) {\n allowedFiles.push({ data: file })\n filesSize += file.size\n } else {\n disallowedFiles.push(file)\n }\n }\n\n if (disallowedFiles.length > 0) {\n showFileTypeNotAllowedPartialNotification(disallowedFiles)\n }\n\n if (filesSize > MAX_UPLOAD_FILE_SIZE) {\n showMaxFileSizeExceededNotification()\n return\n }\n\n saveNewImage(allowedFiles)\n}\n\nasync function saveNewImage(newImages: AttachmentUpload[]) {\n const singleImage = newImages.length === 1\n const dismissNotify = showAttachmentUploadingNotification(singleImage)\n\n try {\n const newImagesInServer = await postAttachmentForEntityBatch(\n props.entityType,\n props.entityId,\n newImages\n )\n\n if (!newImagesInServer) return\n\n const successfulImages = removeBatchErrorsAndPrint(partitionBatchErrors(newImagesInServer))\n\n const attachmentIds = (await getEntityAttachmentIdList(props.entityType, props.entityId)) || []\n\n for (const newImage of successfulImages) {\n if (attachmentIds.includes(newImage.id)) {\n const existingImageIndex = imageList.value.findIndex(\n (image) => image.attachmentData.id === newImage.id\n )\n // If the image name is different, update the image new name in the UI\n if (newImage.name !== imageList.value[existingImageIndex].attachmentData.name) {\n imageList.value[existingImageIndex].attachmentData.name = newImage.name\n }\n continue\n }\n\n // Add the new image to the overlay UI\n const attachmentCardData: ImageViewerItem = await getAttachmentCardData(\n newImage,\n props.entityType,\n props.entityId\n )\n imageList.value.push(attachmentCardData)\n }\n\n // Since the entity has new attachment ids we need to update the entity in the UI as well\n await updateEntityInUI(props.entityType, props.entityId)\n\n const db = await getDB()\n // bulkUpsert is intentionally used here to handle the case where the user adding the same image again\n await db.attachment.bulkUpsert(successfulImages)\n\n dismissNotify()\n } catch (error) {\n dismissNotify()\n showErrorNotification(t(\"sfxErrorMsg.error_adding_image\"))\n Log.error({ message: \"An error occurred while adding the image\", error })\n }\n}\n\nasync function deleteAttachment() {\n if (!currentImage.value?.attachmentData) return\n\n const userConfirmed = await imageDeleteDialog(translatedEntity.value, currentImage.value)\n if (!userConfirmed) return\n\n const response = await deleteEntityAttachments(\n [currentImage.value?.attachmentData.id],\n props.entityType,\n props.entityId\n )\n\n // We remove the image from the UI if the DELETE API response is\n // 204 - The attachment has been removed successfully\n // OR\n // 404 - Cannot find the attachment(the attachment is already removed)\n if (response && (response[0].status === 204 || response[0].status === 404)) {\n // Update the UI\n const deletedImageIndex = imageList.value?.findIndex(\n (image) => image.attachmentData.id === currentImage.value?.attachmentData.id\n )\n imageList.value.splice(deletedImageIndex, 1)\n } else {\n showErrorNotification(\n t(\"sfxErrorMsg.error_deleting_attachment_with_name\", {\n fileName: currentImage.value?.attachmentData.name,\n })\n )\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => filePickerFiles.value,\n (newFiles) => {\n if (newFiles) {\n handleFileUpload(newFiles)\n // Reset model so that same file can be uploaded again, so it is consistent with DND\n newFiles.length = 0\n }\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_carousel_slide = _resolveComponent(\"q-carousel-slide\")!\n const _component_q_carousel_control = _resolveComponent(\"q-carousel-control\")!\n const _component_q_carousel = _resolveComponent(\"q-carousel\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _directive_dnd = _resolveDirective(\"dnd\")!\n const _directive_touch_pan = _resolveDirective(\"touch-pan\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n style: _normalizeStyle(carouselStyle.value),\n onDnd: dropFile\n }, [\n (imageList.value?.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(dndContent)), 1),\n (easterEggsEnabled.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(dndQuote)), 1))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createBlock(_component_q_carousel, {\n key: 1,\n ref: \"carousel\",\n modelValue: slideModel.value,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((slideModel).value = $event)),\n class: \"transparent\",\n swipeable: \"\",\n animated: \"\",\n infinite: \"\",\n height: \"100%\",\n \"transition-prev\": \"slide-right\",\n \"transition-next\": \"slide-left\"\n }, {\n control: _withCtx(() => [\n _createVNode(_component_q_carousel_control, {\n position: \"left\",\n class: \"column justify-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"bg-white\",\n icon: _unref(Icons).CHEVRON_LEFT,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$refs.carousel?.previous()))\n }, null, 8, [\"icon\"])\n ]),\n _: 1\n }),\n _createVNode(_component_q_carousel_control, {\n position: \"right\",\n class: \"column justify-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnOutline, {\n class: \"bg-white\",\n icon: _unref(Icons).CHEVRON_RIGHT,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$refs.carousel?.next()))\n }, null, 8, [\"icon\"])\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.imageList, (image, index) => {\n return (_openBlock(), _createBlock(_component_q_carousel_slide, {\n key: index,\n name: index\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_q_img, {\n src: previousImage.value?.src,\n class: \"image-overview-previous-image\",\n ratio: \"1\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$refs.carousel?.previous()))\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: ICON_SIZE\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_8, _toDisplayString(_ctx.$t(\"sfxImage.no_image\")), 1)\n ])\n ]),\n _: 1\n }, 8, [\"src\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_q_img, {\n src: image.src,\n class: \"fit\",\n onClick: ($event: any) => (openImage(image)),\n ratio: \"1\"\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: ICON_SIZE\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_11, _toDisplayString(_ctx.$t(\"sfxImage.no_image\")), 1)\n ])\n ]),\n _: 2\n }, 1032, [\"src\", \"onClick\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_q_img, {\n src: nextImage.value?.src,\n class: \"image-overview-next-image\",\n ratio: \"1\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$refs.carousel?.next()))\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: ICON_SIZE\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_14, _toDisplayString(_ctx.$t(\"sfxImage.no_image\")), 1)\n ])\n ]),\n _: 1\n }, 8, [\"src\"])\n ])\n ])\n ]),\n _: 2\n }, 1032, [\"name\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n ], 36)), [\n [_directive_dnd]\n ]),\n (currentImage.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n ref_key: \"imageDetailsDiv\",\n ref: imageDetailsDiv,\n class: \"column items-center\"\n }, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(currentImage.value.attachmentData.name), 1),\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(getFormattedDate(currentImage.value.attachmentData.created_dt)), 1)\n ], 512))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n ref_key: \"actionButtonsDiv\",\n ref: actionButtonsDiv,\n class: \"row justify-center q-gutter-md q-my-lg\"\n }, [\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).UPLOAD,\n disable: !canUpload || disableBtnAction.value,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$refs.filePicker?.pickFiles()))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(QFile), {\n class: \"hidden\",\n ref_key: \"filePicker\",\n ref: filePicker,\n modelValue: filePickerFiles.value,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((filePickerFiles).value = $event)),\n accept: _unref(IMAGE_FILE_MAIN_MIME_TYPES),\n multiple: \"\"\n }, null, 8, [\"modelValue\", \"accept\"])\n ]),\n _: 1\n }, 8, [\"icon\", \"disable\"]),\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).DOWNLOAD,\n disable: !canDownload.value,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (downloadFile()))\n }, null, 8, [\"icon\", \"disable\"]),\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).DELETE,\n disable: !canDelete.value || disableBtnAction.value,\n onClick: _cache[8] || (_cache[8] = ($event: any) => (deleteAttachment()))\n }, null, 8, [\"icon\", \"disable\"])\n ], 512),\n _createElementVNode(\"div\", {\n ref_key: \"thumbnailsDiv\",\n ref: thumbnailsDiv,\n class: \"full-width justify-center flex flex-center\"\n }, [\n _withDirectives((_openBlock(), _createBlock(_component_q_list, {\n ref_key: \"thumbnails\",\n ref: thumbnails,\n class: \"row no-wrap scroll image-gallery q-pb-md\"\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.imageList, (image, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"image-gallery-item\"\n }, [\n _createVNode(_component_q_img, {\n src: image.src,\n height: THUMBNAIL_SIZE,\n width: THUMBNAIL_SIZE,\n class: _normalizeClass([\"image-gallery-item--image image-overview-thumbnail\", { 'image-gallery-item--image-selected': index === slideModel.value }]),\n onClick: ($event: any) => (setImageIndex(index))\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_17, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-disabled\",\n size: \"25px\"\n }, null, 8, [\"name\"]),\n _createElementVNode(\"i\", _hoisted_18, _toDisplayString(_ctx.$t(\"sfxImage.no_image_small\")), 1)\n ])\n ]),\n _: 2\n }, 1032, [\"src\", \"class\", \"onClick\"])\n ]))\n }), 128))\n ]),\n _: 1\n })), [\n [\n _directive_touch_pan,\n ({ offset }) => dragScroll(offset),\n void 0,\n {\n mouse: true,\n horizontal: true\n }\n ]\n ])\n ], 512)\n ]))\n}\n}\n\n})","import script from \"./SfxImageViewerManager.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxImageViewerManager.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCarousel from 'quasar/src/components/carousel/QCarousel.js';\nimport QCarouselSlide from 'quasar/src/components/carousel/QCarouselSlide.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QCarouselControl from 'quasar/src/components/carousel/QCarouselControl.js';\nimport QFile from 'quasar/src/components/file/QFile.js';\nimport QList from 'quasar/src/components/item/QList.js';import TouchPan from 'quasar/src/directives/touch-pan/TouchPan.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCarousel,QCarouselSlide,QImg,QIcon,QCarouselControl,QFile,QList});qInstall(script, 'directives', {TouchPan});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, unref as _unref, mergeProps as _mergeProps, withCtx as _withCtx, createSlots as _createSlots } from \"vue\"\n\nimport { is, QInput } from \"quasar\"\nimport SfxBtnUndo from \"src/components/button/SfxBtnUndo.vue\"\nimport { getPrecision, isEmptyOrNull } from \"src/util/functions/misc\"\nimport { computed, ref, useAttrs } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxInput',\n props: {\n modelValue: {\n type: [String, Number],\n },\n\n /**\n * If input is required, and no input is provided, it will display an error.\n */\n required: {\n type: Boolean,\n default: false,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n\n rules: {\n type: Array,\n },\n\n originalValue: {\n default: undefined,\n type: [String, Number],\n },\n\n /**\n * A boolean flag for when the equality check on the original value needs to be special.\n * For instance on date time inputs.\n */\n isOriginalValue: { type: Boolean, required: false, default: undefined },\n},\n emits: [\"update:modelValue\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\nconst attrs = useAttrs()\n\n__expose({ validate })\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst inputRef = ref()\nconst isEqualToOriginal = computed(() => {\n if (props.isOriginalValue !== undefined) {\n return props.isOriginalValue\n }\n if (props.originalValue === undefined) {\n return true\n }\n\n return is.deepEqual(props.originalValue, model.value)\n})\n\nconst edited = computed(() => props.originalValue && !props.disable && !isEqualToOriginal.value)\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n // Seems to be some weird Quasar bug\n if (value != null && is.number(props.modelValue)) value = Number(value)\n\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst classes = computed(() => ({\n \"sfx-input\": true,\n \"q-field__required\": props.required,\n \"q-field__edited\": !props.disable && !isEqualToOriginal.value,\n}))\n\nconst rules = computed(() => {\n const required = props.required\n ? (val: unknown) => Boolean(val) || t(\"sfxInput.field_empty\")\n : undefined\n\n const numberFields = checkNumberField()\n const charFields = checkCharFields()\n\n const ruleList: unknown[] = [required, ...numberFields, ...charFields]\n\n if (props.rules && props.rules.length > 0) ruleList.push(...props.rules)\n\n return ruleList\n})\n\n//endregion\n\n//region Functions\n\nfunction validate() {\n return inputRef.value?.validate()\n}\n\nfunction checkNumberField() {\n const numberRules = []\n\n const type = attrs[\"attr-type\"]\n\n if (type && type === \"numeric\") {\n const minMaxRules = checkMinMax()\n const precisionRules = checkPrecision()\n numberRules.push(minMaxRules, precisionRules)\n }\n\n return numberRules\n}\n\nfunction checkMinMax() {\n const max = attrs[\"maxVal\"]\n const min = attrs[\"minVal\"]\n\n if (max != null && min != null) {\n return (val: string) =>\n isEmptyOrNull(val) ||\n (val >= min && val <= max) ||\n t(\"sfxInput.error_number_between\", { min, max })\n } else if (max != null) {\n return (val: string) =>\n isEmptyOrNull(val) || val <= max || t(\"sfxInput.error_number_max\", { max })\n } else if (min != null) {\n return (val: string) =>\n isEmptyOrNull(val) || val >= min || t(\"sfxInput.error_number_min\", { min })\n }\n}\n\nfunction checkPrecision() {\n const decimals = attrs[\"decimals\"]\n\n if (decimals != null) {\n return (val: string) =>\n isEmptyOrNull(val) ||\n getPrecision(val) ||\n 0 <= decimals ||\n (decimals === 0\n ? t(\"sfxInput.error_number_whole\")\n : t(\"sfxInput.error_number_precision\", { decimals }))\n }\n}\n\nfunction checkCharFields() {\n const charRules = []\n const type = attrs[\"attr-type\"]\n\n if (type && type === \"char\") {\n const allowBlank = attrs[\"allow_blank\"]\n\n if (!allowBlank) {\n charRules.push(\n (val: string) => isEmptyOrNull(val) || val.trim() !== \"\" || t(\"sfxInput.error_char_blanks\")\n )\n }\n }\n\n return charRules\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_unref(QInput), _mergeProps({\n ref_key: \"inputRef\",\n ref: inputRef,\n outlined: \"\",\n color: \"secondary\",\n rules: rules.value,\n \"no-error-icon\": \"\",\n disable: props.disable\n }, _ctx.$attrs, {\n class: classes.value,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((model).value = $event))\n }), _createSlots({ _: 2 }, [\n (_ctx.$slots.default)\n ? {\n name: \"default\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n key: \"0\"\n }\n : undefined,\n (_ctx.$slots.prepend)\n ? {\n name: \"prepend\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"prepend\")\n ]),\n key: \"1\"\n }\n : undefined,\n (_ctx.$slots.append)\n ? {\n name: \"append\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"append\")\n ]),\n key: \"2\"\n }\n : undefined,\n (_ctx.$slots.before)\n ? {\n name: \"before\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"before\")\n ]),\n key: \"3\"\n }\n : undefined,\n (_ctx.$slots.label)\n ? {\n name: \"label\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"label\")\n ]),\n key: \"4\"\n }\n : undefined,\n (_ctx.$slots.error)\n ? {\n name: \"error\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"error\")\n ]),\n key: \"5\"\n }\n : undefined,\n (_ctx.$slots.hint)\n ? {\n name: \"hint\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"hint\")\n ]),\n key: \"6\"\n }\n : undefined,\n (_ctx.$slots.counter)\n ? {\n name: \"counter\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"counter\")\n ]),\n key: \"7\"\n }\n : undefined,\n (_ctx.$slots.loading)\n ? {\n name: \"loading\",\n fn: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"loading\")\n ]),\n key: \"8\"\n }\n : undefined,\n (_ctx.$slots.after || __props.originalValue)\n ? {\n name: \"after\",\n fn: _withCtx(() => [\n (edited.value)\n ? (_openBlock(), _createBlock(SfxBtnUndo, {\n key: 0,\n \"original-value\": __props.originalValue,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event))\n }, null, 8, [\"original-value\", \"modelValue\"]))\n : _renderSlot(_ctx.$slots, \"after\", { key: 1 })\n ]),\n key: \"9\"\n }\n : undefined\n ]), 1040, [\"rules\", \"disable\", \"class\", \"modelValue\"]))\n}\n}\n\n})","import script from \"./SfxInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxInput.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QField from 'quasar/src/components/field/QField.js';\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QField,QInput});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed, ref, watchEffect } from \"vue\"\nimport SfxInput from \"./SfxInput.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxInputPassword',\n emits: [\"passWrite\"],\n setup(__props, { emit: __emit }) {\n\nconst emit = __emit\n\n// endregion\n\n// region Variables\n\nconst password = ref(\"\")\nconst isHidden = ref(true)\nconst inputType = computed(() => (isHidden.value ? \"password\" : \"text\"))\nconst iconName = computed(() => (isHidden.value ? Icons.SHOW : Icons.HIDE))\nconst iconClass = computed(() => (password.value ? \"text-navy-base\" : \"text-inactive\"))\n\n// endregion\n\n//region Functions\n\nfunction eyeClick() {\n isHidden.value = !isHidden.value\n}\n\n//endregion\n\n//region Setup Code\n\nwatchEffect(() => {\n emit(\"passWrite\", password.value)\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createBlock(SfxInput, {\n modelValue: password.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((password).value = $event)),\n type: inputType.value,\n label: _ctx.$t('sfxInput.password'),\n \"hide-bottom-space\": \"\",\n required: \"\"\n }, {\n append: _withCtx(() => [\n _createVNode(_component_q_icon, {\n name: iconName.value,\n onClick: eyeClick,\n type: \"button\",\n class: _normalizeClass([\"q-field__focusable-action\", iconClass.value])\n }, null, 8, [\"name\", \"class\"])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"type\", \"label\"]))\n}\n}\n\n})","import script from \"./SfxInputPassword.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxInputPassword.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QField from 'quasar/src/components/field/QField.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QIcon,QField});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { computed, ref } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTextarea',\n props: {\n titled: { type: Boolean, default: false },\n},\n setup(__props, { expose: __expose }) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst inputRef = ref(null)\n\nconst classes = computed(() => ({\n \"sfx-textarea--titled\": props.titled,\n}))\n\n//endregion\n\n//region Functions\n\nfunction validate() {\n return inputRef.value?.validate()\n}\n\n//endregion\n\n//region Setup Code\n\n__expose({ validate })\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxInput, {\n ref_key: \"inputRef\",\n ref: inputRef,\n autogrow: \"\",\n class: _normalizeClass([\"sfx-textarea\", classes.value]),\n type: \"textarea\",\n rows: \"1\"\n }, null, 8, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxTextarea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTextarea.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxTextarea from \"src/components/input/SfxTextarea.vue\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\nconst newLine = \"\\n\"\nconst maxLengthTitle = 100\nconst maxLengthDescription = 2048\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTextareaTitled',\n props: {\n title: {\n // Add ability to define required nullable props: https://github.com/vuejs/core/issues/3948\n type: null as unknown as PropType,\n required: true,\n },\n\n description: {\n type: null as unknown as PropType,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:modelValue\", \"update:title\", \"update:description\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst maxLength = maxLengthTitle + maxLengthDescription\n\nconst model = computed({\n get() {\n if (!props.title) return null\n\n let text = props.title\n\n if (props.description) text += \"\\n\" + props.description\n\n return text\n },\n\n set(text) {\n if (text) {\n text = newLineOnTitleMax(text)\n }\n\n emitTitleAndDescription(text)\n },\n})\n\n//endregion\n\n//region Functions\n\nfunction emitTitleAndDescription(text: string | null) {\n let title = null\n let description = null\n\n if (text) {\n const splitText = text.split(newLine)\n title = splitText.shift()\n description = splitText.join(newLine)\n }\n\n emit(\"update:title\", title)\n emit(\"update:description\", description)\n}\n\nfunction newLineOnTitleMax(text: string): string {\n const newLineInBeginning = text.indexOf(newLine) > 0 && text.indexOf(newLine) < maxLengthTitle + 1\n\n if (text.length <= maxLengthTitle || newLineInBeginning) {\n return text\n } else {\n const beginning = text.slice(0, maxLengthTitle)\n const ending = text.slice(maxLengthTitle)\n\n const lastWhiteSpace = beginning.lastIndexOf(\" \")\n\n return lastWhiteSpace >= 0\n ? beginning.slice(0, lastWhiteSpace) + newLine + beginning.slice(lastWhiteSpace) + ending\n : beginning + newLine + ending\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxTextarea, {\n required: \"\",\n titled: \"\",\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event)),\n modelModifiers: { trim: true },\n maxlength: maxLength,\n disable: props.disable\n }, null, 8, [\"modelValue\", \"disable\"]))\n}\n}\n\n})","import script from \"./SfxTextareaTitled.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTextareaTitled.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row q-pb-md text-center text-caption text-fun-label-and-icon justify-around\" }\nconst _hoisted_2 = { class: \"q-mb-sm\" }\nconst _hoisted_3 = { class: \"q-mb-sm\" }\n\nimport SfxIssueBase from \"src/components/issue/SfxIssueBase.vue\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst checkboxSize = \"112px\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxIssueAdditionalRequirements',\n props: {\n isolationChecked: {\n type: Boolean,\n default: false,\n },\n\n shutdownChecked: {\n type: Boolean,\n default: false,\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:isolationChecked\", \"update:shutdownChecked\", \"hide\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ forceHide, forceShow })\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst issueBase = ref()\nconst title = t(\"sfxIssues.title_requirements\")\n\nconst isolationCheckedModel = computed({\n get() {\n return props.isolationChecked\n },\n\n set(value) {\n return emit(\"update:isolationChecked\", value)\n },\n})\n\nconst shutdownCheckedModel = computed({\n get() {\n return props.shutdownChecked\n },\n\n set(value) {\n return emit(\"update:shutdownChecked\", value)\n },\n})\n\nconst promptDiscard = computed(() => Boolean(props.isolationChecked || props.shutdownChecked))\n\n//endregion\n\n//region Functions\n\nfunction hideMenu() {\n shutdownCheckedModel.value = false\n isolationCheckedModel.value = false\n emit(\"hide\")\n}\n\nfunction forceHide() {\n hideMenu()\n issueBase.value?.forceHide()\n}\n\nfunction forceShow() {\n issueBase.value?.forceShow()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n\n return (_openBlock(), _createBlock(SfxIssueBase, {\n ref_key: \"issueBase\",\n ref: issueBase,\n title: _unref(title),\n required: props.required,\n \"prompt-discard\": promptDiscard.value,\n \"info-notification\": \"\",\n onHide: hideMenu\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"sfxIssues.label_isolation\")), 1),\n _createVNode(_component_q_checkbox, {\n modelValue: isolationCheckedModel.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((isolationCheckedModel).value = $event)),\n \"keep-color\": \"\",\n dense: \"\",\n color: \"navy-base\",\n size: checkboxSize,\n class: \"sfx-checkbox\"\n }, null, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"sfxIssues.label_shutdown\")), 1),\n _createVNode(_component_q_checkbox, {\n modelValue: shutdownCheckedModel.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((shutdownCheckedModel).value = $event)),\n \"keep-color\": \"\",\n dense: \"\",\n color: \"navy-base\",\n size: checkboxSize,\n class: \"sfx-checkbox\"\n }, null, 8, [\"modelValue\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"required\", \"prompt-discard\"]))\n}\n}\n\n})","import script from \"./SfxIssueAdditionalRequirements.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxIssueAdditionalRequirements.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCheckbox});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport { QExpansionItem } from \"quasar\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { confirmationDialog } from \"src/util/functions/dialogs\"\nimport { showInfoNotification } from \"src/util/functions/notifications\"\nimport { computed, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxIssueBase',\n props: {\n title: {\n type: String,\n required: true,\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n\n promptDiscard: {\n type: Boolean,\n default: false,\n },\n\n infoNotification: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"show\", \"hide\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ forceHide, forceShow })\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst menuStatus = ref(false)\nconst expansionItem = ref()\nconst forcefullyClosed = ref(false)\n\nconst classes = computed(() => {\n return {\n \"sfx-issue-base-bordered\": menuStatus.value,\n \"sfx-issue-base-required\": props.required,\n }\n})\n\nconst disabledClass = computed(() => {\n return {\n \"sfx-issue-base-disable\": props.disable,\n }\n})\n\nconst expandIcon = computed(() => (menuStatus.value ? Icons.SQUARE_MINUS : Icons.SQUARE_PLUS))\n\n//endregion\n\n//region Functions\n\nfunction showMenu() {\n menuStatus.value = true\n emit(\"show\")\n}\n\nasync function hideMenu() {\n if (!props.promptDiscard || forcefullyClosed.value) {\n emit(\"hide\")\n forcefullyClosed.value = false\n return\n }\n\n const userConfirmed = await confirmationDialog({\n title: t(\"sfxIssues.dialog_title\"),\n content: t(\"sfxIssues.dialog_content\"),\n persistent: true,\n })\n if (userConfirmed) {\n menuStatus.value = false\n emit(\"hide\")\n } else {\n menuStatus.value = true\n }\n\n forcefullyClosed.value = false\n}\n\nfunction forceHide() {\n forcefullyClosed.value = true\n expansionItem.value?.hide()\n}\n\nfunction handleDisableClick() {\n if (props.disable && props.infoNotification)\n showInfoNotification(t(\"sfxIssues.disabled_icon_info_message\"))\n}\n\nfunction forceShow() {\n showMenu()\n expansionItem.value?.show()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_item_section = _resolveComponent(\"q-item-section\")!\n const _component_q_separator = _resolveComponent(\"q-separator\")!\n const _component_q_card = _resolveComponent(\"q-card\")!\n\n return (_openBlock(), _createBlock(_component_q_card, {\n flat: \"\",\n class: _normalizeClass([classes.value, \"sfx-issue-base q-px-md\"]),\n onClick: handleDisableClick\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(QExpansionItem), {\n class: _normalizeClass(disabledClass.value),\n ref_key: \"expansionItem\",\n ref: expansionItem,\n modelValue: menuStatus.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((menuStatus).value = $event)),\n \"expand-icon\": expandIcon.value,\n \"header-class\": \"q-pa-none\",\n \"expand-icon-class\": \"text-primary\",\n \"expand-icon-toggle\": \"\",\n onShow: showMenu,\n onHide: hideMenu\n }, {\n header: _withCtx(({ expanded }) => [\n _createVNode(_component_q_item_section, {\n class: _normalizeClass(expanded ? 'text-subtitle1' : 'text-overline')\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(props.title), 1)\n ]),\n _: 2\n }, 1032, [\"class\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", null, [\n _createVNode(_component_q_separator, {\n class: \"q-mr-none q-ml-none q-mb-lg\",\n inset: \"\"\n }),\n _renderSlot(_ctx.$slots, \"default\")\n ])\n ]),\n _: 3\n }, 8, [\"class\", \"modelValue\", \"expand-icon\"])\n ]),\n _: 3\n }, 8, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxIssueBase.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxIssueBase.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QExpansionItem from 'quasar/src/components/expansion-item/QExpansionItem.js';\nimport QItemSection from 'quasar/src/components/item/QItemSection.js';\nimport QSeparator from 'quasar/src/components/separator/QSeparator.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCard,QExpansionItem,QItemSection,QSeparator});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxIssueBase from \"src/components/issue/SfxIssueBase.vue\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxIssueCorrectiveAction',\n props: {\n modelValue: {\n // Add ability to define required nullable props: https://github.com/vuejs/core/issues/3948\n type: null as unknown as PropType,\n required: true,\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:modelValue\", \"hide\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ forceHide, forceShow })\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst issueBase = ref()\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst title = t(\"sfxIssues.title_action\")\nconst inputLabel = t(\"sfxIssues.label_input_action\")\nconst promptDiscard = computed(() => Boolean(model.value))\n\n//endregion\n\n//region Functions\n\nfunction hideMenu() {\n emit(\"hide\", Boolean(model.value))\n model.value = null\n}\n\nfunction forceHide() {\n hideMenu()\n issueBase.value?.forceHide()\n}\n\nfunction forceShow() {\n issueBase.value?.forceShow()\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxIssueBase, {\n ref_key: \"issueBase\",\n ref: issueBase,\n title: _unref(title),\n required: props.required,\n \"prompt-discard\": promptDiscard.value,\n onHide: hideMenu\n }, {\n default: _withCtx(() => [\n _createVNode(SfxInput, {\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event)),\n label: _unref(inputLabel)\n }, null, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }, 8, [\"title\", \"required\", \"prompt-discard\"]))\n}\n}\n\n})","import script from \"./SfxIssueCorrectiveAction.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxIssueCorrectiveAction.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\n\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport SfxIssueBase from \"src/components/issue/SfxIssueBase.vue\"\nimport { computed, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n// expected value examples: \"4 13:34:36\", \"00:08:05\", null\nconst seconds = \"00\"\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxIssueTimeRequirements',\n props: {\n timeEstimate: {\n type: String,\n default: null,\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:timeEstimate\", \"hide\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ forceHide, forceShow })\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst issueBase = ref()\nconst title = t(\"sfxIssues.title_time_requirements\")\n\nconst days = ref(0)\nconst hoursModel = ref(0)\nconst minutesModel = ref(0)\nconst promptDiscard = computed(() => Boolean(hoursModel.value !== 0 || minutesModel.value !== 0))\n\n//endregion\n\n//region Functions\n\nfunction getTime(time: string) {\n if (time) {\n let data = time.trim()\n let initialDays = 0\n\n // verify the estimated time has any days data\n if (data.includes(\" \")) {\n const split = data.split(\" \")\n initialDays = Number(split[0])\n data = split[1]\n }\n\n // ignoring the seconds as those values doesn't make a significant difference\n const hoursAndMinutes = data.split(\":\")\n hoursModel.value = Number(hoursAndMinutes[0]) + initialDays * 24\n minutesModel.value = Number(hoursAndMinutes[1])\n }\n}\n\nfunction setTime() {\n days.value = 0\n\n // validate the minutes input\n if (minutesModel.value > 59) {\n minutesModel.value = 59\n } else if (minutesModel.value < 0) {\n minutesModel.value = 0\n }\n\n // validate the hours input\n if (hoursModel.value < 0) {\n hoursModel.value = 0\n }\n\n if (hoursModel.value > 24) {\n days.value = Math.floor(hoursModel.value / 24)\n }\n\n const dayCount = String(days.value)\n const hour = String(hoursModel.value % 24).padStart(2, \"0\")\n const minutes = String(minutesModel.value).padStart(2, \"0\")\n\n // adding seconds as 00 to match with the initial date format\n let formattedString = hour.concat(\":\", minutes).concat(\":\", seconds)\n\n if (days.value) formattedString = dayCount.concat(\" \", formattedString)\n\n return formattedString\n}\n\nfunction hideMenu() {\n days.value = 0\n hoursModel.value = 0\n minutesModel.value = 0\n emit(\"hide\")\n}\n\nfunction forceHide() {\n hideMenu()\n issueBase.value?.forceHide()\n}\n\nfunction forceShow() {\n issueBase.value?.forceShow()\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.timeEstimate,\n () => {\n getTime(props.timeEstimate)\n },\n { immediate: true }\n)\n\nwatch(\n () => [hoursModel.value, minutesModel.value],\n () => {\n emit(\"update:timeEstimate\", setTime())\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(SfxIssueBase, {\n ref_key: \"issueBase\",\n ref: issueBase,\n title: _unref(title),\n required: __props.required,\n \"prompt-discard\": promptDiscard.value,\n \"info-notification\": \"\",\n onHide: hideMenu\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(SfxInput, {\n modelValue: hoursModel.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((hoursModel).value = $event)),\n class: \"col-6 q-pr-sm\",\n label: _ctx.$t('sfxIssues.label_hours'),\n type: \"number\",\n min: \"0\"\n }, null, 8, [\"modelValue\", \"label\"]),\n _createVNode(SfxInput, {\n modelValue: minutesModel.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((minutesModel).value = $event)),\n class: \"col-6 q-pl-sm\",\n label: _ctx.$t('sfxIssues.label_minutes'),\n type: \"number\",\n min: \"0\",\n max: \"59\"\n }, null, 8, [\"modelValue\", \"label\"])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"required\", \"prompt-discard\"]))\n}\n}\n\n})","import script from \"./SfxIssueTimeRequirements.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxIssueTimeRequirements.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode, createBlock as _createBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"row items-center bg-white\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"q-pr-sm\"\n}\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = {\n key: 0,\n class: \"text-body1\"\n}\n\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxTrueCount from \"src/components/tooltip/SfxTrueCount.vue\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { NamedManagerPath } from \"src/util/enums/namedPaths\"\nimport { NavigationAction } from \"src/util/enums/topNavigation\"\nimport {\n BreadcrumbCount,\n BreadcrumbHTML,\n Breadcrumbs,\n BreadcrumbText,\n} from \"src/util/types/components/sfxBreadcrumb\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport { useRouter } from \"vue-router\"\n\n//region Props and Emits\n\ntype AllBreadcrumbs = BreadcrumbHTML | BreadcrumbText | BreadcrumbCount\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxBreadcrumbs',\n props: {\n breadcrumbs: {\n type: Array as PropType,\n required: true,\n },\n\n context: {\n type: String,\n },\n\n navigationAction: {\n type: Number as PropType,\n default: undefined,\n },\n\n isDialog: Boolean,\n},\n emits: [\"close\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst crumbs = computed(() => props.breadcrumbs)\n\nconst actionIcon = computed(() => {\n switch (props.navigationAction) {\n case NavigationAction.HISTORY_BACK:\n return Icons.CHEVRON_LEFT\n case NavigationAction.CLOSE:\n return Icons.CLOSE_LARGE\n default:\n return null\n }\n})\n\nconst iconStyle = { \"margin-top\": \"-12px\" }\n\nconst { t } = useI18n()\nconst router = useRouter()\n\n//endregion\n\n//region Functions\n\nfunction isBreadcrumbHTML(breadcrumb: AllBreadcrumbs): breadcrumb is BreadcrumbHTML {\n return \"html\" in breadcrumb\n}\n\nfunction isBreadcrumbText(breadcrumb: AllBreadcrumbs): breadcrumb is BreadcrumbText {\n return \"text\" in breadcrumb\n}\n\nfunction isBreadcrumbCount(breadcrumb: AllBreadcrumbs): breadcrumb is BreadcrumbCount {\n return \"current\" in breadcrumb && \"total\" in breadcrumb && \"entity\" in breadcrumb\n}\n\n/**\n * Determines the class (color of text) based on whether it is a link and if the text should be highlighted.\n * Text highlight takes precedence over the text being a link.\n *\n * @param link\n * @param highlight\n */\nfunction getTextColorClass(link: boolean, highlight?: boolean) {\n const highlightClass = \"text-info\"\n const normalTextClass = \"text-navy-base\"\n\n if (link) {\n if (highlight === undefined || highlight) {\n return highlightClass\n } else if (!highlight) {\n return normalTextClass\n }\n } else if (highlight) {\n return highlightClass\n } else {\n return normalTextClass\n }\n}\n\nfunction actionClicked() {\n // If the breadcrumb is in a dialog\n if (props.isDialog) {\n emit(\"close\")\n return\n }\n\n const isSafeExUrl = Boolean(router.options.history.state.back)\n\n if (props.navigationAction === NavigationAction.HISTORY_BACK && !isSafeExUrl) {\n // Do it backwards so that we can go up the chain\n for (let i = crumbs.value.length - 1; i >= 0; i--) {\n const crumb = crumbs.value[i]\n if ((isBreadcrumbHTML(crumb) || isBreadcrumbText(crumb)) && crumb.link) {\n return router.push(crumb.link)\n }\n }\n\n // The developer screwed up the breadcrumbs, and it is not possible to go back.\n // This should not happen, but in any case, just trigger history back.\n Log.error({ message: \"Bad routes provided\", data: { routes: crumbs.value } })\n router.back()\n } else if (props.navigationAction === NavigationAction.CLOSE) {\n router.back()\n } else if (isSafeExUrl) {\n router.back()\n } else {\n router.push({ name: NamedManagerPath.WORKSPACE })\n }\n}\n\nfunction getCountText(count: number, total: number, entity: string) {\n const _entity = t(`entity.${entity}`)\n return t(\"sfxBreadcrumbs.entityCount\", { count, total, entity: _entity })\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_breadcrumbs_el = _resolveComponent(\"q-breadcrumbs-el\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_breadcrumbs = _resolveComponent(\"q-breadcrumbs\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (actionIcon.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(SfxBtnIcon, {\n icon: actionIcon.value,\n onClick: actionClicked,\n padding: \"none\"\n }, null, 8, [\"icon\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_q_breadcrumbs, { class: \"text-subtitle1\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(crumbs.value, (breadcrumb, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (isBreadcrumbCount(breadcrumb))\n ? (_openBlock(), _createBlock(_component_q_breadcrumbs_el, { key: 0 }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: getCountText(breadcrumb.current, breadcrumb.total, breadcrumb.entity)\n }, null, 8, _hoisted_3),\n (breadcrumb?.trueTotal)\n ? (_openBlock(), _createBlock(SfxTrueCount, {\n key: 0,\n \"true-total\": breadcrumb?.trueTotal,\n \"tooltip-data\": breadcrumb?.tooltipContent\n }, null, 8, [\"true-total\", \"tooltip-data\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1024))\n : (isBreadcrumbText(breadcrumb))\n ? (_openBlock(), _createBlock(_component_q_breadcrumbs_el, {\n key: 1,\n label: breadcrumb.text,\n to: breadcrumb.link,\n class: _normalizeClass([getTextColorClass(Boolean(breadcrumb.link), breadcrumb.highlight), \"row\"])\n }, {\n default: _withCtx(() => [\n (breadcrumb.icon)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n name: breadcrumb.icon,\n class: \"q-pl-md\",\n size: \"sm\",\n color: \"inactive\",\n style: iconStyle\n }, null, 8, [\"name\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1032, [\"label\", \"to\", \"class\"]))\n : (isBreadcrumbHTML(breadcrumb))\n ? (_openBlock(), _createBlock(_component_q_breadcrumbs_el, { key: 2 }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n innerHTML: breadcrumb.html\n }, null, 8, _hoisted_4)\n ]),\n _: 2\n }, 1024))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128)),\n (props.context)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(props.context), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./SfxBreadcrumbs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxBreadcrumbs.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QBreadcrumbs from 'quasar/src/components/breadcrumbs/QBreadcrumbs.js';\nimport QBreadcrumbsEl from 'quasar/src/components/breadcrumbs/QBreadcrumbsEl.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QBreadcrumbs,QBreadcrumbsEl,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, createBlock as _createBlock, withDirectives as _withDirectives } from \"vue\"\n\nimport { ContextMenuItem } from \"src/util/classes/contextMenuItem\"\nimport { PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxContextMenu',\n props: {\n contextMenuItems: {\n required: true,\n type: Array as PropType>,\n },\n},\n emits: [\"contextSelect\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_item_section = _resolveComponent(\"q-item-section\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_menu = _resolveComponent(\"q-menu\")!\n const _directive_ripple = _resolveDirective(\"ripple\")!\n\n return (_openBlock(), _createBlock(_component_q_menu, {\n \"auto-close\": \"\",\n class: \"sfx-context-menu\",\n fit: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, {\n bordered: \"\",\n separator: false\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.contextMenuItems, (item) => {\n return _withDirectives((_openBlock(), _createBlock(_component_q_item, {\n clickable: \"\",\n key: item.action,\n disable: item.disable,\n onClick: ($event: any) => (emit('contextSelect', item))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_item_section, { avatar: \"\" }, {\n default: _withCtx(() => [\n _createVNode(_component_q_icon, {\n name: item.icon,\n size: \"22px\"\n }, null, 8, [\"name\"])\n ]),\n _: 2\n }, 1024),\n _createVNode(_component_q_item_section, { class: \"text-h5\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(item.content), 1)\n ]),\n _: 2\n }, 1024)\n ]),\n _: 2\n }, 1032, [\"disable\", \"onClick\"])), [\n [_directive_ripple]\n ])\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxContextMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxContextMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QMenu from 'quasar/src/components/menu/QMenu.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport QItemSection from 'quasar/src/components/item/QItemSection.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';import Ripple from 'quasar/src/directives/ripple/Ripple.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QMenu,QList,QItem,QItemSection,QIcon});qInstall(script, 'directives', {Ripple});\n","\n\n\n","import { render } from \"./SfxCardManagerSkeleton.vue?vue&type=template&id=e8b86bfa\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__\nimport QCard from 'quasar/src/components/card/QCard.js';\nimport QSkeleton from 'quasar/src/components/skeleton/QSkeleton.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCard,QSkeleton});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, resolveDirective as _resolveDirective, createBlock as _createBlock, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, withKeys as _withKeys, normalizeClass as _normalizeClass, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"column reverse\" }\n\nimport { QMenu } from \"quasar\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxBtnLink from \"src/components/button/SfxBtnLink.vue\"\nimport SfxInput from \"src/components/input/SfxInput.vue\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { computed, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxSearchBarManager',\n props: {\n term: {\n type: String,\n required: true,\n },\n},\n emits: [\"update:term\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst searchStore = useSearchStore()\nconst menuRef = ref()\nconst searchInput = ref(props.term || \"\")\n\nconst { t } = useI18n()\n\nconst entityName = computed(() => searchStore.getManagerPlaceholderEntity())\nconst inputPlaceholder = t(\"sfxSearch.input_placeholder\", { entityName: entityName.value })\n\nconst searchHistory = computed(() => {\n let list = [...searchStore.getRecentSearch()]\n\n if (searchInput.value && searchInput.value.length >= 3) {\n list = list.filter((i) => i.includes(searchInput.value) && i !== searchInput.value)\n }\n\n return list\n})\n\nconst recentMenuActive = ref(false)\n\nconst searchBarClasses = computed(() => {\n return {\n \"sfx-search-bar__menu-open\": recentMenuActive.value && searchHistory.value.length > 0,\n }\n})\n\n//endregion\n\n//region Functions\n\nfunction searchItemSelected(searchItem: string) {\n searchInput.value = searchItem\n\n emit(\"update:term\", searchItem)\n search()\n}\n\nfunction deleteSearchItem(searchItemIndex: number) {\n try {\n searchStore.removeItemFromRecentSearches(searchItemIndex)\n } catch (error) {\n Log.error({ message: \"Failed to remove item from recent search results.\", error })\n }\n}\n\nfunction deleteAllSearchItems() {\n searchStore.resetSpecificRecentSearch()\n closeMenu()\n}\n\nfunction search() {\n try {\n searchStore.addItemToRecentSearches(searchInput.value)\n searchStore.term = searchInput.value\n } catch (error) {\n Log.error({ message: \"Failed to add item to recent search results.\", error })\n }\n}\n\nfunction openMenu() {\n menuRef.value?.show()\n recentMenuActive.value = true\n}\n\nfunction closeMenu() {\n menuRef.value?.hide()\n recentMenuActive.value = false\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.term,\n (term) => {\n searchInput.value = term\n }\n)\n\nwatch(\n () => searchInput.value,\n (newVal, oldVal) => {\n const newLongEnoughValue = newVal && newVal.length >= 3\n const deletingOldStringToEmpty = oldVal != null && newVal === \"\"\n if (newLongEnoughValue || deletingOldStringToEmpty) search()\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_item_label = _resolveComponent(\"q-item-label\")!\n const _component_q_item_section = _resolveComponent(\"q-item-section\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_separator = _resolveComponent(\"q-separator\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _directive_close_popup = _resolveDirective(\"close-popup\")!\n const _directive_ripple = _resolveDirective(\"ripple\")!\n\n return (_openBlock(), _createBlock(SfxInput, {\n modelValue: searchInput.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((searchInput).value = $event)),\n class: _normalizeClass([\"full-width sfx-search-bar\", searchBarClasses.value]),\n debounce: \"500\",\n clearable: \"\",\n placeholder: _unref(inputPlaceholder),\n onKeydown: _withKeys(search, [\"enter\"]),\n onClear: search,\n onFocus: openMenu,\n \"hide-bottom-space\": \"\"\n }, _createSlots({\n default: _withCtx(() => [\n (searchHistory.value.length > 0)\n ? (_openBlock(), _createBlock(_unref(QMenu), {\n key: 0,\n ref_key: \"menuRef\",\n ref: menuRef,\n modelValue: recentMenuActive.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((recentMenuActive).value = $event)),\n \"no-parent-event\": \"\",\n \"no-focus\": \"\",\n fit: \"\",\n class: \"sfx-search-bar__menu\",\n \"transition-show\": \"jump-down\",\n \"transition-hide\": \"jump-up\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, null, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(searchHistory.value, (searchItem, searchItemIndex) => {\n return _withDirectives((_openBlock(), _createBlock(_component_q_item, {\n key: searchItem,\n clickable: \"\",\n dense: \"\",\n class: \"full-width q-my-xs\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_item_section, {\n onClick: ($event: any) => (searchItemSelected(searchItem))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_item_label, { class: \"ellipsis\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(searchItem), 1)\n ]),\n _: 2\n }, 1024)\n ]),\n _: 2\n }, 1032, [\"onClick\"]),\n _createVNode(_component_q_item_section, { side: \"\" }, {\n default: _withCtx(() => [\n _createVNode(SfxBtnIcon, {\n class: \"sfx-search-bar__menu_delete-icon\",\n icon: _unref(Icons).DELETE,\n padding: \"none\",\n onClick: ($event: any) => (deleteSearchItem(searchItemIndex))\n }, null, 8, [\"icon\", \"onClick\"])\n ]),\n _: 2\n }, 1024)\n ]),\n _: 2\n }, 1024)), [\n [_directive_close_popup],\n [_directive_ripple]\n ])\n }), 128))\n ]),\n _createVNode(_component_q_separator, {\n inset: \"\",\n spaced: \"\"\n }),\n _createVNode(SfxBtnLink, {\n class: \"full-width q-pt-none\",\n dense: \"\",\n onClick: deleteAllSearchItems\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"b\", null, _toDisplayString(_ctx.$t(\"sfxSearch.clear_search_history\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, [\n (!searchInput.value)\n ? {\n name: \"append\",\n fn: _withCtx(() => [\n _createVNode(SfxBtnIcon, {\n class: \"sfx-search-bar__search-button\",\n icon: _unref(Icons).SEARCH,\n padding: \"none\",\n onClick: search\n }, null, 8, [\"icon\"])\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\", \"class\", \"placeholder\"]))\n}\n}\n\n})","import script from \"./SfxSearchBarManager.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxSearchBarManager.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QMenu from 'quasar/src/components/menu/QMenu.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport QItemSection from 'quasar/src/components/item/QItemSection.js';\nimport QItemLabel from 'quasar/src/components/item/QItemLabel.js';\nimport QSeparator from 'quasar/src/components/separator/QSeparator.js';import ClosePopup from 'quasar/src/directives/close-popup/ClosePopup.js';\nimport Ripple from 'quasar/src/directives/ripple/Ripple.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QMenu,QList,QItem,QItemSection,QItemLabel,QSeparator});qInstall(script, 'directives', {ClosePopup,Ripple});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"sfx-table__bottom flex flex-center full-width q-mt-lg\" }\n\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxSelect from \"src/components/select/SfxSelect.vue\"\nimport { TABLE_PAGING_VALUES } from \"src/util/constants/table\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { TableBottom } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref } from \"vue\"\n\n//region Props and Emits\n\nconst pageButtonSize = \"10px\"\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableBottom',\n props: {\n pageData: {\n type: Object as PropType,\n },\n\n currentPage: {\n type: Number,\n },\n\n rowsPerPage: {\n type: Number,\n },\n\n pageSizeList: {\n type: Array as PropType>,\n default: () => TABLE_PAGING_VALUES,\n },\n},\n emits: [\"update:currentPage\", \"update:rowsPerPage\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst pageNumber = computed({\n get() {\n return props.currentPage\n },\n\n set(value) {\n emit(\"update:currentPage\", value)\n },\n})\n\nconst rowsPerPage = computed({\n get() {\n return props.rowsPerPage\n },\n\n set(value) {\n emit(\"update:rowsPerPage\", value)\n },\n})\n\nconst rowSelectOpen = ref(false)\n\nconst rowSelectClass = computed(() => {\n return { \"sfx-table__bottom-select-arrow-open\": rowSelectOpen.value }\n})\n\nconst options = computed(() => props.pageSizeList.filter((v) => v !== rowsPerPage.value).reverse())\n\n//endregion\n\n//region Functions\n\nfunction rowSelectOpened() {\n rowSelectOpen.value = true\n}\n\nfunction rowSelectClosed() {\n rowSelectOpen.value = false\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_pagination = _resolveComponent(\"q-pagination\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).CHEVRON_LEFT,\n disable: props.pageData.isFirstPage,\n onClick: props.pageData.prevPage,\n padding: pageButtonSize\n }, null, 8, [\"icon\", \"disable\", \"onClick\"]),\n _createVNode(_component_q_pagination, {\n modelValue: pageNumber.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((pageNumber).value = $event)),\n class: \"q-px-md\",\n color: \"inactive\",\n \"active-color\": \"none\",\n \"active-text-color\": \"navy-base\",\n \"active-design\": \"flat\",\n max: props.pageData.pagesNumber,\n \"max-pages\": 6,\n \"boundary-numbers\": \"\"\n }, null, 8, [\"modelValue\", \"max\"]),\n _createVNode(SfxBtnOutline, {\n icon: _unref(Icons).CHEVRON_RIGHT,\n disable: props.pageData.isLastPage,\n onClick: props.pageData.nextPage,\n padding: pageButtonSize\n }, null, 8, [\"icon\", \"disable\", \"onClick\"]),\n _createVNode(SfxSelect, {\n class: \"q-ml-md sfx-table__bottom-select-value\",\n \"popup-content-class\": \"sfx-table__bottom-select-list\",\n modelValue: rowsPerPage.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((rowsPerPage).value = $event)),\n options: options.value,\n \"hide-dropdown-icon\": \"\",\n dense: \"\",\n \"menu-anchor\": \"bottom left\",\n \"menu-self\": \"bottom left\",\n onPopupShow: rowSelectOpened,\n onPopupHide: rowSelectClosed\n }, {\n after: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([rowSelectClass.value, \"sfx-table__bottom-select-arrow text-subtitle2 text-navy-base\"])\n }, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).CHEVRON_UP,\n size: \"25px\",\n class: \"q-mr-xs\"\n }, null, 8, [\"name\"]),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"sfxTable.object_page\")), 1)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"options\"])\n ]))\n}\n}\n\n})","import script from \"./SfxTableBottom.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableBottom.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QPagination from 'quasar/src/components/pagination/QPagination.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QPagination,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\nconst _hoisted_2 = { class: \"line-clamp ellipsis q-px-md sfx-table__td-text\" }\n\nimport { ColumnAlignment, StringOrFunction } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref, watch } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTd',\n props: {\n text: [String, Number, Boolean, Promise],\n\n emptyText: [String, Function] as PropType,\n\n align: {\n type: String as PropType,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst textValue = ref()\nconst textClass = computed(() => (textValue.value != null ? \"text-body2\" : \"text-no-value\"))\nconst emptyTextValue = computed(() => {\n if (!props.emptyText) return\n else if (typeof props.emptyText === \"function\") return props.emptyText()\n else return props.emptyText\n})\n\n// Set the default alignment to be center\nconst columnAlignmentClass = computed(() => `text-${props.align || \"center\"}`)\nconst columnCustomClasses = computed(() => [textClass.value, columnAlignmentClass.value])\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.text,\n async (val) => {\n textValue.value = await Promise.resolve(val)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, {\n class: _normalizeClass([\"sfx-table__td\", columnCustomClasses.value])\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"prepend\"),\n (textValue.value != null)\n ? _renderSlot(_ctx.$slots, \"value\", { key: 0 }, () => [\n _createTextVNode(_toDisplayString(textValue.value), 1)\n ])\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(emptyTextValue.value || _ctx.$t(\"sfxTable.empty_no_value\")), 1)\n ], 64)),\n _renderSlot(_ctx.$slots, \"append\")\n ])\n ])\n ]),\n _: 3\n }, 8, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxTableTd.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTd.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"row no-wrap\" }\nconst _hoisted_2 = { class: \"flex flex-center fit\" }\nconst _hoisted_3 = { class: \"q-px-md items-center line-clamp ellipsis\" }\n\nimport { AxiosError, isAxiosError } from \"axios\"\nimport { Log } from \"src/util/classes/log\"\nimport { IMG_PLACEHOLDER_SM } from \"src/util/constants/files\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport {\n getAttachmentContent,\n getAttachmentContextFromEntityPage,\n getAttachmentData,\n getFirstImageAttachment,\n} from \"src/util/functions/attachments\"\nimport {\n fetchAttachmentsListForEntity,\n getAttachmentForEntity,\n} from \"src/util/functions/entityData\"\nimport { RowData, TableImage } from \"src/util/types/components/sfxTable\"\nimport { Attachment } from \"src/util/types/dataModels/attachment\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxTooltip from \"../tooltip/SfxTooltip.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTdImage',\n props: {\n uniqueColumn: {\n type: [String, Function],\n required: true,\n },\n\n text: [String, Number],\n\n image: Object as PropType,\n\n hasIdentifier: Boolean,\n\n imagePlaceholder: String,\n\n entity: Object as PropType,\n\n entityPage: String as PropType,\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst textClass = computed(() => (props.text ? \"text-h6\" : \"text-no-value\"))\n\nconst cellImage = ref()\n\nconst placeholder = computed(() => props.imagePlaceholder ?? IMG_PLACEHOLDER_SM)\n\n//endregion\n\n//region Functions\n\nasync function getAttachmentString(\n attachmentUUID: string,\n entityPage: EntityPages,\n entity: RowData\n) {\n try {\n const attachmentContext = getAttachmentContextFromEntityPage(entityPage, entity)\n\n if (!attachmentContext) return\n\n const entityId: string =\n typeof props.uniqueColumn === \"function\"\n ? props.uniqueColumn(entity)\n : entity[props.uniqueColumn as \"string\"]\n\n let attachment: Attachment | null | undefined = await getAttachmentData(attachmentUUID)\n\n if (!attachment) {\n attachment = await getAttachmentForEntity(attachmentContext, entityId, attachmentUUID)\n }\n\n if (attachment) {\n return getAttachmentContent(attachment, attachmentContext, entityId)\n }\n } catch (error) {\n if (isAxiosError(error) && (error as AxiosError).response?.status === 404) return\n Log.error({ message: \"Failed to fetch attachment in table\", error })\n }\n}\n\nasync function getAttachmentStringFromList(\n attachmentList: string[],\n entityPage: EntityPages,\n entity: RowData\n) {\n try {\n const attachmentContext = getAttachmentContextFromEntityPage(entityPage, entity)\n\n if (!attachmentContext) return\n\n const entityId: string =\n typeof props.uniqueColumn === \"function\"\n ? props.uniqueColumn(entity)\n : entity[props.uniqueColumn as \"string\"]\n\n await fetchAttachmentsListForEntity(attachmentContext, entityId)\n\n const attachment = await getFirstImageAttachment(attachmentList)\n\n if (attachment) {\n return getAttachmentContent(attachment, attachmentContext, entityId)\n }\n } catch (error) {\n if (isAxiosError(error) && (error as AxiosError).response?.status === 404) return\n Log.error({ message: \"Failed to fetch attachment in table\", error })\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.image,\n async (imageSource) => {\n if (imageSource) {\n let imageContent\n\n if (\"url\" in imageSource) {\n imageContent = imageSource.url\n } else if (props.entityPage && props.entity && imageSource.uuid) {\n if (Array.isArray(imageSource.uuid)) {\n imageContent = await getAttachmentStringFromList(\n imageSource.uuid,\n props.entityPage,\n props.entity\n )\n } else {\n imageContent = await getAttachmentString(imageSource.uuid, props.entityPage, props.entity)\n }\n }\n\n cellImage.value = imageContent\n }\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_img = _resolveComponent(\"q-img\")!\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, {\n class: _normalizeClass([\"sfx-table__td sfx-table__td-image text-center\", textClass.value])\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_q_img, {\n src: cellImage.value,\n \"placeholder-src\": placeholder.value,\n fit: \"cover\",\n height: \"100%\"\n }, {\n error: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_2, [\n _createVNode(_component_q_icon, {\n name: _unref(Icons).IMAGE_ERROR,\n class: \"text-quote-text\",\n size: \"35px\"\n }, null, 8, [\"name\"])\n ])\n ]),\n _: 1\n }, 8, [\"src\", \"placeholder-src\"]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(props.text || _ctx.$t(\"sfxTable.empty_no_value\")), 1)\n ]),\n (props.hasIdentifier)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: 0,\n class: \"identify-icon\",\n name: _unref(Icons).IDENTIFY,\n color: \"inactive\",\n size: \"16px\"\n }, {\n default: _withCtx(() => [\n _createVNode(SfxTooltip, {\n data: { text: _unref(t)('sfxTooltip.has_identifier'), isHtml: true }\n }, null, 8, [\"data\"])\n ]),\n _: 1\n }, 8, [\"name\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxTableTdImage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTdImage.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport QImg from 'quasar/src/components/img/QImg.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd,QImg,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row no-wrap\" }\nconst _hoisted_2 = { class: \"row justify-between\" }\nconst _hoisted_3 = { class: \"column text-caption text-right sfx-table__td-indicator-values\" }\nconst _hoisted_4 = { class: \"text-navy-base ellipsis\" }\nconst _hoisted_5 = { class: \"text-navy-base ellipsis sfx-table__td-indicator-values-total\" }\nconst _hoisted_6 = { class: \"text-info ellipsis\" }\nconst _hoisted_7 = { class: \"q-px-md items-center line-clamp ellipsis\" }\n\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\nconst INDICATOR_SIZE = \"44px\"\nconst INDICATOR_THICKNESS = 0.37\n\n//endregion\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTdIndicator',\n props: {\n text: [String, Number],\n\n current: {\n type: Number,\n default: 0,\n },\n\n total: {\n type: Number,\n default: 0,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst textClass = computed(() => (props.text ? \"text-h6\" : \"text-no-value\"))\n\nconst circularProgressColor = computed(() => (props.total >= props.current ? \"info\" : \"negative\"))\n\nconst circularProgressClass = computed(() => {\n return { \"text-negative\": props.current > props.total }\n})\n\nconst percentage = computed(() =>\n props.total === 0 ? 0 : Math.round((props.current / props.total) * 100)\n)\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_circular_progress = _resolveComponent(\"q-circular-progress\")!\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, {\n class: _normalizeClass([\"sfx-table__td sfx-table__td-indicator text-center\", textClass.value])\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_q_circular_progress, _mergeProps({\n reverse: \"\",\n class: circularProgressClass.value,\n color: circularProgressColor.value,\n \"track-color\": \"line-and-filler\",\n size: INDICATOR_SIZE,\n thickness: INDICATOR_THICKNESS,\n value: percentage.value\n }, _ctx.$attrs), null, 16, [\"class\", \"color\", \"value\"]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(props.current), 1),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(props.total), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(percentage.value) + \"%\", 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(props.text || _ctx.$t(\"sfxTable.empty_no_value\")), 1)\n ])\n ]),\n _: 1\n }, 8, [\"class\"]))\n}\n}\n\n})","import script from \"./SfxTableTdIndicator.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTdIndicator.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport QCircularProgress from 'quasar/src/components/circular-progress/QCircularProgress.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd,QCircularProgress});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx } from \"vue\"\n\nimport { IconTableRowElement } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxTooltip from \"../tooltip/SfxTooltip.vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTdStatus',\n props: {\n icons: {\n type: Array as PropType>,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\nconst { t } = useI18n()\nconst columnData = computed(() => props.icons)\n\n//endregion\n\n//region Functions\nfunction getColor(icon: IconTableRowElement) {\n return icon.color ?? \"transparent\"\n}\n\nfunction getToolTip(icon: IconTableRowElement): string {\n switch (icon.column) {\n case \"work-order\":\n return t(\"sfxTooltip.work_order\")\n case \"issue\":\n return t(\"sfxTooltip.issue\")\n case \"change-request\":\n return t(\"sfxTooltip.change_request\")\n case \"done\":\n return t(\"sfxTooltip.done\")\n case \"corrective-work\":\n return t(\"sfxTooltip.corrective_work\")\n case \"issue-overdue\":\n return t(\"sfxTooltip.issue_overdue\")\n case \"corrective-work-accepted\":\n return t(\"sfxTooltip.corrective_work_accepted\")\n case \"closed\":\n return t(\"sfxTooltip.closed\")\n }\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, { class: \"sfx-table__td sfx-table__td-status text-center\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(columnData.value, (column, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (!column.ignoreRendering)\n ? (_openBlock(), _createBlock(_component_q_icon, {\n key: index,\n class: \"q-px-xs\",\n name: column.name,\n color: getColor(column),\n size: \"20px\"\n }, {\n default: _withCtx(() => [\n (column.color !== undefined && column.color !== 'transparent')\n ? (_openBlock(), _createBlock(SfxTooltip, {\n key: 0,\n data: { text: getToolTip(column), isHtml: true }\n }, null, 8, [\"data\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1032, [\"name\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 256))\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableTdStatus.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTdStatus.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd,QIcon});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-center\" }\n\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { WorkOrderStateTableRowElement } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTdWorkOrderState',\n props: {\n state: {\n type: String as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst stateChipData = computed(() => {\n switch (props.state) {\n case \"overdue\":\n return {\n label: t(\"sfxTable.state_overdue\"),\n color: \"negative\",\n icon: Icons.WARNING,\n }\n case \"behind\":\n return {\n label: t(\"sfxTable.state_behind\"),\n color: \"warning\",\n icon: Icons.BEHIND,\n }\n case \"resource\":\n return {\n label: t(\"sfxTable.state_resource\"),\n color: \"fun-label-and-icon\",\n icon: Icons.WORK_ORDER_RESOURCE,\n }\n case \"draft\":\n return {\n label: t(\"sfxTable.state_draft\"),\n color: \"disabled-back\",\n }\n case \"in_progress\":\n return {\n label: t(\"sfxTable.state_in_progress\"),\n color: \"fun-label-and-icon\",\n }\n case \"open\":\n return {\n label: t(\"sfxTable.state_open\"),\n color: \"fun-label-and-icon\",\n }\n case \"complete\":\n return {\n label: t(\"sfxTable.state_complete\"),\n color: \"positive\",\n icon: Icons.WORK_ORDER_COMPLETED,\n }\n case \"planned\":\n return {\n label: t(\"sfxTable.state_planned\"),\n color: \"fun-label-and-icon\",\n }\n case \"complete_closed\":\n return {\n label: t(\"sfxTable.state_closed\"),\n color: \"blue-900\",\n icon: Icons.WORK_ORDER_COMPLETED,\n }\n case \"closed\":\n return {\n label: t(\"sfxTable.state_closed\"),\n color: \"inactive\",\n icon: Icons.WORK_ORDER_CLOSED_UNCOMPLETED,\n }\n default:\n return {\n label: t(\"sfxTable.state_unknown\"),\n color: \"disabled-back\",\n }\n }\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, { class: \"sfx-table__td\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(SfxChip, {\n label: stateChipData.value.label,\n color: stateChipData.value.color,\n \"icon-right\": stateChipData.value.icon,\n \"text-color\": \"white\"\n }, null, 8, [\"label\", \"color\", \"icon-right\"])\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableTdWorkOrderState.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTdWorkOrderState.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-center\" }\n\nimport SfxChip from \"src/components/data-point/SfxChip.vue\"\nimport { WorkStateTableRowElement } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTdWorkState',\n props: {\n state: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst stateLabel = computed(() => {\n switch (props.state.column) {\n case \"unreviewed\":\n return t(\"sfxTable.state_unreviewed\")\n case \"done\":\n return t(\"sfxTable.state_done\")\n case \"accepted\":\n return t(\"sfxTable.state_accepted\")\n case \"rejected\":\n return t(\"sfxTable.state_rejected\")\n default:\n return t(\"sfxTable.state_unknown\")\n }\n})\n\nconst stateColour = computed(() =>\n props.state.column === \"unreviewed\" ? \"states-corrected\" : \"fun-label-and-icon\"\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_td = _resolveComponent(\"q-td\")!\n\n return (_openBlock(), _createBlock(_component_q_td, { class: \"sfx-table__td\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(SfxChip, {\n label: stateLabel.value,\n color: stateColour.value,\n \"text-color\": \"white\"\n }, null, 8, [\"label\", \"color\"])\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableTdWorkState.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTdWorkState.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTd from 'quasar/src/components/table/QTd.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTd});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, Transition as _Transition, withModifiers as _withModifiers, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center no-wrap\" }\n\nimport { TableColumn } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTh',\n props: {\n columns: {\n type: Array as PropType>,\n required: true,\n },\n\n visibleColumns: {\n type: Array as PropType>,\n required: true,\n },\n\n currentColumn: {\n type: Object as PropType,\n required: true,\n },\n\n nonSwitchableColumns: {\n type: Array as PropType>,\n },\n\n disableDropdown: {\n type: Boolean,\n },\n\n currentSearchColumn: {\n type: Object as PropType,\n },\n\n switched: {\n type: Boolean,\n },\n\n currentSearchValue: {\n type: String,\n },\n},\n emits: [\"update:columns\", \"update:visibleColumns\", \"search\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst col = computed(() => props.currentColumn)\nconst colName = computed(() => col.value.label)\n\nconst modelColumns = computed>({\n get() {\n return props.columns\n },\n\n set(value) {\n return emit(\"update:columns\", value)\n },\n})\n\nconst menuColumns = computed(() => {\n let columns = modelColumns.value.filter((col) => !props.nonSwitchableColumns?.includes(col.name))\n\n if (searchInput.value) {\n columns = columns.filter((i) => i.label.toLowerCase().includes(searchInput.value.toLowerCase()))\n }\n\n return columns.sort((a, b) => a.label.localeCompare(b.label))\n})\n\nconst modelVisibleColumns = computed>({\n get() {\n return props.visibleColumns\n },\n\n set(value) {\n return emit(\"update:visibleColumns\", value)\n },\n})\n\nconst searchInput = ref(\"\")\nconst searchInColumnInput = ref(props.currentSearchValue || \"\")\nconst searchLabel = t(\"sfxTable.menu_search\")\nconst noResultsLabel = t(\"sfxTable.menu_none\")\nconst searchInColumnLabel = computed(() =>\n t(\"sfxTable.menu_search_column\", { column: colName.value })\n)\nconst searchInColumn = ref(null)\nconst columnClass = computed(() => {\n return { \"highlight-th\": props.switched }\n})\n\n//endregion\n\n//region Functions\n\nasync function updateCol(newCol: TableColumn) {\n if (newCol.name === col.value.name) return\n\n const visCols = modelVisibleColumns.value\n\n const oldValIndex = visCols.indexOf(col.value.name)\n const newValIndex = visCols.indexOf(newCol.name)\n\n if (newValIndex === -1) {\n visCols[oldValIndex] = newCol.name\n } else {\n const temp = visCols[oldValIndex]\n visCols[oldValIndex] = visCols[newValIndex]\n visCols[newValIndex] = temp\n }\n}\n\nfunction searchValuesInColumn(column: TableColumn) {\n searchInColumn.value = column\n}\n\nfunction blurSearchInColumn() {\n if (!searchInColumnInput.value) {\n searchInColumn.value = null\n emit(\"search\")\n }\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => searchInColumnInput.value,\n (val) => {\n if (val != null) {\n emit(\"search\", searchInColumn.value, val)\n }\n }\n)\n\nwatch(\n () => props.currentSearchColumn,\n (searchCol) => {\n if (searchCol === null || searchCol?.name !== col.value?.name) {\n searchInColumnInput.value = null\n searchInColumn.value = null\n } else {\n searchInColumn.value = searchCol\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.currentSearchValue,\n (searchValue) => {\n if (\n searchValue &&\n searchInColumnInput.value == null &&\n col.value?.name === props.currentSearchColumn?.name\n )\n searchInColumnInput.value = searchValue\n }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n const _component_q_input = _resolveComponent(\"q-input\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_btn_dropdown = _resolveComponent(\"q-btn-dropdown\")!\n const _component_q_th = _resolveComponent(\"q-th\")!\n\n return (_openBlock(), _createBlock(_component_q_th, { class: \"sfx-table__th\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"sfx-table__th-dropdown\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"prevent\",\"stop\"]))\n }, [\n _createVNode(_Transition, {\n duration: \"100\",\n mode: \"out-in\",\n \"enter-active-class\": \"animated fadeIn\",\n \"leave-active-class\": \"animated fadeOut\"\n }, {\n default: _withCtx(() => [\n (searchInColumn.value)\n ? (_openBlock(), _createBlock(_component_q_input, {\n key: 0,\n ref: \"searchInputRef\",\n borderless: \"\",\n autofocus: \"\",\n dense: \"\",\n label: searchInColumnLabel.value,\n class: \"sfx-table__th-menu-search\",\n onBlur: blurSearchInColumn,\n modelValue: searchInColumnInput.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((searchInColumnInput).value = $event)),\n debounce: \"500\"\n }, {\n append: _withCtx(() => [\n _createVNode(_component_q_icon, { name: \"magnifying-glass\" })\n ]),\n _: 1\n }, 8, [\"label\", \"modelValue\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (col.value.switchable)\n ? (_openBlock(), _createBlock(_component_q_btn_dropdown, {\n key: 0,\n flat: \"\",\n unelevated: \"\",\n square: \"\",\n \"no-caps\": \"\",\n label: colName.value,\n split: \"\",\n align: \"left\",\n \"text-color\": \"fun-label-and-icon\",\n \"content-class\": \"sfx-table__th-menu\",\n \"menu-fit\": \"\",\n class: _normalizeClass(columnClass.value),\n \"disable-dropdown\": props.disableDropdown,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (searchValuesInColumn(col.value)))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, null, {\n default: _withCtx(() => [\n _createVNode(_component_q_item, null, {\n default: _withCtx(() => [\n _createVNode(_component_q_input, {\n modelValue: searchInput.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((searchInput).value = $event)),\n borderless: \"\",\n dense: \"\",\n label: _unref(searchLabel),\n class: \"sfx-table__th-menu-search full-width\"\n }, {\n append: _withCtx(() => [\n _createVNode(_component_q_icon, { name: \"magnifying-glass\" })\n ]),\n _: 1\n }, 8, [\"modelValue\", \"label\"])\n ]),\n _: 1\n }),\n (menuColumns.value.length > 0)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(menuColumns.value, (col) => {\n return (_openBlock(), _createBlock(_component_q_item, {\n key: col.name,\n class: _normalizeClass([{\n 'sfx-table__th-selected': modelVisibleColumns.value.includes(col.name),\n }, \"items-center sfx-table__th-text\"]),\n clickable: \"\",\n onClick: ($event: any) => (updateCol(col))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(col.label), 1)\n ]),\n _: 2\n }, 1032, [\"class\", \"onClick\"]))\n }), 128))\n : (_openBlock(), _createBlock(_component_q_item, {\n key: 1,\n class: \"items-center sfx-table__th-text text-italic\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(noResultsLabel)), 1)\n ]),\n _: 1\n }))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"label\", \"class\", \"disable-dropdown\"]))\n : (_openBlock(), _createElementBlock(\"span\", {\n key: 1,\n class: \"sfx-table__th-text full-width ellipsis cursor-pointer\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (searchValuesInColumn(col.value)))\n }, _toDisplayString(colName.value), 1))\n ], 64))\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableTh.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTh.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTh from 'quasar/src/components/table/QTh.js';\nimport QInput from 'quasar/src/components/input/QInput.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QBtnDropdown from 'quasar/src/components/btn-dropdown/QBtnDropdown.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTh,QInput,QIcon,QBtnDropdown,QList,QItem});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"column sfx-table__selection-header q-pl-sm q-pr-md\" }\n\nimport { TABLE_SELECTION_ARROW_SIZE, TABLE_SELECTION_SIZE_PX } from \"src/util/constants/table\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport {\n ReturnRowKey,\n RowData,\n SelectedKeys,\n SelectionOption,\n SelectionOptionFunction,\n} from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableThSelect',\n props: {\n selected: {\n type: Array as PropType,\n },\n\n data: {\n type: Array as PropType,\n required: true,\n },\n\n selectedKeys: {\n type: Object as PropType,\n required: true,\n },\n\n getRowKey: {\n type: Function as PropType,\n required: true,\n },\n\n computedRows: {\n type: Array as PropType,\n },\n\n selectionOptions: {\n type: Array as PropType,\n },\n\n disable: {\n type: Boolean,\n },\n},\n emits: [\"update:selected\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\n// NOTE: Most of the functionality here related to the base QCheckbox,\n// is directly taken from the internal implementation for the header selection in QTable\n\nconst { t } = useI18n()\n\n// The computed rows from QTable is all the rows on the current page\nconst currentPageRows = computed(() => props.computedRows || [])\n\nconst selectedModel = computed>({\n get() {\n return props.selected || []\n },\n\n set(val) {\n emit(\"update:selected\", val)\n },\n})\n\nconst allRowsSelected = computed(\n () =>\n currentPageRows.value.length > 0 &&\n currentPageRows.value.every((row) => props.selectedKeys[props.getRowKey(row)] === true)\n)\n\nconst someRowsSelected = computed(\n () =>\n !allRowsSelected.value &&\n currentPageRows.value.some((row) => props.selectedKeys[props.getRowKey(row)] === true)\n)\n\nconst selectionModel = computed(() => (someRowsSelected.value ? null : allRowsSelected.value))\n\nconst predefinedSelectionOptions: SelectionOption[] = [\n {\n text: t(\"sfxTable.selection_all\"),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n updateSelection: (row: RowData) => true,\n },\n {\n text: t(\"sfxTable.selection_none\"),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n updateSelection: (row: RowData) => false,\n },\n]\n\nconst allSelectionOptions = computed(() => {\n let options: SelectionOption[] = predefinedSelectionOptions\n\n if (props.selectionOptions && props.selectionOptions?.length > 0) {\n options = options.concat(props.selectionOptions)\n }\n\n return options\n})\n\nconst isMenuOpen = ref(false)\n\nconst arrowClass = computed(() => {\n const arrow = \"sfx-table__selection-header-arrow\"\n const rotation = `${arrow}${isMenuOpen.value ? \"-180\" : \"-0\"}`\n const disable = { disabled: props.disable }\n\n return [arrow, rotation, disable]\n})\n\n//endregion\n\n//region Functions\n\nfunction updateCheckboxValue(val: boolean) {\n // We already have some rows marked as selected\n // So we want to force all the rows on the page to get de-selected\n if (someRowsSelected.value) {\n val = false\n }\n\n if (val) {\n selectedModel.value = selectedModel.value.concat(currentPageRows.value)\n } else {\n // De-select only the selected rows from this page\n selectedModel.value = selectedModel.value.filter(\n (row) => !currentPageRows.value.map((i) => props.getRowKey(i)).includes(props.getRowKey(row))\n )\n }\n}\n\nfunction updateSelection(callback: SelectionOptionFunction) {\n selectedModel.value = props.data.filter((i) => callback(i))\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_menu = _resolveComponent(\"q-menu\")!\n const _component_q_icon = _resolveComponent(\"q-icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_q_checkbox, {\n \"model-value\": selectionModel.value,\n \"onUpdate:modelValue\": updateCheckboxValue,\n size: _unref(TABLE_SELECTION_SIZE_PX),\n class: \"sfx-table__checkbox\",\n dense: \"\",\n color: \"secondary\",\n \"checked-icon\": \"fa-solid fa-square\",\n \"indeterminate-icon\": \"fa-solid fa-hyphen\",\n \"unchecked-icon\": \"none\",\n disable: props.disable\n }, null, 8, [\"model-value\", \"size\", \"disable\"]),\n _createVNode(_component_q_icon, {\n name: _unref(Icons).EXPAND,\n size: _unref(TABLE_SELECTION_ARROW_SIZE),\n class: _normalizeClass(arrowClass.value)\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_menu, {\n modelValue: isMenuOpen.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((isMenuOpen).value = $event)),\n anchor: \"bottom right\",\n self: \"top right\",\n offset: [0, 10],\n \"auto-close\": \"\",\n class: \"sfx-table__selection-menu\",\n target: !props.disable\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, { class: \"column q-pa-md gap-md\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(allSelectionOptions.value, (entry, index) => {\n return (_openBlock(), _createBlock(_component_q_item, {\n key: index,\n class: \"sfx-table__selection-menu-item text-navy-base text-body1\",\n clickable: \"\",\n onClick: ($event: any) => (updateSelection(entry.updateSelection))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(entry.text), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"modelValue\", \"target\"])\n ]),\n _: 1\n }, 8, [\"name\", \"size\", \"class\"])\n ]))\n}\n}\n\n})","import script from \"./SfxTableThSelect.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableThSelect.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QIcon from 'quasar/src/components/icon/QIcon.js';\nimport QMenu from 'quasar/src/components/menu/QMenu.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QCheckbox,QIcon,QMenu,QList,QItem});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"full-width\" }\n\nimport { QTable, QTableProps } from \"quasar\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport { TABLE_COLUMN_STATUS } from \"src/util/constants/table\"\nimport { RowData, StatusColumnNames, StatusSortColumn } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableThStatus',\n props: {\n pagination: {\n type: Object as PropType,\n required: true,\n },\n\n table: {\n type: Object as PropType,\n required: true,\n },\n\n statusColumns: {\n type: Array as PropType,\n required: true,\n },\n},\n emits: [\"update:pagination\", \"update:table\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ sortStatus })\n\n//endregion\n\n//region Variables\n\nconst columnName = TABLE_COLUMN_STATUS\nconst { t } = useI18n()\n\nconst pagination = computed({\n get() {\n return props.pagination\n },\n\n set(value) {\n return emit(\"update:pagination\", value)\n },\n})\n\nconst table = computed({\n get() {\n return props.table\n },\n\n set(value) {\n return emit(\"update:table\", value)\n },\n})\n\nconst statusMenuOpen = ref(false)\nconst statusSortTarget = ref(null)\nconst statusButtonText = t(\"sfxTable.status_dropdown\")\nconst sortByText = t(\"sfxTable.status_sort_by\")\n\nconst statusClass = computed(() => {\n return {\n \"sfx-table__th-status-open\": statusMenuOpen.value,\n \"sfx-table__th-status-active\": !statusMenuOpen.value && pagination.value?.sortBy === columnName,\n }\n})\n\nconst allSortEntries: Map = new Map([\n [\"change-request\", { text: t(\"sfxTable.status_change_request\"), name: \"change-request\" }],\n [\"work-order\", { text: t(\"sfxTable.status_work_order\"), name: \"work-order\" }],\n [\"corrective-work\", { text: t(\"sfxTable.status_corrective_work\"), name: \"corrective-work\" }],\n [\"done\", { text: t(\"sfxTable.status_done\"), name: \"done\" }],\n [\"issue\", { text: t(\"sfxTable.status_issue\"), name: \"issue\" }],\n [\"issue-overdue\", { text: t(\"sfxTable.status_issue_overdue\"), name: \"issue-overdue\" }],\n [\n \"corrective-work-accepted\",\n { text: t(\"sfxTable.status_corrective_work_accepted\"), name: \"corrective-work-accepted\" },\n ],\n [\"closed\", { text: t(\"sfxTable.status_closed\"), name: \"closed\" }],\n])\n\nconst statusSortEntities = computed(() => {\n const sortColumns: StatusSortColumn[] = []\n for (const statusColumn of props.statusColumns) {\n const foundColumn = allSortEntries.get(statusColumn)\n if (foundColumn) {\n sortColumns.push(foundColumn)\n }\n }\n return sortColumns\n})\n\nconst statusMenuActive = computed(\n () => statusMenuOpen.value && pagination.value?.sortBy === columnName\n)\n\n//endregion\n\n//region Functions\n\nasync function triggerStatusSort(target: StatusColumnNames) {\n if (!table.value || !pagination.value) return\n const previousTarget = statusSortTarget.value\n statusSortTarget.value = target\n\n await table.value.sort(columnName)\n\n if (previousTarget && previousTarget !== target) {\n pagination.value.descending = false\n pagination.value.sortBy = columnName\n }\n}\n\nfunction sortStatus(a: RowData, b: RowData, dir: number) {\n const A = a[columnName]\n const B = b[columnName]\n\n let aIcon\n let bIcon\n\n if (A) aIcon = A.find((icon) => icon.column === statusSortTarget.value)\n if (B) bIcon = B.find((icon) => icon.column === statusSortTarget.value)\n\n if (!bIcon || bIcon.sortData === null) return -1\n if (!aIcon || aIcon.sortData === null) return +1\n\n return (aIcon.sortData - bIcon.sortData) * dir\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_menu = _resolveComponent(\"q-menu\")!\n const _component_q_th = _resolveComponent(\"q-th\")!\n\n return (_openBlock(), _createBlock(_component_q_th, {\n onTouchstart: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"stop\"])),\n onClick: _cache[5] || (_cache[5] = _withModifiers(() => {}, [\"prevent\",\"stop\"])),\n class: \"sfx-table__th-status no-pointer-events\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"prevent\",\"stop\"]))\n }, [\n _createVNode(SfxBtnOutline, {\n label: _unref(statusButtonText),\n dense: \"\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"prevent\",\"stop\"])),\n class: _normalizeClass([\"q-px-md all-pointer-events\", statusClass.value])\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_menu, {\n modelValue: statusMenuOpen.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((statusMenuOpen).value = $event)),\n anchor: \"bottom right\",\n self: \"top right\",\n offset: [0, 10],\n \"auto-close\": \"\",\n class: \"sfx-table__th-status-menu\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, {\n dense: \"\",\n padding: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_item, { class: \"text-subtitle2 text-fun-label-and-icon\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(sortByText)), 1)\n ]),\n _: 1\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(statusSortEntities.value, (entry) => {\n return (_openBlock(), _createBlock(_component_q_item, {\n key: entry.name,\n class: _normalizeClass([\"sfx-table__th-status-menu-item text-subtitle1 text-navy-base items-center\", [\n {\n 'sfx-table__th-status-menu-item-active':\n statusMenuActive.value && entry.name === statusSortTarget.value,\n },\n `sfx-table__th-status-menu-item-active-${pagination.value.descending ? 'down' : 'up'}`,\n ]]),\n clickable: \"\",\n onClick: ($event: any) => (triggerStatusSort(entry.name))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_1, _toDisplayString(entry.text), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\", \"class\"]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _: 1\n }, 8, [\"label\", \"class\"])\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableThStatus.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableThStatus.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTh from 'quasar/src/components/table/QTh.js';\nimport QMenu from 'quasar/src/components/menu/QMenu.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTh,QMenu,QList,QItem});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createBlock as _createBlock } from \"vue\"\n\nimport { QTable, QTableProps } from \"quasar\"\nimport SfxBtnOutline from \"src/components/button/SfxBtnOutline.vue\"\nimport SfxRadioSimple from \"src/components/radio/SfxRadioSimple.vue\"\nimport { TABLE_COLUMN_WORK_STATE } from \"src/util/constants/table\"\nimport { RadioItemTable } from \"src/util/types/components/sfxRadioList\"\nimport {\n RowData,\n StateColumnNames,\n WorkStateOptions,\n WorkStateTableRowElement,\n} from \"src/util/types/components/sfxTable\"\nimport { computed, PropType, ref, watch } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\n\n//region Props and Emits\n\nconst defaultSort = \"unreviewed\"\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableThWorkState',\n props: {\n pagination: {\n type: Object as PropType,\n required: true,\n },\n\n table: {\n type: Object as PropType,\n required: true,\n },\n},\n emits: [\"update:pagination\", \"update:table\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n__expose({ sortState })\n\n//endregion\n\n//region Variables\n\nconst columnName = TABLE_COLUMN_WORK_STATE\nconst { t } = useI18n()\n\nconst pagination = computed({\n get() {\n return props.pagination\n },\n\n set(value) {\n return emit(\"update:pagination\", value)\n },\n})\n\nconst table = computed({\n get() {\n return props.table\n },\n\n set(value) {\n return emit(\"update:table\", value)\n },\n})\n\nconst stateMenuOpen = ref(false)\nconst stateButtonText = t(\"sfxTable.state_dropdown\")\nconst sortByText = t(\"sfxTable.state_sort_by\")\nconst sortModel = ref(defaultSort)\n\nconst allSortEntries: RadioItemTable[] = [\n {\n label: t(\"sfxTable.state_latest\"),\n val: \"latest\",\n labelClass: \"sfx-radio-simple-label--italic\",\n },\n { label: t(\"sfxTable.state_unreviewed\"), val: \"unreviewed\" },\n { label: t(\"sfxTable.state_done\"), val: \"done\" },\n { label: t(\"sfxTable.state_accepted\"), val: \"accepted\" },\n { label: t(\"sfxTable.state_rejected\"), val: \"rejected\" },\n {\n label: t(\"sfxTable.state_oldest\"),\n val: \"oldest\",\n labelClass: \"sfx-radio-simple-label--italic\",\n },\n]\n\nconst stateClass = computed(() => {\n return {\n \"sfx-table__th-state-open\": stateMenuOpen.value,\n \"sfx-table__th-state-active\":\n !stateMenuOpen.value &&\n pagination.value?.sortBy === columnName &&\n sortModel.value !== defaultSort,\n }\n})\n\n//endregion\n\n//region Functions\n\nasync function triggerStateSort() {\n if (!table.value || !pagination.value) return\n\n await table.value.sort(columnName)\n\n pagination.value.sortBy = columnName\n}\n\nfunction sortState(a: RowData, b: RowData) {\n const colAState = a[columnName]\n const colBState = b[columnName]\n\n if (!colBState) return -1\n if (!colAState) return +1\n\n switch (sortModel.value) {\n case \"latest\":\n return sortByDate(colAState, colBState, 1)\n case \"unreviewed\":\n return sortByStateOption(colAState, colBState, \"unreviewed\")\n case \"done\":\n return sortByStateOption(colAState, colBState, \"done\")\n case \"accepted\":\n return sortByStateOption(colAState, colBState, \"accepted\")\n case \"rejected\":\n return sortByStateOption(colAState, colBState, \"rejected\")\n case \"oldest\":\n return sortByDate(colAState, colBState, -1)\n default:\n return 0\n }\n}\n\nfunction sortByStateOption(\n stateA: WorkStateTableRowElement,\n stateB: WorkStateTableRowElement,\n stateOption: WorkStateOptions\n) {\n if (stateA.column === stateOption && stateB.column === stateOption) {\n return new Date(stateB.sortData).getTime() - new Date(stateA.sortData).getTime()\n } else {\n return stateB.column === stateOption ? 1 : -1\n }\n}\n\nfunction sortByDate(\n stateA: WorkStateTableRowElement,\n stateB: WorkStateTableRowElement,\n direction: -1 | 1\n) {\n return (new Date(stateB.sortData).getTime() - new Date(stateA.sortData).getTime()) * direction\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => sortModel.value,\n async (newSortVal, oldSortValue) => {\n if (newSortVal && newSortVal !== oldSortValue) {\n await triggerStateSort()\n }\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_item = _resolveComponent(\"q-item\")!\n const _component_q_list = _resolveComponent(\"q-list\")!\n const _component_q_menu = _resolveComponent(\"q-menu\")!\n const _component_q_th = _resolveComponent(\"q-th\")!\n\n return (_openBlock(), _createBlock(_component_q_th, {\n onTouchstart: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[5] || (_cache[5] = _withModifiers(() => {}, [\"stop\"])),\n onClick: _cache[6] || (_cache[6] = _withModifiers(() => {}, [\"prevent\",\"stop\"])),\n class: \"sfx-table__th-state no-pointer-events\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"prevent\",\"stop\"]))\n }, [\n _createVNode(SfxBtnOutline, {\n label: _unref(stateButtonText),\n dense: \"\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"prevent\",\"stop\"])),\n class: _normalizeClass([\"q-px-md all-pointer-events\", stateClass.value])\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_menu, {\n modelValue: stateMenuOpen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((stateMenuOpen).value = $event)),\n anchor: \"bottom right\",\n self: \"top right\",\n offset: [0, 10],\n \"auto-close\": \"\",\n class: \"sfx-table__th-state-menu\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_list, {\n dense: \"\",\n padding: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_q_item, { class: \"text-subtitle2 text-fun-label-and-icon\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(sortByText)), 1)\n ]),\n _: 1\n }),\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(allSortEntries, (entry) => {\n return _createVNode(SfxRadioSimple, {\n key: entry.val,\n options: entry,\n modelValue: sortModel.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((sortModel).value = $event)),\n class: _normalizeClass(entry.labelClass)\n }, null, 8, [\"options\", \"modelValue\", \"class\"])\n }), 64))\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _: 1\n }, 8, [\"label\", \"class\"])\n ])\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxTableThWorkState.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableThWorkState.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QTh from 'quasar/src/components/table/QTh.js';\nimport QMenu from 'quasar/src/components/menu/QMenu.js';\nimport QList from 'quasar/src/components/item/QList.js';\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QTh,QMenu,QList,QItem});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, Fragment as _Fragment, createElementBlock as _createElementBlock, withCtx as _withCtx, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, renderSlot as _renderSlot, renderList as _renderList, normalizeStyle as _normalizeStyle, toDisplayString as _toDisplayString, withModifiers as _withModifiers, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex q-gutter-lg q-mt-xs q-pl-sm\"\n}\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"th\", { class: \"q-pa-none\" }, null, -1)\nconst _hoisted_4 = { class: \"full-width q-mt-xl\" }\n\nimport { QTable, QTableProps } from \"quasar\"\nimport SfxBtnIcon from \"src/components/button/SfxBtnIcon.vue\"\nimport SfxEmptyPageManager from \"src/components/empty/SfxEmptyPageManager.vue\"\nimport SfxSearchBarManager from \"src/components/search/SfxSearchBarManager.vue\"\nimport SfxCardManagerSkeleton from \"src/components/table/SfxCardManagerSkeleton.vue\"\nimport SfxTableBottom from \"src/components/table/SfxTableBottom.vue\"\nimport SfxTableTd from \"src/components/table/SfxTableTd.vue\"\nimport SfxTableTdImage from \"src/components/table/SfxTableTdImage.vue\"\nimport SfxTableTdIndicator from \"src/components/table/SfxTableTdIndicator.vue\"\nimport SfxTableTdStatus from \"src/components/table/SfxTableTdStatus.vue\"\nimport SfxTableTdWorkOrderState from \"src/components/table/SfxTableTdWorkOrderState.vue\"\nimport SfxTableTdWorkState from \"src/components/table/SfxTableTdWorkState.vue\"\nimport SfxTableTh from \"src/components/table/SfxTableTh.vue\"\nimport SfxTableThSelect from \"src/components/table/SfxTableThSelect.vue\"\nimport SfxTableThStatus from \"src/components/table/SfxTableThStatus.vue\"\nimport SfxTableThWorkState from \"src/components/table/SfxTableThWorkState.vue\"\nimport SfxTableTrSkeleton from \"src/components/table/SfxTableTrSkeleton.vue\"\nimport router from \"src/router\"\nimport { useConfigurationStore } from \"src/stores/configurationStore\"\nimport { useSearchStore } from \"src/stores/searchStore\"\nimport { Log } from \"src/util/classes/log\"\nimport { EmptyStates } from \"src/util/constants/emptyStates\"\nimport {\n FILTER_COLUMN_SEARCH,\n FILTER_COLUMN_VALUE,\n FILTER_ENTITY_UUID,\n} from \"src/util/constants/filters\"\nimport {\n RIGHT_SIDE_ICON_COLUMN,\n STATUS_COLUMN,\n TABLE_BODY_CELL,\n TABLE_BORDER_SPACING,\n TABLE_COLUMN_IMAGE,\n TABLE_COLUMN_RIGHT_SIDE_ICON,\n TABLE_COLUMN_STATUS,\n TABLE_COLUMN_WORK_ORDER_STATE,\n TABLE_COLUMN_WORK_STATE,\n TABLE_HEADER_CELL,\n TABLE_IMAGE_SIZE,\n TABLE_PAGING_VALUES,\n TABLE_RIGHT_SIDE_ICON_SLOT,\n TABLE_SELECTION_SIZE,\n TABLE_SELECTION_SIZE_PX,\n TABLE_STATUS_ICON_SIZE,\n TABLE_STATUS_PADDING,\n TABLE_WORK_ORDER_STATE_COLUMN_SIZE,\n TABLE_WORK_STATE_COLUMN_SIZE,\n WORK_ORDER_STATE_COLUMN,\n WORK_ORDER_STATE_SORT,\n WORK_STATE_COLUMN,\n} from \"src/util/constants/table\"\nimport { MissingEntityType } from \"src/util/enums/entityType\"\nimport { Icons } from \"src/util/enums/fontAwesomeIcons\"\nimport { tableConfigurationsDialog } from \"src/util/functions/dialogs\"\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { showNotImplementedNotification } from \"src/util/functions/notifications\"\nimport {\n LeftColumn,\n RightColumn,\n RowData,\n SearchInColumn,\n SelectedKeys,\n SelectionOption,\n StatusColumnNames,\n StringOrFunction,\n TableAnimationState,\n TableColumn,\n TableColumnsConfig,\n} from \"src/util/types/components/sfxTable\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, onMounted, onUnmounted, PropType, ref, watch, watchEffect } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport { LocationQuery, useRoute } from \"vue-router\"\n\n// NOTE: The \"no-data\" section spacing (not in the center but a bit below the columns) has been approved by the SA.\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTable',\n props: {\n columns: {\n type: Array as PropType>,\n required: true,\n },\n\n mainColumn: {\n type: [String, Function] as PropType,\n required: true,\n },\n\n visibleColumns: {\n type: Array as PropType>,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n\n data: {\n type: Array as PropType>,\n required: true,\n },\n\n noData: {\n type: Number as PropType,\n required: true,\n },\n\n noMatchingData: {\n type: Number as PropType,\n required: true,\n },\n\n uniqueColumn: {\n type: [String, Function],\n default: \"id\",\n },\n\n mainColumnLabel: {\n type: String,\n },\n\n statusColumnsCount: {\n type: Number,\n default: () => 3,\n },\n\n statusColumnsSort: {\n type: Array as PropType>,\n default: () => [\"issue\", \"work-order\", \"change-request\", \"done\"],\n },\n\n selectionEnabled: {\n type: Boolean,\n default: () => true,\n },\n\n selected: {\n type: Array as PropType>,\n },\n\n enablePreSelectedMode: {\n type: Boolean,\n default: () => false,\n },\n\n enableSelectOnlyMode: {\n type: Boolean,\n default: () => false,\n },\n\n rightSideIcon: {\n type: Boolean,\n default: false,\n },\n\n viewSwitch: {\n type: Boolean,\n default: false,\n },\n\n cardView: {\n type: Boolean,\n default: true,\n },\n\n rowClass: {\n type: [String, Function],\n },\n\n imagePlaceholder: {\n type: String,\n },\n\n loading: {\n type: Boolean,\n default: true,\n },\n\n leftColumn: {\n type: String as PropType,\n default: TABLE_COLUMN_IMAGE,\n },\n\n rightColumn: {\n type: String as PropType,\n default: TABLE_COLUMN_STATUS,\n },\n\n selectionOptions: {\n type: Array as PropType,\n },\n\n pagination: {\n type: Object as PropType,\n },\n\n iconFilter: {\n type: Boolean,\n default: true,\n },\n\n iconFilterDisabled: {\n type: Boolean,\n default: false,\n },\n\n iconUseCharts: {\n type: Boolean,\n default: false,\n },\n\n iconBookmark: {\n type: Boolean,\n default: true,\n },\n\n iconUndo: {\n type: Boolean,\n default: true,\n },\n\n iconRightSideToggle: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\n \"update:selected\",\n \"update:cardView\",\n \"update:pagination\",\n \"row-click\",\n \"row-click-ctrl\",\n \"row-click-middle\",\n],\n setup(__props, { expose: __expose, emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\nconst searchStore = useSearchStore()\nconst configurationStore = useConfigurationStore()\nconst route = useRoute()\n\nconst sfxTable = ref()\nconst sfxTableThStatus = ref()\nconst sfxTableThWorkState = ref()\n\n// This is where all the data in the table is stored.\nconst tableData = ref(props.data)\n\n// Loads the configuration which is marked as \"favourite\".\nconst loadedConfig = ref(\n configurationStore.getCurrentConfiguration.tableBookmarks[props.entity]?.find(\n (mark) => mark.isFavourite\n )\n)\n\nconst rightSideIconColumnName = TABLE_COLUMN_RIGHT_SIDE_ICON\n\n// The number of rows that can be displayed on the table. Using search and filter influences that number.\nconst filteredDataCount = computed(() => sfxTable.value?.computedRowsNumber || 0)\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entity, true))\n\n// Each row has a unique key, which we can identify by seeing what the unique column prop is on the main table\n// This is either a function or a direct string (object param)\n// This simply applies the function and returns back the unique key\nconst getRowKey = computed(() =>\n typeof props.uniqueColumn === \"function\"\n ? props.uniqueColumn\n : (row: RowData) => row[props.uniqueColumn as \"string\"] as \"string\"\n)\n\n//region Columns\n\nconst mainColumn = computed(() => {\n return {\n name: props.leftColumn,\n required: true,\n align: \"left\",\n label: props.mainColumnLabel || \"\",\n field: props.mainColumn,\n sortable: true,\n switchable: false,\n searchable: true,\n }\n})\n\n// All the columns, except for the main and status ones.\nconst columnsModel = ref([...props.columns])\n\n// All the columns + the main and status ones, and conditionally the right side icons\nconst fullColumns = computed(() => {\n const columnList = [mainColumn.value, ...columnsModel.value]\n\n let rightSideColumn\n\n switch (props.rightColumn) {\n case TABLE_COLUMN_STATUS: {\n rightSideColumn = STATUS_COLUMN\n break\n }\n case TABLE_COLUMN_WORK_STATE: {\n rightSideColumn = WORK_STATE_COLUMN\n break\n }\n case TABLE_COLUMN_WORK_ORDER_STATE: {\n rightSideColumn = WORK_ORDER_STATE_COLUMN\n break\n }\n // No default\n }\n\n if (rightSideColumn) {\n columnList.push(rightSideColumn)\n }\n\n if (props.rightSideIcon) {\n columnList.push(RIGHT_SIDE_ICON_COLUMN)\n }\n\n return columnList\n})\n\n// List of all visible columns. Main and status are always visible, so they are not in this list.\n// Even if multiple columns are added to the column list, if they are not in this list, they will not show.\nconst visibleColumnsRef = ref(getInitialColumns())\nconst visibleColumnsModel = computed(() => {\n return props.rightSideIcon\n ? visibleColumnsRef.value.concat(rightSideIconColumnName)\n : visibleColumnsRef.value\n})\n\n// Some columns are not allowed to be switched, and this list contains them.\n// The main and status ones are not switchable by default, so they are not present.\nconst nonSwitchableColumns = computed(() =>\n columnsModel.value.filter((i) => !i.switchable).map((i) => i.name)\n)\n\n//region Column Width\n\n// The images always have a set width, while the rest of the column follows the general column width.\nconst mainColumnWidth = computed(() => columnWidth.value + TABLE_IMAGE_SIZE)\n\nconst rightSideColumnWidth = computed(() => {\n switch (props.rightColumn) {\n case TABLE_COLUMN_STATUS: {\n return statusColumnWidth.value\n }\n case TABLE_COLUMN_WORK_STATE: {\n return workStateColumnWidth.value\n }\n case TABLE_COLUMN_WORK_ORDER_STATE: {\n return workOrderStateColumnWidth.value\n }\n default: {\n return 0\n }\n }\n})\n\n// There are certain # (min 3) of icons in the status column, each of which has its own padding + the columns padding.\nconst statusColumnWidth = computed(() => {\n // We want at least 3 columns, as per Figma designs.\n const numberOfColumns = props.statusColumnsCount < 3 ? 3 : props.statusColumnsCount\n return numberOfColumns * TABLE_STATUS_ICON_SIZE + TABLE_STATUS_PADDING\n})\n\nconst workStateColumnWidth = ref(TABLE_WORK_STATE_COLUMN_SIZE)\nconst workOrderStateColumnWidth = ref(TABLE_WORK_ORDER_STATE_COLUMN_SIZE)\n\n// Based on the width of the table.\nconst totalWidth = ref(0)\nconst columnWidth = computed(() =>\n getColumnWidth(totalWidth.value, props.selectionEnabled, rightSideColumnWidth.value)\n)\n\nconst resizeObserver = new ResizeObserver((entries) => {\n totalWidth.value = entries[0].contentRect.width\n})\n\n//endregion\n\n//endregion\n\n//region Pagination\n\nconst paginationModel = ref(\n props.pagination || {\n sortBy: \"desc\",\n descending: false,\n page: 1,\n rowsPerPage: 10,\n }\n)\n\nconst pageSizeList = computed(() => TABLE_PAGING_VALUES.filter((v) => v <= tableData.value.length))\nconst showPagination = computed(\n () => !canSwitchAndInCardView.value && TABLE_PAGING_VALUES[0] <= filteredDataCount.value\n)\n\n//endregion\n\n//region Selection\n\nconst selectedModel = computed>({\n get() {\n return props.selected || []\n },\n\n set(val) {\n emit(\"update:selected\", val)\n },\n})\n\nconst selectionMode = computed(() => (props.selectionEnabled ? \"multiple\" : \"none\"))\n\nconst showSelectionCheckbox = computed(\n () => props.selectionEnabled && !canSwitchAndInCardView.value\n)\n\nconst selectAllText = computed(() =>\n allFilteredRowsSelected.value\n ? t(\"sfxTable.selection_deselect_all_applicable\")\n : t(\"sfxTable.selection_select_all_applicable\")\n)\n\nconst selectCurrentCount = computed(() =>\n t(\"sfxTable.selection_current_count\", {\n current: selectedModel.value.length,\n entity: translatedEntity.value,\n })\n)\n\n// Essentially a hashmap of each ID together with a set selected flag\nconst selectedKeys = computed(() => {\n const keys: SelectedKeys = {}\n const selectedIds = selectedModel.value.map((i) => getRowKey.value(i))\n\n for (const id of selectedIds) {\n keys[id] = true\n }\n\n return keys\n})\n\nconst allFilteredRowsSelected = computed(\n () =>\n sfxTable.value &&\n sfxTable.value?.filteredSortedRows.length > 0 &&\n sfxTable.value?.filteredSortedRows.every(\n (row) => selectedKeys.value[getRowKey.value(row)] === true\n )\n)\n\n//endregion\n\n//region Filters/Search\n\n// The global search term used in the search bar above the table.\nconst filterTerm = ref(loadedConfig.value?.filterTerm || \"\")\n\n// In which column are we doing the \"inner column search\".\nconst searchInColumn = ref(\n fullColumns.value.find((i) => i.name === loadedConfig.value?.searchInColumn?.columnName) || null\n)\n// What is the value for the \"inner column search\".\nconst searchInColumnTerm = ref(loadedConfig.value?.searchInColumn?.term || null)\n// What is the UUID for \"inner column search\".\nconst searchInColumnUUID = ref(null)\n\n// To save the current table filtered data\nconst currentFilteredData = ref()\n\n// Whether the data is filtered based on the logged in user or not\nconst filteredOnRightSideIcon = ref(false)\n\nconst rightSideToggleIcon = computed(() =>\n filteredOnRightSideIcon.value ? Icons.USER_WITH_HELMET_SOLID : Icons.USER_WITH_HELMET_REGULAR\n)\n\n//endregion\n\n//region Classes and Styles\n\nconst checkboxClass = computed(() => {\n if (props.enableSelectOnlyMode) {\n return \"sfx-table__checkbox-on\"\n } else {\n const checkboxState = selectedModel.value && selectedModel.value.length > 0 ? \"on\" : \"off\"\n return `sfx-table__checkbox-${checkboxState}`\n }\n})\n\nconst topClass = computed(() => {\n return {\n \"sfx-table__selection-top-hidden\":\n selectedModel.value.length === 0 || !showSelectionCheckbox.value,\n }\n})\n\nconst tableClass = computed(\n () => `sfx-table__selection-${props.selectionEnabled ? \"multi\" : \"none\"}`\n)\n\nconst searchBarClass = computed(() => {\n let searchBarClass = \"sfx-table__search-bar-\"\n\n // Show multi only if selection is enabled and in card view, else show single\n\n if (props.selectionEnabled && props.viewSwitch) {\n searchBarClass += isCardView.value ? \"single\" : \"multi\"\n } else {\n searchBarClass += props.selectionEnabled ? \"multi\" : \"single\"\n }\n\n return searchBarClass\n})\n\n// Toggles the \"switch to card mode\" button off, since we are currently in it.\nconst tableViewOffColor = computed(() => (isCardView.value ? \"disabled\" : undefined))\n// Toggles the \"switch to table mode\" button off, since we are currently in it.\nconst cardViewOffColor = computed(() => (isCardView.value ? undefined : \"disabled\"))\n\nconst rowLoadingStyle = computed(() => {\n const selectFieldsSpacing = props.selectionEnabled ? TABLE_SELECTION_SIZE : 8\n return `margin-left: ${selectFieldsSpacing}px`\n})\n\n//endregion\n\n//region States\n\n// A check if there is a current \"in column\" search. This disables the column switch until the search is canceled.\nconst searchingInColumnActive = computed(\n () => Boolean(searchInColumn.value) && Boolean(searchInColumnTerm.value)\n)\n\nconst isCardView = computed({\n get() {\n return props.cardView\n },\n\n set(viewToggle) {\n emit(\"update:cardView\", viewToggle)\n },\n})\n\nconst canSwitchAndInCardView = computed(() => isCardView.value && props.viewSwitch)\n\nconst areColumnsSwitched = computed(() => {\n const preSwitchedColumnNames = (\n loadedConfig.value?.visibleColumns || props.visibleColumns\n ).toString()\n const currentColumnNames = visibleColumnsRef.value.toString()\n\n return preSwitchedColumnNames !== currentColumnNames\n})\n\nconst isFilterChanged = computed(\n () => (loadedConfig.value?.filterTerm || \"\") !== (filterTerm.value || \"\")\n)\n\n// If there is data, then it is not loading. Else, use the loading prop.\nconst isLoading = computed(() => (tableData.value.length > 0 ? false : props.loading))\n\n// If we want to search by \"status\" column, then use the custom provided search functionality.\n// Else set it to undefined, which would use the default method.\nconst customSortStatus = computed(() => {\n let sortFunction\n\n switch (paginationModel.value.sortBy) {\n case TABLE_COLUMN_STATUS: {\n sortFunction = tableSortStatus\n break\n }\n case TABLE_COLUMN_WORK_STATE: {\n sortFunction = tableSortWorkState\n break\n }\n case TABLE_COLUMN_WORK_ORDER_STATE: {\n sortFunction = tableWorkOrderSortState\n break\n }\n // No default\n }\n\n return sortFunction\n})\n\n//endregion\n\n//endregion\n\n//region Lifecycle\n\nonMounted(() => {\n // Starts detecting changes on the size of the table, which would change the total width proxy,\n // and trigger a column recalculation\n if (sfxTable.value) resizeObserver.observe(sfxTable.value?.$el)\n})\n\nonUnmounted(() => {\n resizeObserver.disconnect()\n})\n\n//endregion\n\n//region Functions\n\n//region Columns\n\n/**\n * Loads either the favourite columns from the bookmarks or the default ones from code.\n */\nfunction getInitialColumns(): string[] {\n // We want copies, so that it doesn't mutate the originals.\n return loadedConfig.value ? [...loadedConfig.value.visibleColumns] : [...props.visibleColumns]\n}\n\n/**\n * Calculates the column width by subtracting the amount of hardcoded values based on the arguments provided from the\n * total width of the table from, then it divides it based on the number of visible columns.\n *\n * @param totalWidth\n * @param selectionEnabled\n * @param rightColumnWidth\n */\n\nfunction getColumnWidth(totalWidth: number, selectionEnabled: boolean, rightColumnWidth: number) {\n // Image/indicator and status/state are not part of visible list since they are ALWAYS visible\n const numberOfColumns = visibleColumnsRef.value.length + 2\n\n const columnSpacing = numberOfColumns * TABLE_BORDER_SPACING\n const selectFieldsSpacing = selectionEnabled ? TABLE_SELECTION_SIZE : 0\n\n const remainingWidth =\n totalWidth - TABLE_IMAGE_SIZE - rightColumnWidth - columnSpacing - selectFieldsSpacing\n const columnsNeedingWidth = numberOfColumns - 1 // We already handle the status column\n\n return remainingWidth / columnsNeedingWidth\n}\n\n//endregion\n\n//region Bookmarks\n\n/**\n * Shows the table bookmarks dialog and handles the result from it.\n * If the result (the bookmark which is set to load) is invalid\n * it resets the filters and sets the columns to their default state.\n * If it is a valid result, then sets the filters and columns to those from the result.\n */\nasync function showTableConfigurationsDialog() {\n const searchInColumnVal: SearchInColumn | undefined =\n searchInColumn.value && searchInColumnTerm.value\n ? { columnName: searchInColumn.value.name, term: searchInColumnTerm.value }\n : undefined\n\n const result = await tableConfigurationsDialog(\n visibleColumnsRef.value,\n filterTerm.value.toLowerCase(),\n props.entity,\n searchInColumnVal\n )\n\n if (typeof result !== \"number\") {\n return Log.error({ message: \"Error occurred while fetching data from TableConfigDialog\" })\n }\n\n if (result == -1) {\n filterTerm.value = \"\"\n visibleColumnsRef.value = props.visibleColumns\n } else {\n const savedConfig =\n configurationStore.getCurrentConfiguration.tableBookmarks[props.entity][result]\n\n if (savedConfig) {\n assignSavedConfig(savedConfig)\n }\n }\n}\n\nfunction assignSavedConfig(savedConfig: TableColumnsConfig): void {\n loadedConfig.value = savedConfig\n filterTerm.value = savedConfig.filterTerm\n visibleColumnsRef.value = [...savedConfig.visibleColumns]\n if (savedConfig.searchInColumn) {\n const foundCol = fullColumns.value.find(\n (i) => i.name === savedConfig.searchInColumn?.columnName\n )\n if (foundCol) {\n searchInColumn.value = foundCol\n searchInColumnTerm.value = savedConfig.searchInColumn.term\n }\n }\n}\n\n//endregion\n\n//region Selection\n\nfunction setSelectionAll() {\n if (allFilteredRowsSelected.value) {\n // remove all applicable selections\n selectedModel.value = selectedModel.value.filter(\n (row) =>\n !sfxTable.value?.filteredSortedRows\n .map((i) => getRowKey.value(i))\n .includes(getRowKey.value(row))\n )\n } else {\n // add all applicable selections\n const missingRows = sfxTable.value?.filteredSortedRows.filter(\n (row) => !selectedKeys.value[getRowKey.value(row)]\n )\n\n selectedModel.value = selectedModel.value.concat(missingRows)\n }\n}\n\n//endregion\n\n//region Sorts\n\n/**\n * Triggers the status column sort. It uses the actual sfxTableThStatus exposed functionality,\n * since the column data is there.\n *\n * @param rows\n * @param sortBy\n * @param descending\n */\nfunction tableSortStatus(rows: Array, sortBy: string, descending: boolean) {\n const dir = descending ? 1 : -1\n\n return rows.sort((a, b) => sfxTableThStatus.value?.sortStatus(a, b, dir))\n}\n\n/**\n * Triggers the state column sort. It uses the actual sfxTableThWorkState exposed functionality,\n * since the column data is there.\n *\n * @param rows\n */\nfunction tableSortWorkState(rows: Array) {\n return rows.sort((a, b) => sfxTableThWorkState.value?.sortState(a, b))\n}\n\n/**\n * Triggers the work order state column sort\n *\n * @param rows\n * @param sortBy\n * @param descending\n */\nfunction tableWorkOrderSortState(rows: Array, sortBy: string, descending: boolean) {\n const dir = descending ? 1 : -1\n\n return rows.sort(\n (a, b) =>\n ((WORK_ORDER_STATE_SORT.get(a.workOrderState || \"unknown\") || 0) -\n (WORK_ORDER_STATE_SORT.get(b.workOrderState || \"unknown\") || 0)) *\n dir\n )\n}\n\n//endregion\n\n//region Filter/Search\n\n/**\n * Triggered when we do an \"in column search\". It manually sets the search column and term values, which actives\n * the watchers, which then handle the actual search. Since this is only called directly from the column,\n * it also resets the UUID search, since the users are not able to do so from the in column search field.\n *\n * @param column\n * @param term\n */\nfunction setSearchInColumnTerm(column?: TableColumn, term?: string) {\n if (column && term) {\n searchInColumn.value = column\n searchInColumnTerm.value = term\n } else {\n searchInColumn.value = null\n searchInColumnTerm.value = null\n }\n\n // Triggered from the actual column, no way to specify the UUID\n searchInColumnUUID.value = null\n}\n\n/**\n * Triggers a search in the table data based on provided term.\n * This function would only search for in column marked as searchable.\n * The main column is searchable by default.\n *\n * NOTE: This only allows for synchronous fields.\n *\n * @param rows\n * @param terms\n * @param cols\n * @param getCellValue\n */\nfunction filterMethod(\n rows: readonly RowData[],\n terms: string,\n cols: readonly TableColumn[],\n getCellValue: (col: TableColumn, row: RowData) => unknown\n) {\n const lowerTerms = terms ? terms.toLowerCase() : \"\"\n // We want to search in all columns, not only the visible ones, so we are just going to ignore the cols param.\n const searchableColumns = fullColumns.value.filter((col) => col.searchable)\n const isMatch = (val: string) => {\n const haystack = val === \"undefined\" || val === \"null\" ? \"\" : val.toLowerCase()\n return haystack.includes(lowerTerms)\n }\n\n if (searchableColumns.length > 0) {\n // Field can be only Function, String, undefined, null\n const getRowParam = (col: TableColumn, row: RowData) => row[col.field as \"string\"] // Get field as param\n // If field is a function, use that, otherwise use field as a param\n const valueExtractFn = (col: TableColumn, row: RowData) =>\n typeof col.field === \"function\" ? col.field(row) : getRowParam(col, row)\n\n return rows.filter((row) =>\n searchableColumns.some((col) => {\n // If value is null or undefined, then it sets it to empty string\n const val = String(valueExtractFn(col, row))\n return isMatch(val)\n })\n )\n } else {\n // Based on the source code from quasar\n // Shouldn't ever reach this part, but helpful to be secure\n // This will search all possible columns, regardless if they are searchable or not\n return rows.filter((row) =>\n fullColumns.value.some((col) => {\n const val = String(getCellValue(col, row))\n return isMatch(val)\n })\n )\n }\n}\n\n/**\n * Synchronous search for UUID and/or search term based on the provided column.\n *\n * @param dataList\n * @param field\n * @param column\n * @param term\n * @param idFunc\n * @param uuid\n */\nfunction filterInColumnSync(\n dataList: typeof props.data,\n field: string,\n column: TableColumn,\n term: string | null,\n idFunc?: StringOrFunction,\n uuid?: string | null\n) {\n const dataArray = []\n for (const data of dataList) {\n let addData = false\n\n if (uuid && idFunc) {\n const uuidParam = getUUIDFromFunc(idFunc, data)\n if (uuidParam === uuid) {\n addData = true\n } else {\n // No point continuing since there is no match with UUID\n continue\n }\n }\n\n if (term) {\n let dataParam = data[field]\n if (column.name === TABLE_COLUMN_WORK_ORDER_STATE) {\n // The user enters the search term in the translated language.\n // When we search for the labels we also need to use the translated labels.\n dataParam = t(\"sfxTable.state_\" + dataParam)\n }\n addData = checkStringValue(dataParam, term)\n }\n\n if (addData) dataArray.push(data)\n }\n return dataArray\n}\n\n/**\n * Asynchronous search for UUID and/or search term based on the provided column.\n *\n * @param dataList\n * @param field\n * @param column\n * @param term\n * @param idFunc\n * @param uuid\n */\nasync function filterInColumnAsync(\n dataList: typeof props.data,\n field: (row: unknown) => unknown,\n column: TableColumn,\n term: string | null,\n idFunc?: StringOrFunction,\n uuid?: string | null\n) {\n const dataArray = []\n for (const data of dataList) {\n let addData = false\n\n if (uuid && idFunc) {\n const uuidParam = getUUIDFromFunc(idFunc, data)\n if (uuidParam === uuid) {\n addData = true\n } else {\n // No point continuing since there is no match with UUID\n continue\n }\n }\n\n if (term) {\n const dataParam = await Promise.resolve(field(data))\n addData = checkStringValue(dataParam, term)\n }\n\n if (addData) dataArray.push(data)\n }\n return dataArray\n}\n\n/**\n * Checks if the search term is inside the data provided.\n *\n * @param dataParam\n * @param term\n */\nfunction checkStringValue(dataParam: unknown, term: string): boolean {\n return (\n Boolean(dataParam) &&\n typeof dataParam === \"string\" &&\n dataParam.toLowerCase().includes(term.toLowerCase())\n )\n}\n\nfunction getUUIDFromFunc(idFunc: StringOrFunction, data: RowData) {\n return typeof idFunc === \"string\" ? data[idFunc] : idFunc(data)\n}\n\n/**\n * Extracts the query params, and if they match to the ones we can handle,\n * then it sets the search column and search term and or search UUID.\n * If the searched column is not currently visible, it would display it as the first one after the main.\n * If it is visible, then it would not change the column order.\n *\n * @param params\n */\nasync function handleQueryParamsSearch(params: LocationQuery) {\n const termList = params[FILTER_COLUMN_VALUE]\n const term = Array.isArray(termList) ? termList[0] : termList\n\n const entityUUIDList = params[FILTER_ENTITY_UUID]\n const entityUUID = Array.isArray(entityUUIDList) ? entityUUIDList[0] : entityUUIDList\n\n // If there is nothing to search, then no point continuing\n if (term === null && entityUUID === null) return\n\n const columnList = params[FILTER_COLUMN_SEARCH]\n const columnRaw = Array.isArray(columnList) ? columnList[0] : columnList\n let column = null\n\n for (const col of columnsModel.value) {\n if (col.name === columnRaw) {\n column = col\n break\n }\n }\n\n // Search param does not match any of the columns we have in the table\n if (column === null) return\n\n // Make sure the column we do the search in is actually visible\n handleColumnNotVisible(column)\n\n searchInColumn.value = column\n // If there is no search term, then take the designation of the entity we are looking for\n searchInColumnTerm.value = term || getSearchTermFromUUID(column, entityUUID)\n searchInColumnUUID.value = entityUUID\n}\n\n/**\n * If the searched column is not currently visible, it would display it as the first one after the main.\n * If it is visible, then it would not change the column order.\n *\n * @param column\n */\nfunction handleColumnNotVisible(column: TableColumn) {\n if (visibleColumnsRef.value.includes(column.name)) {\n return\n }\n\n const oldColName = visibleColumnsRef.value[0]\n\n const cols = columnsModel.value\n\n const oldValIndex = cols.findIndex((i) => i.name === oldColName)\n const newValIndex = cols.findIndex((i) => i.name === column.name)\n\n const temp = cols[oldValIndex]\n cols[oldValIndex] = cols[newValIndex]\n cols[newValIndex] = temp\n\n visibleColumnsRef.value[0] = column.name\n\n columnsModel.value = cols\n}\n\n/**\n * Extracts the designation of the entity based on the UUID provided.\n *\n * @param column\n * @param uuid\n */\nfunction getSearchTermFromUUID(column: TableColumn, uuid?: string | null): string | null {\n const idFunc = column.id\n\n if (uuid == null || idFunc == null) return null\n\n const fieldFunc = column.field\n\n for (const data of tableData.value) {\n const uuidParam = getUUIDFromFunc(idFunc, data)\n if (uuidParam === uuid) {\n return typeof fieldFunc === \"string\"\n ? (data[fieldFunc] as string)\n : (fieldFunc(data) as string)\n }\n }\n\n return null\n}\n\nfunction showFilters() {\n showNotImplementedNotification()\n}\n\nfunction toggleRightSideIconColumn() {\n if (!filteredOnRightSideIcon.value) {\n currentFilteredData.value = tableData.value\n tableData.value = tableData.value.filter((i) => i.rightSideIcon)\n filteredOnRightSideIcon.value = true\n } else {\n tableData.value = currentFilteredData.value\n filteredOnRightSideIcon.value = false\n }\n}\n\n//endregion\n\n//region States\n\nfunction toggleViewState(cardsOn: boolean): void {\n isCardView.value = cardsOn\n}\n\n/**\n * Checks if the current columns have been changed index wise\n * from the loaded configuration or the default one if there is no loaded one.\n *\n * @param currentColumn\n */\nfunction isColumnSwitched(currentColumn: TableColumn) {\n const defaultColumnIndex = (loadedConfig.value?.visibleColumns || props.visibleColumns).indexOf(\n currentColumn.name\n )\n const currentColumnIndex = visibleColumnsRef.value.indexOf(currentColumn.name)\n\n return defaultColumnIndex !== currentColumnIndex\n}\n\n/**\n * Resets the columns and filters to their loaded bookmarked ones, or to their defaults, in case there are no loaded.\n */\nfunction undoChanges() {\n // We need to reset the visible columns, since if the column is switched from non-visible, then the list was mutated\n visibleColumnsRef.value = getInitialColumns()\n searchStore.term = loadedConfig.value?.filterTerm || \"\"\n\n // We need to make sure that the in column search is completely removed\n searchInColumn.value = null\n searchInColumnTerm.value = null\n searchInColumnUUID.value = null\n}\n\n//endregion\n\n//region Row Clicks\n\nfunction rowClick(rowKey: string, rowData: RowData) {\n if (props.enablePreSelectedMode) {\n openInNewWindow(rowData)\n } else if (props.enableSelectOnlyMode || selectedModel.value.length > 0) {\n toggleRowSelection(rowData)\n } else {\n if (rowData.link) {\n router.push(rowData.link)\n }\n emit(\"row-click\", rowKey, rowData)\n }\n}\n\n// Enable selection mode + add to selection\nfunction longRowClick(rowData: RowData) {\n toggleRowSelection(rowData)\n}\n\n// Add to selection\nfunction shiftClick(rowKey: string, rowData: RowData) {\n toggleRowSelection(rowData)\n}\n\n// Open in new tab\nfunction ctrlClick(rowKey: string, rowData: RowData) {\n openInNewWindow(rowData)\n\n emit(\"row-click-ctrl\", rowKey, rowData)\n}\n\n// Open in new tab\nfunction middleClick(rowKey: string, rowData: RowData) {\n openInNewWindow(rowData)\n emit(\"row-click-middle\", rowKey, rowData)\n}\n\nfunction openInNewWindow(rowData: RowData) {\n if (rowData.link) {\n window.open(rowData.link, \"_blank\")\n }\n}\n\nfunction toggleRowSelection(rowData: RowData) {\n const index = selectedModel.value.indexOf(rowData)\n\n if (index === -1) {\n // Not in selected values, so add it\n selectedModel.value?.push(rowData)\n } else {\n // Already exists in selected values, so remove it\n selectedModel.value?.splice(index, 1)\n }\n}\n\n//endregion\n\n//region Helpers\n\n/**\n * Allows for specifying individual cell classes.\n * If no custom classes are provided, then it would attempt to apply the row class.\n *\n * @param classes\n * @param row\n */\nfunction handleRowClasses(classes: StringOrFunction, row: RowData): string | undefined {\n if (classes) {\n return typeof classes === \"function\" ? classes(row) : classes\n } else if (props.rowClass) {\n return typeof props.rowClass === \"function\" ? props.rowClass(row) : props.rowClass\n }\n}\n\nfunction handleEmptyText(row: RowData, text?: StringOrFunction) {\n return typeof text === \"function\" ? text(row) : text\n}\n\nfunction getCellSlotNameDefault(column: string) {\n return `${TABLE_BODY_CELL}-${column}-value`\n}\n\nfunction getCellSlotNamePrepend(column: string) {\n return `${TABLE_BODY_CELL}-${column}-prepend`\n}\n\nfunction getCellSlotNameAppend(column: string) {\n return `${TABLE_BODY_CELL}-${column}-append`\n}\n\n// Function is used in dynamic slot, IDE cannot properly detect\nfunction getCellName(column: string) {\n return `${TABLE_BODY_CELL}-${column}`\n}\n\nfunction getHeaderName(column: string) {\n return `${TABLE_HEADER_CELL}-${column}`\n}\n\nfunction getAnimationState(index: number): TableAnimationState {\n const val = index % 3\n\n switch (val) {\n case 0:\n default:\n return \"start\"\n case 1:\n return \"middle\"\n case 2:\n return \"end\"\n }\n}\n\n//endregion\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => searchStore.term,\n\n (value) => {\n filterTerm.value = value ?? \"\"\n }\n)\n\nwatch(\n () => searchStore.domain,\n\n (value) => {\n searchStore.domain = value || \"general\"\n }\n)\n\n// Watch for changes in the in column search/filter\nwatchEffect(async () => {\n const col = searchInColumn.value\n const term = searchInColumnTerm.value\n const uuid = searchInColumnUUID.value\n\n if (col && (term || uuid)) {\n if (term === null && uuid === null) {\n tableData.value = props.data\n } else {\n tableData.value =\n typeof col.field === \"string\"\n ? filterInColumnSync(props.data, col.field, col, term, col.id, uuid)\n : await filterInColumnAsync(props.data, col.field, col, term, col.id, uuid)\n }\n } else {\n tableData.value = props.data\n }\n})\n\n// Watch for query parameters\nwatch(\n [() => route.query, () => isLoading.value],\n async ([queryParams, isDataLoading]) => {\n if (queryParams && !isDataLoading) {\n await handleQueryParamsSearch(queryParams)\n }\n },\n { immediate: true }\n)\n\n// Sometimes the columns are changed async, so we need to trigger this again. F.x. the item attributes.\nwatch(\n [() => props.columns, () => visibleColumnsRef.value],\n ([cols, visCols]) => {\n const colsVal = [...cols]\n\n for (const [i, visColName] of visCols.entries()) {\n const colIndex = colsVal.findIndex((col) => col.name === visColName)\n\n if (colIndex === -1) continue\n\n if (colIndex !== i) {\n // Swap the 2 values\n const temp = colsVal[i]\n colsVal[i] = colsVal[colIndex]\n colsVal[colIndex] = temp\n }\n }\n\n columnsModel.value = colsVal\n },\n { immediate: true, deep: true }\n)\n\nwatch(\n () => paginationModel.value,\n (newPagination) => {\n emit(\"update:pagination\", newPagination)\n }\n)\n\n// Allows for external components to know table row count\n__expose({ filteredDataCount })\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_separator = _resolveComponent(\"q-separator\")!\n const _component_q_badge = _resolveComponent(\"q-badge\")!\n const _component_q_checkbox = _resolveComponent(\"q-checkbox\")!\n const _component_q_td = _resolveComponent(\"q-td\")!\n const _directive_touch_hold = _resolveDirective(\"touch-hold\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"row no-wrap full-width items-center sfx-table-vars sfx-table__search-bar\", searchBarClass.value])\n }, [\n (showSelectionCheckbox.value)\n ? (_openBlock(), _createBlock(SfxTableThSelect, {\n key: 0,\n selected: selectedModel.value,\n \"onUpdate:selected\": _cache[0] || (_cache[0] = ($event: any) => ((selectedModel).value = $event)),\n \"computed-rows\": sfxTable.value?.computedRows,\n data: tableData.value,\n \"selected-keys\": selectedKeys.value,\n \"get-row-key\": getRowKey.value,\n \"selection-options\": props.selectionOptions,\n disable: props.enablePreSelectedMode\n }, null, 8, [\"selected\", \"computed-rows\", \"data\", \"selected-keys\", \"get-row-key\", \"selection-options\", \"disable\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(SfxSearchBarManager, {\n term: filterTerm.value,\n \"onUpdate:term\": _cache[1] || (_cache[1] = ($event: any) => ((filterTerm).value = $event))\n }, null, 8, [\"term\"]),\n (props.iconFilter)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).FILTER,\n disable: props.iconFilterDisabled,\n onClick: showFilters\n }, null, 8, [\"icon\", \"disable\"]),\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders bg-quote-text\"\n })\n ], 64))\n : _createCommentVNode(\"\", true),\n (props.viewSwitch)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).CARD_VIEW,\n color: cardViewOffColor.value,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (toggleViewState(true)))\n }, null, 8, [\"icon\", \"color\"]),\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).TABLE_VIEW,\n color: tableViewOffColor.value,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (toggleViewState(false)))\n }, null, 8, [\"icon\", \"color\"]),\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders bg-quote-text\"\n })\n ], 64))\n : _createCommentVNode(\"\", true),\n (props.iconUseCharts)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).GANTT_CHART,\n class: \"disabled\",\n onClick: _unref(showNotImplementedNotification)\n }, null, 8, [\"icon\", \"onClick\"]),\n _createVNode(SfxBtnIcon, {\n icon: _unref(Icons).TABLE_VIEW\n }, null, 8, [\"icon\"]),\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders bg-quote-text\"\n })\n ], 64))\n : _createCommentVNode(\"\", true),\n (props.iconBookmark)\n ? (_openBlock(), _createBlock(SfxBtnIcon, {\n key: 4,\n icon: _unref(Icons).SAVED_CONFIGURATIONS,\n onClick: showTableConfigurationsDialog\n }, {\n default: _withCtx(() => [\n (areColumnsSwitched.value || (filterTerm.value && isFilterChanged.value))\n ? (_openBlock(), _createBlock(_component_q_badge, {\n key: 0,\n color: \"secondary\",\n class: \"q-ma-sm\",\n floating: \"\",\n rounded: \"\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"icon\"]))\n : _createCommentVNode(\"\", true),\n (props.iconUndo)\n ? (_openBlock(), _createBlock(SfxBtnIcon, {\n key: 5,\n icon: _unref(Icons).UNDO,\n disable: !areColumnsSwitched.value && !isFilterChanged.value,\n onClick: undoChanges\n }, null, 8, [\"icon\", \"disable\"]))\n : _createCommentVNode(\"\", true),\n (props.iconRightSideToggle)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 6 }, [\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders bg-quote-text\"\n }),\n _createVNode(SfxBtnIcon, {\n icon: rightSideToggleIcon.value,\n onClick: toggleRightSideIconColumn\n }, null, 8, [\"icon\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createVNode(_unref(QTable), {\n ref_key: \"sfxTable\",\n ref: sfxTable,\n rows: tableData.value,\n columns: fullColumns.value,\n \"row-key\": props.uniqueColumn,\n \"visible-columns\": visibleColumnsModel.value,\n pagination: paginationModel.value,\n \"onUpdate:pagination\": _cache[26] || (_cache[26] = ($event: any) => ((paginationModel).value = $event)),\n filter: filterTerm.value,\n \"filter-method\": filterMethod,\n selection: selectionMode.value,\n selected: selectedModel.value,\n \"onUpdate:selected\": _cache[27] || (_cache[27] = ($event: any) => ((selectedModel).value = $event)),\n \"sort-method\": customSortStatus.value,\n class: _normalizeClass([tableClass.value, \"sfx-table\"]),\n separator: \"none\",\n \"card-container-class\": \"q-gutter-lg q-pa-sm\",\n grid: canSwitchAndInCardView.value,\n loading: isLoading.value,\n \"hide-no-data\": isLoading.value,\n flat: \"\"\n }, _createSlots({\n loading: _withCtx(() => [\n (canSwitchAndInCardView.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(5, (el) => {\n return _createVNode(SfxCardManagerSkeleton, { key: el })\n }), 64))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n style: _normalizeStyle(rowLoadingStyle.value)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(TABLE_PAGING_VALUES)[0], (_, index) => {\n return (_openBlock(), _createBlock(SfxTableTrSkeleton, {\n key: index,\n \"animation-start\": getAnimationState(index)\n }, null, 8, [\"animation-start\"]))\n }), 128))\n ], 4))\n ]),\n top: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([topClass.value, \"sfx-table__selection-top row gap-sm justify-center full-width\"])\n }, [\n _createElementVNode(\"span\", { innerHTML: selectCurrentCount.value }, null, 8, _hoisted_2),\n _createElementVNode(\"span\", {\n class: \"sfx-table__selection-top-all text-bold cursor-pointer\",\n onClick: setSelectionAll\n }, _toDisplayString(selectAllText.value), 1)\n ], 2)\n ]),\n \"header-selection\": _withCtx(() => []),\n \"body-selection\": _withCtx((tdSelectProps) => [\n (props.enablePreSelectedMode)\n ? (_openBlock(), _createBlock(_component_q_checkbox, {\n key: 0,\n modelValue: tdSelectProps.row.preSelectState,\n \"onUpdate:modelValue\": ($event: any) => ((tdSelectProps.row.preSelectState) = $event),\n disable: \"\",\n size: _unref(TABLE_SELECTION_SIZE_PX),\n class: \"sfx-table__checkbox\",\n dense: \"\",\n \"checked-icon\": \"fa-solid fa-check\",\n \"unchecked-icon\": \"fa-solid fa-x\",\n \"indeterminate-icon\": \"none\"\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"size\"]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"q-pa-none\", checkboxClass.value])\n }, [\n _createVNode(_component_q_checkbox, {\n modelValue: tdSelectProps.selected,\n \"onUpdate:modelValue\": ($event: any) => ((tdSelectProps.selected) = $event),\n size: _unref(TABLE_SELECTION_SIZE_PX),\n class: \"sfx-table__checkbox\",\n dense: \"\",\n color: \"secondary\",\n \"checked-icon\": \"fa-solid fa-square\",\n \"unchecked-icon\": \"none\"\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"size\"])\n ], 2))\n ]),\n \"header-cell-image\": _withCtx((thProps) => [\n _createVNode(SfxTableTh, {\n props: thProps,\n width: mainColumnWidth.value,\n columns: columnsModel.value,\n \"onUpdate:columns\": _cache[4] || (_cache[4] = ($event: any) => ((columnsModel).value = $event)),\n \"current-column\": thProps.col,\n \"visible-columns\": visibleColumnsRef.value,\n \"onUpdate:visibleColumns\": _cache[5] || (_cache[5] = ($event: any) => ((visibleColumnsRef).value = $event)),\n onSearch: setSearchInColumnTerm,\n \"current-search-column\": searchInColumn.value,\n onTouchstart: _cache[6] || (_cache[6] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[7] || (_cache[7] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"props\", \"width\", \"columns\", \"current-column\", \"visible-columns\", \"current-search-column\"])\n ]),\n \"header-cell-indicator\": _withCtx((thProps) => [\n _createVNode(SfxTableTh, {\n props: thProps,\n width: mainColumnWidth.value,\n columns: columnsModel.value,\n \"onUpdate:columns\": _cache[8] || (_cache[8] = ($event: any) => ((columnsModel).value = $event)),\n \"current-column\": thProps.col,\n \"visible-columns\": visibleColumnsRef.value,\n \"onUpdate:visibleColumns\": _cache[9] || (_cache[9] = ($event: any) => ((visibleColumnsRef).value = $event)),\n onSearch: setSearchInColumnTerm,\n \"current-search-column\": searchInColumn.value,\n onTouchstart: _cache[10] || (_cache[10] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[11] || (_cache[11] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"props\", \"width\", \"columns\", \"current-column\", \"visible-columns\", \"current-search-column\"])\n ]),\n \"header-cell\": _withCtx((thProps) => [\n _createVNode(SfxTableTh, {\n props: thProps,\n width: columnWidth.value,\n columns: columnsModel.value,\n \"onUpdate:columns\": _cache[12] || (_cache[12] = ($event: any) => ((columnsModel).value = $event)),\n \"current-column\": thProps.col,\n \"visible-columns\": visibleColumnsRef.value,\n \"onUpdate:visibleColumns\": _cache[13] || (_cache[13] = ($event: any) => ((visibleColumnsRef).value = $event)),\n \"non-switchable-columns\": nonSwitchableColumns.value,\n onSearch: setSearchInColumnTerm,\n \"disable-dropdown\": searchingInColumnActive.value,\n \"current-search-column\": searchInColumn.value,\n \"current-search-value\": searchInColumnTerm.value,\n switched: isColumnSwitched(thProps.col),\n onTouchstart: _cache[14] || (_cache[14] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[15] || (_cache[15] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"props\", \"width\", \"columns\", \"current-column\", \"visible-columns\", \"non-switchable-columns\", \"disable-dropdown\", \"current-search-column\", \"current-search-value\", \"switched\"])\n ]),\n \"header-cell-status\": _withCtx(() => [\n (sfxTable.value)\n ? (_openBlock(), _createBlock(SfxTableThStatus, {\n key: 0,\n width: statusColumnWidth.value,\n ref_key: \"sfxTableThStatus\",\n ref: sfxTableThStatus,\n table: sfxTable.value,\n \"onUpdate:table\": _cache[16] || (_cache[16] = ($event: any) => ((sfxTable).value = $event)),\n pagination: paginationModel.value,\n \"onUpdate:pagination\": _cache[17] || (_cache[17] = ($event: any) => ((paginationModel).value = $event)),\n \"status-columns\": __props.statusColumnsSort\n }, null, 8, [\"width\", \"table\", \"pagination\", \"status-columns\"]))\n : _createCommentVNode(\"\", true)\n ]),\n \"header-cell-workState\": _withCtx(() => [\n (sfxTable.value)\n ? (_openBlock(), _createBlock(SfxTableThWorkState, {\n key: 0,\n width: workStateColumnWidth.value,\n ref_key: \"sfxTableThWorkState\",\n ref: sfxTableThWorkState,\n table: sfxTable.value,\n \"onUpdate:table\": _cache[18] || (_cache[18] = ($event: any) => ((sfxTable).value = $event)),\n pagination: paginationModel.value,\n \"onUpdate:pagination\": _cache[19] || (_cache[19] = ($event: any) => ((paginationModel).value = $event))\n }, null, 8, [\"width\", \"table\", \"pagination\"]))\n : _createCommentVNode(\"\", true)\n ]),\n \"header-cell-workOrderState\": _withCtx((thProps) => [\n _createVNode(SfxTableTh, {\n props: thProps,\n width: workOrderStateColumnWidth.value,\n columns: columnsModel.value,\n \"onUpdate:columns\": _cache[20] || (_cache[20] = ($event: any) => ((columnsModel).value = $event)),\n \"current-column\": thProps.col,\n \"visible-columns\": visibleColumnsRef.value,\n \"onUpdate:visibleColumns\": _cache[21] || (_cache[21] = ($event: any) => ((visibleColumnsRef).value = $event)),\n onSearch: setSearchInColumnTerm,\n \"current-search-column\": searchInColumn.value,\n \"current-search-value\": searchInColumnTerm.value,\n onTouchstart: _cache[22] || (_cache[22] = _withModifiers(() => {}, [\"stop\"])),\n onMousedown: _cache[23] || (_cache[23] = _withModifiers(() => {}, [\"stop\"]))\n }, null, 8, [\"props\", \"width\", \"columns\", \"current-column\", \"visible-columns\", \"current-search-column\", \"current-search-value\"])\n ]),\n [getHeaderName(_unref(rightSideIconColumnName))]: _withCtx(() => [\n _hoisted_3\n ]),\n \"body-cell-image\": _withCtx((tdImageProps) => [\n _withDirectives(_createVNode(SfxTableTdImage, {\n text: tdImageProps.value,\n image: tdImageProps.row.rowImage,\n \"image-placeholder\": props.imagePlaceholder,\n \"has-identifier\": tdImageProps.row.hasIdentifier,\n entity: tdImageProps.row,\n entityPage: props.entity,\n \"unique-column\": props.uniqueColumn,\n class: _normalizeClass(handleRowClasses(tdImageProps.col.classes, tdImageProps.row)),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdImageProps.key, tdImageProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdImageProps.key, tdImageProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdImageProps.key, tdImageProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdImageProps.key, tdImageProps.row)), [\"middle\"])\n }, null, 8, [\"text\", \"image\", \"image-placeholder\", \"has-identifier\", \"entity\", \"entityPage\", \"unique-column\", \"class\", \"onClick\", \"onMouseup\"]), [\n [\n _directive_touch_hold,\n () => longRowClick(tdImageProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ]),\n \"body-cell-indicator\": _withCtx((tdIndicatorProps) => [\n _withDirectives(_createVNode(SfxTableTdIndicator, {\n text: tdIndicatorProps.value,\n current: tdIndicatorProps.row.indicator.current,\n total: tdIndicatorProps.row.indicator.total,\n class: _normalizeClass(handleRowClasses(tdIndicatorProps.col.classes, tdIndicatorProps.row)),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdIndicatorProps.key, tdIndicatorProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdIndicatorProps.key, tdIndicatorProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdIndicatorProps.key, tdIndicatorProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdIndicatorProps.key, tdIndicatorProps.row)), [\"middle\"])\n }, null, 8, [\"text\", \"current\", \"total\", \"class\", \"onClick\", \"onMouseup\"]), [\n [\n _directive_touch_hold,\n () => longRowClick(tdIndicatorProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ]),\n \"body-cell-status\": _withCtx((tdStatusProps) => [\n _withDirectives(_createVNode(SfxTableTdStatus, {\n icons: tdStatusProps.row.status,\n class: _normalizeClass(handleRowClasses(tdStatusProps.col.classes, tdStatusProps.row)),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdStatusProps.key, tdStatusProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdStatusProps.key, tdStatusProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdStatusProps.key, tdStatusProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdStatusProps.key, tdStatusProps.row)), [\"middle\"])\n }, null, 8, [\"icons\", \"class\", \"onClick\", \"onMouseup\"]), [\n [\n _directive_touch_hold,\n () => longRowClick(tdStatusProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ]),\n \"body-cell-workState\": _withCtx((tdWorkStateProps) => [\n _withDirectives(_createVNode(SfxTableTdWorkState, {\n state: tdWorkStateProps.row.workState,\n class: _normalizeClass(handleRowClasses(tdWorkStateProps.col.classes, tdWorkStateProps.row)),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdWorkStateProps.key, tdWorkStateProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdWorkStateProps.key, tdWorkStateProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdWorkStateProps.key, tdWorkStateProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdWorkStateProps.key, tdWorkStateProps.row)), [\"middle\"])\n }, null, 8, [\"state\", \"class\", \"onClick\", \"onMouseup\"]), [\n [\n _directive_touch_hold,\n () => longRowClick(tdWorkStateProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ]),\n \"body-cell-workOrderState\": _withCtx((tdWorkOrderStateProps) => [\n _withDirectives(_createVNode(SfxTableTdWorkOrderState, {\n state: tdWorkOrderStateProps.row.workOrderState,\n class: _normalizeClass(handleRowClasses(tdWorkOrderStateProps.col.classes, tdWorkOrderStateProps.row)),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdWorkOrderStateProps.key, tdWorkOrderStateProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdWorkOrderStateProps.key, tdWorkOrderStateProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdWorkOrderStateProps.key, tdWorkOrderStateProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdWorkOrderStateProps.key, tdWorkOrderStateProps.row)), [\"middle\"])\n }, null, 8, [\"state\", \"class\", \"onClick\", \"onMouseup\"]), [\n [\n _directive_touch_hold,\n () => longRowClick(tdWorkOrderStateProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ]),\n [getCellName(_unref(rightSideIconColumnName))]: _withCtx((rsiProps) => [\n _createVNode(_component_q_td, { class: \"flex flex-center sfx-table__rsi\" }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, _unref(TABLE_RIGHT_SIDE_ICON_SLOT), _normalizeProps(_guardReactiveProps(rsiProps.row)))\n ]),\n _: 2\n }, 1024)\n ]),\n bottom: _withCtx((bottomProps) => [\n (showPagination.value)\n ? (_openBlock(), _createBlock(SfxTableBottom, {\n key: 0,\n \"page-data\": bottomProps,\n \"current-page\": paginationModel.value.page,\n \"onUpdate:currentPage\": _cache[24] || (_cache[24] = ($event: any) => ((paginationModel.value.page) = $event)),\n rowsPerPage: paginationModel.value.rowsPerPage,\n \"onUpdate:rowsPerPage\": _cache[25] || (_cache[25] = ($event: any) => ((paginationModel.value.rowsPerPage) = $event)),\n \"page-size-list\": pageSizeList.value\n }, null, 8, [\"page-data\", \"current-page\", \"rowsPerPage\", \"page-size-list\"]))\n : _createCommentVNode(\"\", true)\n ]),\n \"no-data\": _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n (props.data?.length > 0)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (props.noMatchingData)\n ? (_openBlock(), _createBlock(SfxEmptyPageManager, {\n key: 0,\n missingEntity: _unref(EmptyStates).get(props.noMatchingData)\n }, null, 8, [\"missingEntity\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n (props.noData)\n ? (_openBlock(), _createBlock(SfxEmptyPageManager, {\n key: 0,\n missingEntity: _unref(EmptyStates).get(props.noData)\n }, null, 8, [\"missingEntity\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n ])\n ]),\n _: 2\n }, [\n _renderList(_ctx.$slots, (_, name) => {\n return {\n name: name,\n fn: _withCtx((slotData) => [\n _renderSlot(_ctx.$slots, name, _normalizeProps(_guardReactiveProps(slotData)))\n ])\n }\n }),\n _renderList(props.columns, (col, index) => {\n return {\n name: getCellName(col.name),\n fn: _withCtx((tdProps) => [\n _withDirectives((_openBlock(), _createBlock(SfxTableTd, {\n text: tdProps.value,\n \"empty-text\": handleEmptyText(tdProps.row, tdProps.col.emptyText),\n align: col.align,\n class: _normalizeClass(handleRowClasses(tdProps.col.classes, tdProps.row)),\n style: _normalizeStyle(tdProps.col.style),\n onClick: [\n _withModifiers(($event: any) => (rowClick(tdProps.key, tdProps.row)), [\"exact\"]),\n _withModifiers(($event: any) => (ctrlClick(tdProps.key, tdProps.row)), [\"ctrl\"]),\n _withModifiers(($event: any) => (shiftClick(tdProps.key, tdProps.row)), [\"shift\"])\n ],\n onMouseup: _withModifiers(($event: any) => (middleClick(tdProps.key, tdProps.row)), [\"middle\"])\n }, {\n value: _withCtx(() => [\n _renderSlot(_ctx.$slots, getCellSlotNameDefault(tdProps.col.name), _normalizeProps(_guardReactiveProps({ row: tdProps.row, value: tdProps.value })))\n ]),\n prepend: _withCtx(() => [\n _renderSlot(_ctx.$slots, getCellSlotNamePrepend(tdProps.col.name), _normalizeProps(_guardReactiveProps({ row: tdProps.row, value: tdProps.value })))\n ]),\n append: _withCtx(() => [\n _renderSlot(_ctx.$slots, getCellSlotNameAppend(tdProps.col.name), _normalizeProps(_guardReactiveProps({ row: tdProps.row, value: tdProps.value })))\n ]),\n _: 2\n }, 1032, [\"text\", \"empty-text\", \"align\", \"class\", \"style\", \"onClick\", \"onMouseup\"])), [\n [\n _directive_touch_hold,\n () => longRowClick(tdProps.row),\n void 0,\n { mouse: true }\n ]\n ])\n ])\n }\n })\n ]), 1032, [\"rows\", \"columns\", \"row-key\", \"visible-columns\", \"pagination\", \"filter\", \"selection\", \"selected\", \"sort-method\", \"class\", \"grid\", \"loading\", \"hide-no-data\"])\n ], 64))\n}\n}\n\n})","import script from \"./SfxTable.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTable.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QSeparator from 'quasar/src/components/separator/QSeparator.js';\nimport QBadge from 'quasar/src/components/badge/QBadge.js';\nimport QTable from 'quasar/src/components/table/QTable.js';\nimport QCheckbox from 'quasar/src/components/checkbox/QCheckbox.js';\nimport QTd from 'quasar/src/components/table/QTd.js';import TouchHold from 'quasar/src/directives/touch-hold/TouchHold.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QSeparator,QBadge,QTable,QCheckbox,QTd});qInstall(script, 'directives', {TouchHold});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row gap-sm\" }\nconst _hoisted_2 = { class: \"row items-center gap-sm\" }\nconst _hoisted_3 = { class: \"text-subtitle2\" }\nconst _hoisted_4 = { class: \"text-h5\" }\nconst _hoisted_5 = { class: \"row items-center gap-sm\" }\nconst _hoisted_6 = { class: \"text-h5\" }\nconst _hoisted_7 = { class: \"text-subtitle2\" }\n\nimport { getTranslatedEntityForPage } from \"src/util/functions/entity\"\nimport { EntityPages } from \"src/util/types/dataModels/entityDefinition\"\nimport { computed, PropType } from \"vue\"\nimport { useI18n } from \"vue-i18n\"\nimport SfxTooltip from \"../tooltip/SfxTooltip.vue\"\n\n//region Props and Emits\n\nconst TOGGLE_SIZE = \"16px\"\nconst TOGGLE_PADDING = \"5px 11px\"\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableToggle',\n props: {\n modelValue: {\n type: Boolean,\n required: true,\n },\n\n toDoCount: {\n type: Number,\n required: true,\n },\n\n performedCount: {\n type: Number,\n required: true,\n },\n\n entity: {\n type: String as PropType,\n required: true,\n },\n\n disable: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst { t } = useI18n()\n\nconst isDisplayingToDoEntities = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\nconst toggleToDoClasses = computed(\n () => `sfx-table-toggle__to-do-${isDisplayingToDoEntities.value ? \"on\" : \"off\"}`\n)\n\nconst togglePerformedClasses = computed(\n () => `sfx-table-toggle__performed-${!isDisplayingToDoEntities.value ? \"on\" : \"off\"}`\n)\n\nconst translatedEntity = computed(() => getTranslatedEntityForPage(props.entity, true))\n\nconst toggleToDoLabel = computed(() =>\n t(\"sfxTable.toggle_to_do\", { entity: translatedEntity.value })\n)\nconst togglePerformedLabel = t(\"sfxTable.toggle_performed\")\n\n//endregion\n\n//region Functions\n\nfunction handleToDoClick() {\n isDisplayingToDoEntities.value = true\n}\n\nfunction handlePerformedClick() {\n isDisplayingToDoEntities.value = false\n}\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_btn = _resolveComponent(\"q-btn\")!\n const _component_q_separator = _resolveComponent(\"q-separator\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(toggleToDoLabel.value), 1),\n _createVNode(_component_q_btn, {\n disable: props.disable,\n size: TOGGLE_SIZE,\n padding: TOGGLE_PADDING,\n onClick: handleToDoClick,\n class: _normalizeClass([\"sfx-table-toggle sfx-table-toggle__to-do\", toggleToDoClasses.value])\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(props.toDoCount), 1)\n ]),\n _: 1\n }, 8, [\"disable\", \"class\"]),\n _createVNode(SfxTooltip, {\n data: { text: _unref(t)('sfxTooltip.todo_on_work_order'), isHtml: true }\n }, null, 8, [\"data\"])\n ]),\n _createVNode(_component_q_separator, {\n vertical: \"\",\n inset: \"\",\n class: \"rounded-borders\"\n }),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_q_btn, {\n disable: props.disable,\n size: TOGGLE_SIZE,\n padding: TOGGLE_PADDING,\n onClick: handlePerformedClick,\n class: _normalizeClass([\"sfx-table-toggle sfx-table-toggle__performed\", togglePerformedClasses.value])\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(props.performedCount), 1)\n ]),\n _: 1\n }, 8, [\"disable\", \"class\"]),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(togglePerformedLabel)), 1),\n _createVNode(SfxTooltip, {\n data: { text: _unref(t)('sfxTooltip.performed_on_work_order'), isHtml: true }\n }, null, 8, [\"data\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./SfxTableToggle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableToggle.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QBtn from 'quasar/src/components/btn/QBtn.js';\nimport QSeparator from 'quasar/src/components/separator/QSeparator.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QBtn,QSeparator});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { TableAnimationState } from \"src/util/types/components/sfxTable\"\nimport { computed, PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTableTrSkeleton',\n props: {\n animationStart: {\n type: String as PropType,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\n//region Variables\n\nconst animationClass = computed(() => {\n let className = \"sfx-table__tr-animate-\"\n switch (props.animationStart) {\n case \"start\":\n default:\n className += \"start\"\n break\n case \"middle\":\n className += \"middle\"\n break\n case \"end\":\n className += \"end\"\n break\n }\n\n return className\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"sfx-table__tr sfx-table__tr-animate\", animationClass.value])\n }, null, 2))\n}\n}\n\n})","import script from \"./SfxTableTrSkeleton.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTableTrSkeleton.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, mergeProps as _mergeProps, createBlock as _createBlock, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"column text-body1\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"text-body1 description\"\n}\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = { class: \"sfx-toggle__label\" }\n\nimport { computed } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxToggleSettings',\n props: {\n // Accepts any types\n modelValue: {\n required: true,\n },\n\n description: {\n type: String,\n },\n\n trinary: {\n type: Boolean,\n default: false,\n },\n\n html: {\n type: Boolean,\n default: false,\n },\n\n trueValue: { type: [String, Number, Boolean], default: true },\n\n trueLabel: String,\n\n falseValue: { type: [String, Number, Boolean], default: false },\n\n falseLabel: String,\n\n indeterminateValue: { type: [String, Number, Boolean], default: null },\n\n // Note! When the default state of the trinary toggle must be its indeterminate state\n // and the `indeterminateLabel` prop is used, then `indeterminateValue` cannot be set to `undefined`,\n // because if so, the label is not showing by default.\n indeterminateLabel: String,\n\n hideToggle: {\n type: Boolean,\n default: false,\n },\n},\n emits: [\"update:modelValue\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst model = computed({\n get() {\n return props.modelValue\n },\n\n set(value) {\n return emit(\"update:modelValue\", value)\n },\n})\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _component_q_space = _resolveComponent(\"q-space\")!\n const _component_q_toggle = _resolveComponent(\"q-toggle\")!\n const _component_q_item = _resolveComponent(\"q-item\")!\n\n return (_openBlock(), _createBlock(_component_q_item, { class: \"sfx-toggle items-center\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n (props.description)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, [\n (props.html)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: props.description\n }, null, 8, _hoisted_3))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(props.description), 1))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_5, [\n (props.trueLabel && model.value === props.trueValue)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString(props.trueLabel), 1)\n ], 64))\n : (\n props.trinary && props.indeterminateLabel && model.value === props.indeterminateValue\n )\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(props.indeterminateLabel), 1)\n ], 64))\n : (props.falseLabel && model.value === props.falseValue)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createTextVNode(_toDisplayString(props.falseLabel), 1)\n ], 64))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_q_space),\n (!props.hideToggle)\n ? (_openBlock(), _createBlock(_component_q_toggle, _mergeProps({\n key: 0,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((model).value = $event)),\n \"toggle-indeterminate\": props.trinary,\n \"true-value\": props.trueValue,\n \"false-value\": props.falseValue,\n \"indeterminate-value\": props.indeterminateValue\n }, _ctx.$attrs), null, 16, [\"modelValue\", \"toggle-indeterminate\", \"true-value\", \"false-value\", \"indeterminate-value\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}\n}\n\n})","import script from \"./SfxToggleSettings.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxToggleSettings.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QItem from 'quasar/src/components/item/QItem.js';\nimport QSpace from 'quasar/src/components/space/QSpace.js';\nimport QToggle from 'quasar/src/components/toggle/QToggle.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QItem,QSpace,QToggle});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"sfx-tooltip-text text-body1 text-center relative-position\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"sfx-tooltip-arrow absolute\" }, null, -1)\nconst _hoisted_5 = { class: \"sfx-tooltip-text text-body1 text-center relative-position\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { key: 1 }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"sfx-tooltip-arrow absolute\" }, null, -1)\n\nimport { Platform, QTooltip } from \"quasar\"\nimport { TooltipData, TooltipPosition } from \"src/util/types/components/sfxTooltip\"\nimport { computed, getCurrentInstance, onMounted, onUnmounted, PropType, ref, watch } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTooltip',\n props: {\n data: {\n type: Object as PropType,\n },\n\n position: {\n type: String as PropType,\n default: \"top\",\n },\n\n isOpen: {\n type: null as unknown as PropType,\n },\n},\n emits: [\"update:isOpen\"],\n setup(__props, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\n//endregion\n\n//region Variables\n\nconst arrowLocation = ref()\nconst anchor = ref()\nconst self = ref()\n\nconst model = computed({\n get() {\n return props.isOpen != null ? props.isOpen : null\n },\n\n set(value) {\n return emit(\"update:isOpen\", value)\n },\n})\n\nconst mobileModelRef = ref(false)\n\nconst modelMobile = computed({\n get() {\n // If we have set the isOpen state, use that, else use the internal ref model\n return props.isOpen != null ? props.isOpen : mobileModelRef.value\n },\n\n set(value) {\n // If we have provided isOpen, update it, else, update only the internal ref model\n if (props.isOpen != null) {\n return emit(\"update:isOpen\", value)\n } else {\n mobileModelRef.value = value\n }\n },\n})\n\nconst parentEl = ref()\n\n// We want to be able to detect when the tooltip is currently showing, so that we know when to close it on outside clicks.\n// We cannot make use of the model, since it is updated before the tooltip is shown and closing the tooltip would be immediate.\n// The @show and @hide emits on q-toolbar, however, are triggered after.\n// Due to that fact, we can easily have this small ref and use that for determining when to close the tooltip.\nconst tooltipShown = ref(Platform.is.mobile ? modelMobile.value : model.value)\n\n//endregion\n\n//region Lifecycle\n\nif (Platform.is.mobile) {\n // We want to manually open the tooltip on mobile on click of the parent element.\n // So we get the current instance, then traverse the element tree to the parent and attach a listener to it\n // Once the component dies, we of course remove the listener, so we don't create memory leaks\n\n onMounted(() => {\n const instance = getCurrentInstance()\n parentEl.value = instance?.parent?.subTree.el\n parentEl.value?.addEventListener(\"click\", openTooltipInternally)\n })\n\n onUnmounted(() => {\n parentEl.value?.removeEventListener(\"click\", openTooltipInternally)\n })\n}\n\n//endregion\n\n//region Functions\n\nfunction setTooltipPositionProperties(position: TooltipPosition) {\n switch (position) {\n case \"top\": {\n arrowLocation.value = \"bottom\"\n anchor.value = \"top middle\"\n self.value = \"bottom middle\"\n break\n }\n case \"top-right\": {\n arrowLocation.value = \"bottom-left\"\n anchor.value = \"top right\"\n self.value = \"bottom middle\"\n break\n }\n case \"top-left\": {\n arrowLocation.value = \"bottom-right\"\n anchor.value = \"top left\"\n self.value = \"bottom middle\"\n break\n }\n case \"bottom\": {\n arrowLocation.value = \"top\"\n anchor.value = \"bottom middle\"\n self.value = \"top middle\"\n break\n }\n case \"bottom-right\": {\n arrowLocation.value = \"top-left\"\n anchor.value = \"bottom right\"\n self.value = \"top middle\"\n break\n }\n case \"bottom-left\": {\n arrowLocation.value = \"top-right\"\n anchor.value = \"bottom left\"\n self.value = \"top middle\"\n break\n }\n case \"right\": {\n arrowLocation.value = \"left\"\n anchor.value = \"center end\"\n self.value = \"center start\"\n break\n }\n case \"left\": {\n arrowLocation.value = \"right\"\n anchor.value = \"center start\"\n self.value = \"center end\"\n break\n }\n }\n}\n\nfunction closeTooltip() {\n if (tooltipShown.value) {\n model.value = false\n modelMobile.value = false\n }\n}\n\nfunction setShown(isShown: boolean) {\n tooltipShown.value = isShown\n}\n\n// Mobile only function\nfunction openTooltipInternally() {\n mobileModelRef.value = true\n}\n\n//endregion\n\n//region Setup Code\n\nwatch(\n () => props.position,\n (position) => {\n setTooltipPositionProperties(position)\n },\n { immediate: true }\n)\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_ctx.$q.platform.is.mobile)\n ? (_openBlock(), _createBlock(_unref(QTooltip), _mergeProps({\n key: 0,\n modelValue: modelMobile.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((modelMobile).value = $event)),\n class: [\"sfx-tooltip\", `sfx-tooltip-arrow-${arrowLocation.value}`],\n anchor: anchor.value,\n self: self.value\n }, _ctx.$attrs, {\n onShow: _cache[1] || (_cache[1] = ($event: any) => (setShown(true))),\n onHide: _cache[2] || (_cache[2] = ($event: any) => (setShown(false)))\n }), {\n default: _withCtx(() => [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n (props.data)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (props.data.isHtml)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n innerHTML: props.data.text\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(props.data.text), 1))\n ], 64))\n : _createCommentVNode(\"\", true)\n ])\n ])), [\n [_directive_click_outside, closeTooltip]\n ]),\n _hoisted_4\n ]),\n _: 3\n }, 16, [\"modelValue\", \"class\", \"anchor\", \"self\"]))\n : (_openBlock(), _createBlock(_unref(QTooltip), _mergeProps({\n key: 1,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((model).value = $event)),\n class: [\"sfx-tooltip\", `sfx-tooltip-arrow-${arrowLocation.value}`],\n anchor: anchor.value,\n self: self.value\n }, _ctx.$attrs, {\n onShow: _cache[4] || (_cache[4] = ($event: any) => (setShown(true))),\n onHide: _cache[5] || (_cache[5] = ($event: any) => (setShown(false)))\n }), {\n default: _withCtx(() => [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n (props.data)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n (props.data.isHtml)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n innerHTML: props.data.text\n }, null, 8, _hoisted_6))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(props.data.text), 1))\n ], 64))\n : _createCommentVNode(\"\", true)\n ])\n ])), [\n [_directive_click_outside, closeTooltip]\n ]),\n _hoisted_8\n ]),\n _: 3\n }, 16, [\"modelValue\", \"class\", \"anchor\", \"self\"]))\n}\n}\n\n})","import script from \"./SfxTooltip.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTooltip.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__\nimport QToolbar from 'quasar/src/components/toolbar/QToolbar.js';\nimport QTooltip from 'quasar/src/components/tooltip/QTooltip.js';\nimport qInstall from \"../../../node_modules/@quasar/app-webpack/lib/webpack/runtime.auto-import.js\";\nqInstall(script, 'components', {QToolbar,QTooltip});\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-quote-text q-ml-xs cursor-pointer\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", null, \" | \", -1)\n\nimport SfxTooltip from \"src/components/tooltip/SfxTooltip.vue\"\nimport { TooltipData, TooltipPosition } from \"src/util/types/components/sfxTooltip\"\nimport { PropType } from \"vue\"\n\n//region Props and Emits\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SfxTrueCount',\n props: {\n trueTotal: {\n type: Number,\n required: true,\n },\n\n tooltipData: {\n type: Object as PropType,\n },\n\n position: {\n type: String as PropType,\n default: \"bottom\",\n },\n},\n setup(__props) {\n\nconst props = __props\n\n//endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"span\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"span\", null, [\n _createElementVNode(\"b\", null, _toDisplayString(props.trueTotal), 1),\n _createVNode(SfxTooltip, {\n position: props.position,\n data: props.tooltipData\n }, null, 8, [\"position\", \"data\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./SfxTrueCount.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SfxTrueCount.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/\" + (chunkId === 996 ? \"chunk-common\" : chunkId) + \".\" + {\"175\":\"1ed1fc5e\",\"272\":\"d844b882\",\"379\":\"f5a0f110\",\"412\":\"1a90c737\",\"539\":\"50b9bc93\",\"829\":\"f06afc50\",\"996\":\"5b016f09\",\"1034\":\"a35c5c59\",\"1075\":\"26129d49\",\"1126\":\"485f70bd\",\"1405\":\"de232cbe\",\"1421\":\"ae23721a\",\"1562\":\"743ca2c0\",\"2239\":\"c0460814\",\"2279\":\"46680ddb\",\"2654\":\"b3165635\",\"2660\":\"6c884314\",\"2695\":\"975b012f\",\"2809\":\"f08ad24f\",\"2834\":\"faf53d5b\",\"2862\":\"2eae17b1\",\"2921\":\"3216ef5b\",\"2960\":\"ae496b95\",\"3096\":\"0b881793\",\"3201\":\"35d24f2a\",\"3215\":\"c7a22bf5\",\"3583\":\"d9c9e644\",\"3636\":\"059f6314\",\"3718\":\"ee233e0d\",\"4018\":\"a304d51d\",\"4072\":\"3634a320\",\"4131\":\"07786d2e\",\"4185\":\"c1e227df\",\"4213\":\"8b8075be\",\"4242\":\"def1210d\",\"4279\":\"4d1f968d\",\"4341\":\"72efce82\",\"4351\":\"3200094f\",\"4380\":\"1835f6cb\",\"4435\":\"1e6cf1f7\",\"4538\":\"75673eb3\",\"4640\":\"8419a91f\",\"5146\":\"8b624b00\",\"5162\":\"b15e7660\",\"5202\":\"c43b244a\",\"5247\":\"91fbee32\",\"5293\":\"47e6bd5e\",\"5423\":\"4844aabf\",\"5700\":\"b7031eab\",\"5800\":\"9dd545b7\",\"6055\":\"c2cc21d1\",\"6334\":\"5ec55743\",\"6349\":\"75a52b4e\",\"6457\":\"aa9f7869\",\"6678\":\"aebbaa69\",\"6695\":\"0a53256d\",\"6802\":\"0eb109b0\",\"7199\":\"6b4002f7\",\"7455\":\"2e1e58b5\",\"7469\":\"83d955aa\",\"7688\":\"ecfe354f\",\"7714\":\"7f8d661c\",\"7849\":\"83a9c6dd\",\"7893\":\"07aa80ec\",\"8111\":\"67471bac\",\"8186\":\"9d63fa92\",\"8191\":\"007c8103\",\"8206\":\"b70c0ce1\",\"8424\":\"78ef9980\",\"8508\":\"36949663\",\"8832\":\"9d4bfa41\",\"8892\":\"2db64df2\",\"8958\":\"638b8e25\",\"9013\":\"57046106\",\"9140\":\"b0485986\",\"9163\":\"6349c40e\",\"9248\":\"5fbd46be\",\"9305\":\"ec2b3209\",\"9381\":\"bbc5e981\",\"9444\":\"1a5811f4\",\"9582\":\"2f8c2247\",\"9702\":\"b6e813fe\",\"9791\":\"ae57cd47\",\"9840\":\"cfe6e3bf\",\"9870\":\"056cd3e2\",\"9913\":\"e2ac8286\",\"9928\":\"7569f6dc\",\"9943\":\"06626143\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + \"70860d5d\" + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"safeex-cloud-app:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"412\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunksafeex_cloud_app\"] = globalThis[\"webpackChunksafeex_cloud_app\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4121], () => (__webpack_require__(5358)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["__name","setup","__props","$q","iconRegex","RegExp","iconMappings","wizard","authStore","useAuthStore","managerTopNavigationStore","route","stagnantWorkInterval","unsubmittedWorkStore","iconMapFn","iconName","mappedIcon","icon","test","startsWith","cls","async","csiAPI","defaults","baseURL","getCSIBaseUrl","selectedWorkspace","updateStagnantWork","updateHasUnsubmittedWork","setInterval","title","length","query","queryParams","isLoggedIn","code","handleAuthorizationCode","_ctx","_cache","_component_router_view","__exports__","pinia","use","createAppFn","quasarUserOptions","app","RootComponent","Quasar","store","createStore","router","markRaw","createRouter","config","iconSet","plugins","Notify","Dialog","publicPath","start","bootFiles","hasRedirected","getRedirectUrl","url","resolve","href","err","Object","redirect","window","location","urlPath","replace","origin","i","ssrContext","console","error","mount","createQuasarApp","createApp","then","method","mapFn","Promise","allSettled","map","result","status","value","default","reason","entry","boot","filter","generateCodeVerifier","seed","safeSeed","replaceAll","toString","generateCodeChallenge","codeVerifier","SECRETS","DYNAMIC_APP_REG_INITIAL_TOKEN","DYNAMIC_APP_REG_JWT_SECRET","generateJWT","issuer","algorithm","encodedSecret","jwkObject","kty","k","JWK","customPayload","setProtectedHeader","typ","alg","setIssuer","sign","registerDevice","AUTH_REGISTER_DEVICE","payload","jwt","redirect_uris","getProdRedirectURI","software_statement","formattedToken","headers","Authorization","data","authAPI","post","SPA_MANAGER_URL","requestAuthorizationCode","codeChallenge","clientId","endpoint","AUTH_REQUEST_AUTHORIZATION_CODE","searchParams","URLSearchParams","append","authUri","getUri","requestAccessToken","authorizationCode","AUTH_REQUEST_ACCESS_TOKEN","FormData","verifyAccessToken","token","AUTH_VERIFY_ACCESS_TOKEN","get","params","access_token","refreshAccessToken","refreshToken","revokeToken","AUTH_REVOKE_TOKEN","loginSequence","canRequestAccessToken","getAccessToken","push","name","SELECT_WORKSPACE","message","clientCredentials","deviceRegistrationError","requestAuthCodeError","create","SPRINGBOARD_URL","springboardAPI","refreshTokenPromise","interceptors","request","requestSuccessHandler","requestErrorHandler","response","updateLastUserAPICall","handleErrorUnauthorized","handleAbortRequests","updateLastEntityAPICall","responseErrorHandler","updateLastWorkspaceAPICall","customConfig","multiRequest","getRefreshedToken","getAccessTokenString","debug","Error","retryRequest","apiAbortStore","sfxAbortId","removeController","reject","retry","userStore","useUserStore","latestAPICall","Date","now","apiCallStore","updateWorkspaceLastApiCallTime","isSpringboardCall","updateLastApiCallTime","SFX","deleteDBs","reloadPage","dbs","indexedDB","databases","db","deleteDatabase","reload","deleteLocalStorage","keepLogin","authStoreKey","authStoreValue","localStorage","getItem","clear","setItem","logout","deleteCredentials","nukeEverything","this","fetchData","workspaceId","dataFetchDialog","isItFriday","date","day","getDay","sfx","syncDBCache","syncUnsubmittedWork","dbSyncSubscription","dbIssueItemSubscription","dbWorkOrderRegularItemSubscription","dbCorrectiveWorkItemSubscription","dbAttributeValuesSubscription","dbUnsubmittedWorkSubscription","unsubscribe","cacheStore","rebuildCache","attributeValuesCollections","Set","issues_on_item","insert$","subscribe","documentData","itemIssues","work_order_regular_item","$","operation","itemWorkOrders","previousDocumentData","corrective_work_on_item","issueWithOpenCorrectiveWork","event","collectionName","has","id","cacheCollection","getCollection","_attachments","_deleted","_meta","_rev","docData","set","delete","cdb","schemaHashes","attachment","attachment_data","attribute_char","attribute_char_value","attribute_numeric","attribute_numeric_value","attribute_select","attribute_select_options","attribute_select_value","attribute_temporal","attribute_temporal_value","corrective_work_item_comments","identifier","issue_on_item_actions","issue_on_item_comments","issue_priority","item","item_class","item_model","item_work_orders","regular_work_on_item","regular_work_item_comments","work_domain_workspace","work_order_corrective_item","work_order_corrective_comments","work_order_regular_comments","work_order_priority","schemaChangesHashes","unsubmitted_attachment","unsubmitted_work","unsubmitted_work_issue","schemaCommonHashes","example_item","user","user_avatar","user_role","work_domain_global","workspace","initiateBaseSchemaHashes","dbName","initiateHashesGeneral","initiateChangesSchemaHashes","initiateCommonSchemaHashes","hashesList","dbFunc","values","includes","testDB","collection","collections","typedCollection","collectionExport","exportJSON","schemaHash","directive","TRUNCATE_MIDDLE_DIRECTIVE","mounted","truncateMiddleMount","beforeUpdate","truncateMiddleBeforeUpdate","beforeUnmount","truncateMiddleBeforeUnmount","DND_DIRECTIVE","el","binding","node","counter","addEventListener","dndDragOverHandler","ev","dndDragEnterHandler","dragLeaveHandler","dndDropHandler","VISIBLE_DIRECTIVE","beforeMount","visibleBeforeMount","updated","visibleUpdated","CLICK_OUTSIDE_DIRECTIVE","clickOutsideBeforeMount","clickOutsideBeforeUnmount","canvasCtx","TRUNCATE_MIDDLE_CLASS","TRUNCATE_MIDDLE_ID","truncateMiddleMap","Map","text","textValueSpan","document","createElement","classList","add","uuid","setAttribute","setTruncatedText","oldValue","selector","querySelector","getAttribute","textWidth","getTextWidth","extraPadding","offsetWidth","innerHTML","averageCharLength","shouldRemoveCharSpacing","charsPerSide","Math","floor","leftText","slice","trim","rightText","context","getCanvas","font","getCanvasFont","metrics","measureText","width","canvas","getContext","getCSSStyle","element","prop","getComputedStyle","getPropertyValue","body","fontWeight","fontSize","fontFamily","size","contains","DND_CLASS","DND_EMIT","stopAndPreventDrag","dataTransfer","dropEffect","preventDefault","stopPropagation","remove","files","file","dndEmitFiles","component","emit","detail","dispatchEvent","CustomEvent","shouldRender","Boolean","setElVisibility","style","display","isVisible","position","visibility","clickOutside","target","Element","removeEventListener","fontAwesomeStyle","globalProperties","key","subKey","CLOSE","CHEVRON_DOWN","entityCount","btn_add_attachment","btn_add_comment_to_issue","btn_add_comment_to_work","btn_add_comment_to_work_order","btn_add_identifier","btn_add_to_work_order","btn_change_work_order","btn_argh","btn_associate_location","btn_association_change","btn_cancel","btn_change_password","btn_close","btn_close_it","btn_close_work_order","btn_confirm","btn_connect","btn_continue","btn_correct_issue","btn_create_item","btn_create_work_order","btn_delete","btn_delete_selected","btn_disassociate","btn_discard_changes","btn_done","btn_dont_show","btn_download_attachments","btn_easter_egg","btn_go_to_item","btn_got_it","btn_got_it_period","btn_hide_section","btn_lets_go","btn_load_default","btn_load_selected","btn_log_me_out","btn_noted","btn_ok","btn_open_issue","btn_open_work_orders","btn_overwrite_selected","btn_perform","btn_perform_correction","btn_perform_planned","btn_perform_work","btn_proceed","btn_raise","btn_raise_issue","btn_raise_next_issue","btn_refresh_workspaces","btn_reject_it","btn_reject","btn_reject_corrective_work","btn_accept","btn_accept_corrective_work","btn_reload_app","btn_remove","btn_remove_attachments","btn_request_removal","btn_reset","btn_reset_selection","btn_resume","btn_retry","btn_review_work","btn_save","btn_save_changes","btn_save_selection","btn_search_attachments","btn_see_all","btn_see_all_count","btn_see_performed_work","btn_select_issues","btn_select_items","btn_send","btn_sign_out","btn_submit","btn_submit_changes","btn_supersede","btn_take_photo","btn_to_issues","btn_to_raised_issues","btn_to_work_orders","btn_try_again","btn_understood","btn_understood_without_exclamation","btn_undo","btn_unlock_key","btn_upload_new_file","ad_hoc_corrective","ad_hoc_regular","area","areas","area_id","by","event_added","event_changed","event_change_requested","event_removed","items","item_id","item_location_id","issue_label_deadline","issue_label_procedure_steps","issue_no_procedure_steps","issue_label_step_reference","not_applicable","issue_label_raised","layout","layouts","layout_id","model_code","model_manufacturer","maintenance_scheduled","performed","planned_corrective","planned_regular","organisation","requester","risk","support","zone_id","qr","barcode","rfid","unknown_user","system_user","error_user","title_corrective_work","title_closed_without_correction","title_corrected_and_closed","title_issue_rejected","title_issue_superseded","title_issue_supersedes_another","title_corrective_work_rejected","title_corrective_work_accepted","title_issue_raised","title_repeated_observation","title_edited_correction_info","title_work_order_added","title_work_order_removed","work_accepted","work_rejected","processed","work_order","corrected_on","corrected_on_date_by","closed_on","closed_by","corrective_work_on","reasoning","rejection_reason","superseding_issue","superseded_issue","performed_regular_work","rejected_by","accepted_by","relation","reference","deadline","work_description","no_value","add_attachment","add_to_work_order","associate_identifier","change_requests","clone_item","close_issue","create_item","create_location","create_model","create_work_order","close_work_order","discard","discard_work","export_results","feedback","handle_identifiers","help","history","issues","mark_all_read","mark_all_unread","perform_adhoc_work","perform_corrective_work","raise_issue","delete_issue","reject_issue","remove_from_work_order","remove_location","replace_item","supersede_issue","take_photo","toggle_display_performed","user_settings","image_zoom_in","image_zoom_out","coordinates","timezone","invalid_timezone","active_work_orders","open_issues","adhoc_discovery","work_order_discovery","pending_corrective_work","median_correction_time","days","deadline_label","admins","more","subtitle_entity_not_found","subtitle_entity_not_found_exclamation","subtitle_entity_not_added","subtitle_entity_no_matches","subtitle_entity_not_open","subtitle_performed_work","subtitle_workspace_not_found","subtitle_unsubmitted_work_not_found","subtitle_notifications_not_found","subtitle_entity_not_assigned","subtitle_attachment_drag_and_drop","subtitle_no_related_actions","subtitle_no_attributes","subtitle_to_do","subtitle_no_issues_raised","subtitle_no_comments","subtitle_location_not_associated","subtitle_add_image","subtitle_work_order_not_created","subtitle_no_work_issues","subtitle_no_work_items","subtitle_no_suitable_work_orders","title_entity_not_found","title_entity_no_matches","title_entity_no_matches_found","title_entity_not_assigned","title_entity_not_open","title_entity_not_created","title_unsubmitted_work_no_matches","title_no_entity","title_no_entities","title_no_images","title_notifications_not_found","title_unsubmitted_work_not_found","title_workspaces_not_found","title_workspace_not_found","title_attachment_drag_and_drop","title_no_related_actions","title_no_attributes","title_no_issues_raised","title_no_comments","title_no_location","title_no_work_issues","title_no_work_items","contact_administrator","http_404","this_workspace","quote_workspace_not_found","quote_workspace_no_matches","quote_area_not_found","quote_area_no_matches","quote_notification_not_found","quote_to_do_not_found","quote_layout_not_found","quote_layout_no_matches","quote_performed_work_not_found","quote_performed_work_no_matches","quote_zone_not_found","quote_zone_no_matches","quote_unsubmitted_work_not_found","quote_issue_no_matches","quote_issue_not_found","quote_work_order_not_assigned","quote_work_order_not_created","quote_work_order_not_found","quote_work_order_no_matches","quote_work_order_not_open","quote_attachment_drag_and_drop","quote_attachment_not_found","quote_attachment_no_matches","quote_attachment_not_added","quote_item_not_found","quote_item_no_matches","quote_no_related_actions","quote_location_not_found","quote_location_no_matches","quote_no_location","quote_model_not_found","quote_model_no_matches","quote_attributes","quote_bug_found","quote_no_issues_raised","quote_no_comments","error_add_identifier","error_adding_attachment","error_adding_comment","error_adding_image","error_change_password","error_change_unlock_key","error_creating_corrective_action","error_creating_corrective_work","error_creating_issue","error_creating_regular_work","error_creating_corrective_work_order","error_creating_regular_work_order","error_updating_corrective_work_order","error_updating_regular_work_order","error_updating_issue_on_item","error_deleting_attachment","error_deleting_attachment_with_name","error_deleting_attachment_with_count","error_disassociate_identifiers","error_closing_issue","error_closing_issues","error_closing_work_order_corrective","error_closing_work_order_regular","error_modifying_work_order","error_accepting_corrective_work","error_accepting_regular_work","error_rejecting_corrective_work","error_rejecting_regular_work","error_rejecting_issue","error_updating_attachment","error_updating_attributes","error_updating_corrective_action","error_updating_item","error_updating_issue","error_no_valid_work_domains","error_deadline_after_start_date","error_failed_to_send_email","workspace_health","no_image","no_image_small","title_photographs","dnd_content","dnd_quote","field_empty","password","error_char_blanks","error_number_min","error_number_max","error_number_between","error_number_whole","error_number_precision","title_requirements","title_time_requirements","title_action","label_isolation","label_shutdown","label_input_action","label_hours","label_minutes","dialog_title","dialog_content","disabled_icon_info_message","administrate","analytics","attachments","audit","home","identify","locations","models","notifications","performed_work","settings","to_do","work_domains","work_orders","workspaces","zones","group_name_work_related","group_name_registry_entities","group_name_arrangement","group_name_admin","mark_read_dialogContent","mark_read_dialogTitle","mark_unread_dialogContent","mark_unread_dialogTitle","read_notifications","unread_notifications","mandatory_step","draft","in_progress","open","complete","planned","complete_closed","closed","unknown","work_type_label","work_type_true_value","work_type_false_value","entity_type_label","entity_type_true_value","entity_type_false_value","invalid_code_format_warning","invalid_code_value_warning","missing_browser_camera_permission_warning","missing_camera_permission_warning","missing_camera_warning","nfc_warning","clear_search_history","input_placeholder","input_placeholder_manager","one_active_user","label_range","label_assignees","option_past_week","option_past_month","option_past_quarter","option_past_year","option_select_date_range","no_users","label_item","label_model","label_location","label_unknown","designation_unknown","done","comments_data","corrective_work_data","regular_work_data","issue_data","item_data","item_attribute_data","model_data","unsubmitted_work_data","workspace_data","uploading_file","raised_issues","work_order_corrective","work_order_regular","empty_no_value","empty_no_location","empty_no_deadline","empty_no_model","empty_incompatible","empty_none","object_page","menu_search","menu_none","menu_search_column","state_work_order","state_dropdown","state_sort_by","state_latest","state_unreviewed","state_done","state_accepted","state_rejected","state_oldest","state_overdue","state_behind","state_resource","state_draft","state_in_progress","state_open","state_complete","state_planned","state_complete_closed","state_closed","state_unknown","status_dropdown","status_sort_by","status_issue","status_work_order","status_change_request","status_issue_overdue","status_done","status_corrective_work","status_corrective_work_accepted","status_closed","entity_item","entity_issue","entity_model","entity_performed_work","entity_area","entity_layout","entity_workspace","entity_zone","entity_work_order","entity_attachment","entity_location","selection_all","selection_none","selection_not_included","selection_included","selection_included_and_performed","selection_select_all_applicable","selection_deselect_all_applicable","selection_current_count","toggle_to_do","toggle_performed","label_start","label_end","label_start_date","label_deadline","error_date_time","error_date","error_time","error_future","error_both","error_range","manager_issue","manager_work_order","technician_issue","technician_work_order","todo_on_work_order","performed_on_work_order","has_identifier","issue","change_request","corrective_work","issue_overdue","corrective_work_accepted","from_designation","from_group","from_organisation","file_type_provided","image_file_support","image_select","image_select_gallery","image_select_take_photo","permission_camera_storage","profile_picture","image_delete_dialog_title","image_delete_dialog_content","sfxBreadcrumbs","sfxButtons","sfxCard","sfxContextMenu","sfxDataPoint","sfxEmpty","sfxErrorMsg","sfxHealthIndicator","sfxImage","sfxInput","sfxIssues","sfxNavigation","sfxOverlayNotifications","sfxProcedureSteps","sfxProgressIndicator","sfxQuaternarySelector","sfxScanners","sfxSearch","sfxSelect","sfxSelectObject","sfxSeparator","sfxSpinner","sfxTable","sfxTimeEdit","sfxToDo","sfxTooltip","sfxUserDisplay","content_confirm","content_undone","checkbox_label","input_label","content","hint","subtitle","notification_no_attachments","title_add_comment_to_entity","label_add_comment_and_photos","label_comment","label_description","check_box_allow_downloads","contact_support","here","text1","text2","text3","text4","text5","quote","title_change_password","input_current_password","input_new_password","input_repetition","password_changed","password_incorrect","password_requirements","requirement_one_lowercase","requirement_one_number","requirement_one_special_char","requirement_one_uppercase","requirement_same_as_old","requirement_max_char","requirement_min_char","password_mismatch","title_attachment","title_image","label","title_change_unlock_key","input_unlock_key","msg_unlock_key_changed","devtools_already_initiated","devtools_instructions","devtools_terms","host","invalid_input","port","prompt_sure","title_devtools","attributes","item_attributes","work","comments","identifiers","users","explanation","info_text_1","info_text_2","video_title","video_text_1","video_text_2","storage_title","storage_text","location_title","location_text","good_day_title","good_day_content","issue_actions_updated","subject_label","long_text_label","notice_label","bug_label","feedback_success","feedback_error","title_welcome","text_technician_welcome","text_manager_welcome","title_400","title_401","title_403","title_404","title_408","title_500","title_501","title_502","title_503","title_504","body_400_1","body_400_2","body_400_3","body_401_1","body_401_2","body_401_3","body_403_1","body_403_2","body_403_3","body_403_4","body_404_1","body_404_2","body_408_1","body_408_2","body_408_3","body_500_1","body_500_2","body_500_3","body_501_1","body_501_2","body_502_1","body_502_2","body_503_1","body_503_2","body_503_3","body_504_1","body_504_2","quote_400","quote_401","quote_403","quote_404","quote_408","quote_500","quote_501","quote_502","quote_503","quote_504","url_support","url_here","title_unknown","text1_unknown","text2_unknown","title_associate","text1_associate","text2_associate","body_description","body_warning","identifier_all","identifier_none","title_open_issues_on_item","title_unsubmitted_work_issues","text_more_than_one_issue","text_raised_issues","text_proceed","text_body","untitled_work","text_only_one_work_order","text_more_than_one_work_order","restriction","label_corrective_work_statement","content_issue_one","content_issue_two","content_issue_three","checkbox_content","title_issue","title_item","content_issue","content_item","confirm_part1","confirm_part2","and","between","can_save_config","config_limit_reached","config_explanation","favorite_config","section_save_current_config","section_saved_configs","label_name","label_todo","title_add_todo","title_delete_todo","title_edit_todo","title_discard_todo","content_discard_todo","content_discard_todo_all","title_discard_all","title_discard_selected","title_discard_unsubmitted","content_discard_all","content_discard_selected","content_discard_unsubmitted","label_checkbox","title_data_transfer","title_interface","title_other","title_security","title_workflow","tab_information","tab_configuration","dark_mode","dark_mode_true_label","dark_mode_false_label","dark_mode_indeterminate_label","easterEggs_false_label","easterEggs_true_label","easterEgg_notification","internet_connectivity","internet_false_label","internet_true_label","language_select_label","location_select","location_select_false_label","location_select_true_label","download_all_data","prioritize_data","set_password","set_unlock_key","skip_list","trinary_false_label","trinary_indeterminate_label","trinary_true_label","tutorial","discard_raised_issues_title","discard_raised_issues_content_1","discard_raised_issues_content_2","discard_raised_issues_content_3","body_content","rejected","superseded","deleted","label_removed","label_added","label_to_do","label_total","label_save_changes","sfxDialogAcceptCorrectiveWork","sfxDialogAcceptWork","sfxDialogAddAttachments","sfxDialogAddComment","sfxDialogAttachmentDetails","sfxDialogAuthentication","sfxDialogChangePassword","sfxDialogChangeRequest","sfxDialogChangeUnlockKey","sfxDialogCloseIssueCorrected","sfxDialogCloseIssueNotCorrected","sfxDialogCloseWorkOrderCompleted","sfxDialogCloseWorkOrderNotCompleted","sfxDialogConnectVueDevtools","sfxDialogDataFetch","sfxDialogDevicePermission","sfxDialogDiscardWork","sfxDialogEasterEgg","sfxDialogEditCorrectionInfo","sfxDialogFeedback","sfxDialogHelp","sfxDialogHttp","sfxDialogIdentifier","sfxDialogImageDelete","sfxDialogItemClone","sfxDialogListAttachmentDelete","sfxDialogListIdentifier","sfxDialogListIssue","sfxDialogListUnsubmittedWork","sfxDialogListWorkOrder","sfxDialogListWorkOrderSelect","sfxDialogOffline","sfxDialogRejectCorrectiveWork","sfxDialogRejectedCorrectiveWork","sfxDialogRejectIssue","sfxDialogRejectWork","sfxDialogRelatedUnsubmittedWork","sfxDialogRemoveEntityFromWorkOrder","sfxDialogSelectModel","sfxDialogStagnantWork","sfxDialogSupersedeIssue","sfxDialogSystem","sfxDialogTableConfigurations","sfxDialogToDo","sfxDialogUnsavedChanges","sfxDialogUnsavedWorkOrderDraft","sfxDialogUnsubmittedIssues","sfxDialogUserSettings","sfxDialogWarning","sfxDialogWorkMustBeReviewed","sfxDialogWorkOrderEntities","sfxDialogWorkOrderRemoveEntity","photo_gallery","header_issues","header_work_orders","header_performed_work","header_items","header_events","header_comments","header_layouts_with_zone","label_sort_by","label_sort_order","label_when_clicked","config_sort_by_priority","config_sort_by_raised","config_sort_by_deadline","config_sort_by_issue_work_order","config_sort_by_designation","config_sort_by_designation_layout","config_sort_by_designation_area","config_sort_by_item_id","config_sort_by_performed_date","config_sort_by_issue_raised","config_sort_by_issue_priority","config_descending","config_ascending","config_open_overview","config_open_corrective_work","config_open_add_to_work_order","config_open_perform_work","config_open_display_on_layout","config_open_display_zone_on_layout","config_open_item_list_for_area","config_open_area_overview","label_include_item_no_area","label_include_item_no_location","label_click_not_performed_items","label_click_not_performed_issues","label_click_performed_items","label_click_performed_issues","label_hide_performed","config_statistic_mean","config_statistic_median","config_statistic_mode","config_yes","config_no","config_true","config_false","config_click_open_item","config_click_open_issue","config_click_open_perform_work","config_click_perform_work","initiate","login_required","error_initiate","error_offline","try_again","table_column_title_label","table_column_entity_label","table_column_entity_grouping_label","table_column_layout_label","table_column_raised_label","table_column_closed_date_label","table_column_updated_label","table_column_work_domain_label","table_column_priority_label","table_column_entity_grouping_item_class","table_column_entity_grouping_area_attribute_set","tab_issue","tab_item","tab_accepted_corrective_work","tab_corrective_work","tab_events","tab_comments","title_state_and_history","work_domain_label","issue_description_label","model_label","correction_info_label","corrective_action_label","material_requirements_label","time_requirements_label","additional_requirements_label","isolation","shutdown","designation_label","title_raise_issue","entity_ref_label","select_priority_label","issue_more_info","placeholder_issue_designation","placeholder_title_reference","issue_state_display","issue_overview","no_correction_info","no_correction_info_given","no_correction_info_quote","item_overview","table_column_designation_label","table_column_item_id_label","table_column_location_id_label","table_column_item_class_label","table_column_model_label","table_column_location_label","tab_overview","tab_item_data","tab_model_data","tab_attached","tab_related_items","tab_issues","tab_issues_with_count","tab_work_orders","tab_work_orders_with_count","item_class_label","item_id_label","item_designation_label","most_recent_issue_label","issues_meantime","next_issue","most_recent_work_label","work_meantime","previous_work","missing_data","workspace_name","title_configure_issues_n_work","title_issues_n_work","tab_data_id","tab_data_designation","tab_data_item_class","tab_data_location","tab_data_model","tab_data_update_item","tab_data_error_value_unique","tab_data_error_form","breadcrumb_create_item","breadcrumb_clone_item","error_value_unique","item_created","error_attributes","title_regular_work","title_performed_corrective_work","title_right_container_corrective","title_right_container_regular","title_right_container_corrective_configure","title_right_container_regular_configure","table_column_work_type_label","table_column_work_type_regular_work","table_column_work_type_corrective_work","table_column_work_order_label","table_column_date_performed_label","tab_work_instructions","tab_issues_open_count","work_statement_label","corrective_work_statement_label","performed_corrective_work","title_overview","title_simple","title_work_order_items","title_work_order_issues","title_side_panel","title_issue_work_comments","title_item_work_comments","title_configure_issue_work_comments","title_configure_item_work_comments","tab_parameters_instructions","tab_items","tab_performed_work","tab_items_with_count","tab_performed_work_with_count","tab_comments_with_count","label_work_domain","label_designation","label_work_order_designation","label_reference","label_time_requirements","label_material_requirements","label_work_instructions","label_work_information","label_work_type","label_priority","label_started","label_created_by","label_entity_type","regular_work","restricted","label_select_priority","label_target_procedure","label_accepted_alternative","label_assignments","label_daily_participants","label_participants_actual_and_assigned","label_average_minutes","label_hours_to_complete","label_daily_average","error_unique_reference","error_value_integer","requirements_expectations","discard_requirements_dialog_title","discard_requirements_dialog_content","work_order_create","work_performed_count","work_not_performed_count","nofity_disable_time","notify_disable_draft_has_issue","notify_disable_work_domain_priority","tooltip_participants","tooltip_average_minute","tooltip_hours_complete","tooltip_hours_daily","title_chart_area","title_chart_treemap","treemap_raised","treemap_work_order","treemap_corrected","treemap_total","tab_work_domain","tab_you","work_domains_title","workspace_home","table_column_overview_label","table_column_organisation_label","table_column_group_label","table_column_items_label","table_column_areas_label","table_column_issues_label","table_column_work_orders_label","table_column_ws_health_label","workspace_info_title","assignments_title","work_title","change_requests_title","organisation_label","items_label","areas_label","layouts_label","locations_label","models_label","zones_label","admins_label","notes_label","assignments_label","issues_label","corrective_work_label","regular_work_label","overdue_work_label","obstructed_work_label","data_changes_label","location_changes_label","file_changes_label","work_orders_title","work_orders_assigned_label","work_orders_label","performed_work_label","entityConfig","initiateApp","performedWork","workOrder","corrective_work_order","regular_work_order","zone","model","notification","photo","image","mandatory_fields_empty","issue_raised","issues_raised","issue_removed_from_work_order","all_raised","removed_todo","deselected_previous_selection","direct_notification","new_notification","maintenance","assigned_work_order","commented_work_order","commented_performed_work","rejected_issue","rejected_work","accepted_work","corrected_issue","added_issue","default_event_name","event_start","time_period","identify_propose","identify_associated","identify_association_changed","identify_dissociate","identifier_already_associated","not_implemented","saved_as_unsubmitted_work","deleted_unsubmitted_work","connection_lost","connection_reestablished","photo_removed","need_camera_permission","need_file_system_permission","file_size_exceeded","file_type_not_allowed","files_not_accepted","files_empty","file_empty","corrective_work_not_allowed","regular_work_not_allowed","corrective_work_already_exists","bad_regular_work_guard","bad_corrective_work_guard","bad_file_read","bad_file_download","closed_issue","closed_corrected_issue","closed_work_order","closed_completed_work_order","issue_rejected","accept_corrective_work","rejected_corrective_work","data_fetched","issue_closed","issue_closed_success","work_order_corrective_closed_success","work_order_regular_closed_success","regular_work_accepted","regular_work_rejected","corrective_work_rejected","issue_rejected_success","issue_has_accepted_corrective_work","attachment_added","attachment_adding","unsubmitted_work_discarded","unsubmitted_work_on_issue_exists","image_uploading","batch_error_partial","batch_error_full","issue_has_multiple_user_interactions","bad_issue_id","work_order_draft_created","work_order_updated","item_added_to_work_order","issue_added_to_work_order","issue_changed_work_order","location_not_enabled","alt_logo","alt_watermark","issue_update","no_access","issue_in_work_order","access_create","access_read","access_update","access_delete","access_admin","permission_attributes","permission_audit","permission_change_approvals","permission_change_requests","permission_organisations","permission_files","permission_gis","permission_history","permission_identifiers","permission_issues","permission_items","permission_license_accounts","permission_oauth_apps","permission_oauth_tokens","permission_performed_work","permission_planning","permission_procedures","permission_service_providers","permission_springboard_admin_ui","permission_user_accounts","permission_user_roles","permission_user_settings","permission_vpc","permission_workspaces","permission_workspace_admin_ui","permission_work_domains","permission_work_orders","one_or_more_issues","issue_close_no_permission","coming_soon","good_morning","good_day","good_afternoon","good_evening","minute_ago","minutes_ago","hour_ago","hours_ago","day_ago","days_ago","today","in_x_weeks","x_weeks_ago","in","was_date","latest_raised","next_deadline","last_deadline","day_with_placeholder","days_with_placeholder","days_and_hours","days_and_hour","day_and_hours","day_and_hour","hour_with_placeholder","hours_with_placeholder","hours_and_minutes","hours_and_minute","hour_and_minutes","hour_and_minute","minute_with_placeholder","minutes_with_placeholder","less_than_a_minute","issue_overdue_by_soon","issue_overdue_in_24","issue_overdue_by_day_one","issue_overdue_by_day_multiple","issue_deadline_in_day_one","issue_deadline_in_day_multiple","issue_deadline_in_week","hours_minutes","hours_minute","hour_minutes","hour_minute","generic_overdue","generic_behind","label_system_link","x_selected","attachmentContext","entity","others","permissionNotifications","time","pages","components","dialogs","utils","locale","legacy","messages","warnHtmlMessage","registerType","color","textColor","classes","iconSize","ERROR","WARNING","DSN_KEY","serializationDepth","environment","determineEnvironment","maxReplayDuration","ignoredErrorList","dsn","normalizeDepth","tracePropagationTargets","transport","integrations","autoInject","levels","depth","maskAllText","blockAllMedia","mutationLimit","tracesSampleRate","trackComponents","ignoreErrors","replaysSessionSampleRate","replaysOnErrorSampleRate","errorHandler","errorStr","isDev","mode","getMode","currentError","attachmentSchema","description","version","primaryKey","type","keyCompression","properties","maxLength","uniqueItems","created_dt","updated_dt","extension","final","state","minimum","maximum","state_reason","encrypted","required","attachmentDataSchema","ref","path","attachmentCollectionCreator","schema","attachmentDataCollectionCreator","attributeCharSchema","order","autocomplete","allow_blank","max_length","indexes","attributeCharValueSchema","attribute","attributeNumericSchema","decimals","min","max","attributeNumericValueSchema","attributeSelectSchema","allow_multiple_selections","attributeSelectOptionsSchema","attributeSelectValueSchema","attributeTemporalSchema","enable_date","enable_time","attributeTemporalValueSchema","attributeCharValueCollectionMethods","getValuesForEntity","entityID","find","where","eq","exec","attributeNumericValueCollectionMethods","attributeSelectValueCollectionMethods","attributeTemporalValueCollectionMethods","attributeSelectMethods","populateWithOptions","getDB","options","equals","mutatedSelectAttribute","toMutableJSON","mutatedOptions","option","populatedSelectAttribute","attributeCharCollectionCreator","attributeCharValueCollectionCreator","statics","attributeNumericCollectionCreator","attributeNumericValueCollectionCreator","attributeSelectCollectionCreator","methods","attributeSelectOptionsCollectionCreator","attributeSelectValueCollectionCreator","attributeTemporalCollectionCreator","attributeTemporalValueCollectionCreator","correctiveWorkOnItemSchema","declared_dt","procedure_results","concluded_dt","conclusion","enum","concluded_by_user","work_domain","procedure_revision","performed_by_user","correctiveWorkOnItemCollectionCreator","correctiveWorkItemCommentSchema","correctiveWorkItemCommentCollectionCreator","identifierSchema","identifierCollectionMethods","bulkInsertByType","flattenedData","flat","bulkInsert","bulkInsertAndUpdateByType","insertResults","dataToUpdate","documentInDb","writeRow","bulkUpsert","checkForIdentifier","identifierCount","count","getListOfIdentifiers","identifiersDB","doc","toJSON","getScannedIdentifier","findOne","identifierCollectionCreator","issueOnItemActionsSchema","time_estimate","isolation_required","shutdown_required","procedure_step_bool","procedure_step_numeric","procedure_step_select","procedure_step_photo","procedure_step_verify","issueOnItemActionsCollectionCreator","issueOnItemCommentSchema","reaffirmed","issueOnItemCommentCollectionCreator","issuePrioritySchema","risk_factor","days_to_correct","issuePriorityCollectionCreator","issuesOnItemSchema","main_image","superseded_by","raised_by_user","priority","actionable_item","raised_from","related_procedure_steps_bool","related_procedure_steps_numeric","related_procedure_steps_select","related_procedure_steps_photo","related_procedure_steps_verify","issuesOnItemCollectionMethods","getIssuesTotal","getLatestIssue","resultsDB","latestIssue","reduce","a","b","getTime","issuesOnItemCollectionCreator","itemSchema","minLength","designation","restricted_to_procedures","itemCollectionMethods","getItemIds","allDocs","itemCollectionCreator","itemClassSchema","enable_model","attributes_char_item","attributes_numeric_item","attributes_temporal_item","attributes_select_item","attributes_char_model","attributes_numeric_model","attributes_temporal_model","attributes_select_model","restricted_to_work_domains","itemClassCollectionCreator","itemModelSchema","type_description","manufacturer","itemModelCollectionCreator","workOrderBaseProperties","start_dt","deadline_dt","instructions","daily_participants","avg_minutes_per_work","hours_to_complete","daily_avg_work_hours","assigned_users","accepted_alternative_procedure_revisions","workOrderCorrectiveItemSchema","workOrderRegularItemSchema","workOrderCorrectiveCollectionMethods","getWorkOrderCorrectiveReferences","flatMap","workOrderRegularCollectionMethods","getWorkOrderRegularReferences","workOrderCorrectiveItemCollectionCreator","workOrderRegularItemCollectionCreator","itemWorkOrderSchema","itemWorkOrderCollectionCreator","regularWorkOnItemSchema","regularWorkOnItemCollectionCreator","regularWorkItemCommentSchema","regularWorkItemCommentCollectionCreator","workDomainWorkspaceSchema","allows_regular_adhoc","allows_corrective_adhoc","require_proof_of_presence","shorthand_name","workDomainWorkspaceCollectionCreator","workOrderCorrectiveItemCommentSchema","workOrderRegularItemCommentSchema","workOrderCorrectiveItemCommentCollectionCreator","workOrderRegularItemCommentCollectionCreator","workOrderPrioritySchema","rank","workOrderPriorityCollectionCreator","exampleItemSchema","additionalProperties","exampleItemDocumentMethods","getTitle","exampleItemCollectionMethods","countAllDocuments","exampleItemCollectionCreator","userSchema","email","first_name","last_name","is_active","is_superuser","roles","userAvatarSchema","userCollectionCreator","userAvatarCollectionCreator","userRoleSchema","service_provider","userRoleCollectionCreator","workDomainGlobalSchema","workDomainGlobalCollectionCreator","WorkspaceSchema","address","logo","vpc","account_owners","stats","num_items","num_areas","num_issues","num_layouts","num_locations","num_models","num_zones","num_work_orders","num_change_requests","issue_highest_priority","work_order_highest_priority","total_health_percent","time_zone","group","workspaceCollectionCreator","unsubmittedAttachmentSchema","mimeType","fileData","unsubmittedAttachmentCollectionCreator","unsubmittedWorkSchema","entity_id","entity_type","work_type","work_order_id","unsubmitted_work_issues","unsubmittedWorkCollectionMethods","getOldestWorkDays","oldest","sort","localeCompare","hasUnsubmittedWork","unsubmittedWorkCount","unsubmittedWorkCollectionCreator","unsubmittedWorkIssueSchema","unsubmitted_work_id","action","unsubmittedWorkIssueCollectionCreator","StorageOption","collectionBaseCreators","collectionChangesCreators","collectionCommonCreators","databaseBaseInstances","databaseChangesInstances","databaseCommonInstances","lockDBCreation","lockEnsuringCollections","sleep","ms","r","setTimeout","getStorage","chosenStorage","Platform","is","capacitor","PremiumSQLite","PremiumIndexedDB","Dexie","storage","LokiMemory","getDatabase","databaseName","databaseInstance","undefined","destroyed","multiInstance","collectionsMissing","missingCollectionCreators","collectionNames","keys","addCollections","insertHooks","getChangesDatabase","getCommonDatabase","preSave","attachmentNew","attachmentOld","concat","workspaceUUID","base_db","formatCSIDBName","test_db","getChangesDB","changes_db","test_changes_db","getCommonDB","common_db","test_common_db","formattedUUID","LABELS","COMPANY","PRODUCT","SUPPORT","LINKS","CAPACITOR_DEEPLINK_HOSTNAME","SPA_TECHNICIAN_URL","CSI_URL","USER_MANAGEMENT_URL","MESSAGE_URL","UI_DEMO","DEMO_INDEX","EXAMPLE_STORE","DATABASE","BARCODE_READER","KEYBOARD_READER","NFC_READER","API_CALLS","CUSTOM_DIRECTIVES","GENERAL_DIRECTIVES","TYPOGRAPHY","CARDS","DIALOGS_AND_OVERLAYS","CUSTOM_ICONS","BUTTONS","INPUTS","ISSUES","SELECTS","TABLE","TABS","SPECIAL_PURPOSE","TOP_NAVIGATION","RADIO_BUTTONS","EMPTY_STATES","PROGRESS_INDICATOR","DATA_POINT","CHIPS","MAIN_MENU","TO_DO","TOGGLE","PROCEDURE_STEP","SEARCH_BAR","NOTIFICATIONS","PRIORITY_LABELS","FILTERING_ELEMENTS","HEALTH_INDICATOR","IMAGE_GALLERY","CHARTS","TOOLTIPS","workspaceRoute","WORKSPACE","loginGuard","to","INITIATE_APP","loginWorkspaceGuard","routesManager","beforeEnter","children","SELECT_ISSUE","ISSUE","CREATE_ISSUE","SELECT_ITEM","ITEM","CREATE_ITEM","SELECT_PERFORMED_WORK","PERFORMED_CORRECTIVE_WORK","PERFORMED_REGULAR_WORK","SELECT_WORK_ORDER","WORK_ORDER_CORRECTIVE","props","draftCreated","WORK_ORDER_REGULAR","CREATE_WORK_ORDER","lockGuard","isLocked","LOCK","canPerformCorrectiveWork","from","next","canNavigate","canGoToCorrectiveWork","NOT_FOUND","canPerformRegularWork","canGoToRegularWork","t","i18n","global","issueId","issueData","workDomainData","correctiveWork","msg","correctiveWorkTitle","workDomain","itemId","itemData","some","routesTechnician","USER_SETTINGS","unsubmittedWorkTabActive","unsubmittedWorkId","SELECT_LAYOUT","SELECT_MODEL","ADHOC_CORRECTIVE_WORK","PLANNED_CORRECTIVE_WORK","ADHOC_REGULAR_WORK","PLANNED_REGULAR_WORK","SELECT_ZONE","ZONE","SELECT_AREA","AREA","SELECT_ISSUE_FOR_ITEM","logBadPath","warning","managerRoutes","INDEX","createHistory","scrollBehavior","hash","top","Screen","height","behavior","left","routes","beforeEach","topNavigationStore","$reset","supportStore","abortControllers","useApiAbortStore","abortControllerData","actions","createController","requestType","abortController","AbortController","httpConfig","controller","addController","abortHandler","getFixedUrl","controllerData","abort","endpointLastCall","useApiCallStore","persist","workspaceLastCall","getters","URL","search","ignoreList","param","urlString","pathname","fixedUrl","hasQuestionMark","updateLastApiCallTimeConcurrent","baseUrl","split","pop","canCallAgain","debounceTime","lastCallTime","getLastUpdatedTimeStamp","toISOString","clearLocalStorage","resetPiniaStores","capacitorAppInfoStore","configurationStore","useConfigurationStore","searchStore","todoItemsStore","passHashed","unlockKeyHashed","authenticationToken","sso","codeCheck","token_type","lock","unlock","setSelectedWorkspace","downloadDataOnStartUp","dataFetched","routeName","setNewPasswordHashed","setUnlockKeyHashed","savedClientCredentials","removeItem","client_id","errorObject","refresh_token","useCacheStore","itemCard","issueCard","performedWorkCard","issueEventCards","workOrderCard","itemClassWithAttributes","itemClassPromotedAttribute","work_order_corrective_item_comments","work_order_regular_item_comments","user_roles","caches","timerText","dbToMap","itemClassData","attributeCharData","attributeNumericData","attributeSelectData","attributeSelectOptionsData","attributeTemporalData","attributeCharValueData","dbToMapAttributes","attributeNumericValueData","attributeSelectValueData","attributeTemporalValueData","issuePrioritiesData","issueOnItemData","cacheItemWithIssues","issueOnItemActionsData","issueOnItemCommentsData","correctiveWorkOnItemData","cacheInsertIssueWithOpenCorrectiveWork","regularWorkOnItemData","workOrderCorrectiveItemData","workOrderCorrectiveItemCommentData","workOrderRegularItemData","cacheInsertItemWithWorkOrders","workOrderRegularItemCommentData","workOrderPriorityData","attachmentsData","attachmentContentData","workDomainsWorkspaceData","commonDb","workDomainsGlobalData","workspacesData","userData","userAvatarData","userRolesData","cachePromotedAttribute","timeEnd","docs","getAttributeValueIDFromValue","issueList","workOrderList","itemWorkOrderMap","mutableWorkOrder","insertItemWithWorkOrderHelper","cacheUpdateItemWithWorkOrders","workOrderListOld","workOrderListNew","entries","oldItems","newItems","filteredOldItems","filteredNewItems","deleteItemWithWorkOrderHelper","filteredOldItem","cachedItem","index","findIndex","wo","splice","cacheDeleteItemWithWorkOrders","cachedItemWorkOrders","attributeValue","getAttributeValueIDFromEntity","entityId","attributeId","correctiveWorkList","mutableWork","cacheUpdateIssueWithOpenCorrectiveWork","correctiveWorkListOld","correctiveWorkListNew","cacheDeleteIssueWithOpenCorrectiveWork","itemClassesList","itemClass","attributeChar","$in","attributeNumeric","attributeSelect","attributeTemporal","promotedAttribute","reducePromotedAttribute","attributeToPromotedAttribute","attributeType","attributeData","useCapacitorAppInfoStore","isAppActive","hasInternet","appInfo","restoredEvent","setAppState","isActive","setAppInfo","setRestoredEvent","deviceId","deviceInfo","languageCode","getBattery","getBatteryInfo","setStaticState","getId","getLanguageCode","updateDeviceInfo","getInfo","workOrderDefaultAction","CHOOSE","issueDefaultAction","autoCompleteWork","skipListWithSingleItem","locationSelectItem","internetConnectivity","prioritizeData","animateNotification","darkMode","OFF","language","easterEggs","displayWorkspaceCards","displayLayoutCards","tableBookmarks","initBookmarks","showLocationSection","hideUnsubmittedWorkListDialog","shownStagnantWorkDialogDate","tutorialStatus","easterEggStatus","sheepBurning","konamiCodeActive","snakeGameScores","entityOverviewConfig","issueSortBy","PRIORITY","issueSortOrder","DESCENDING","issueWhenClicked","OPEN_OVERVIEW","workOrderSortBy","DEADLINE","workOrderSortOrder","workOrderWhenClicked","eventSortOrder","commentSortOrder","regularWork","workOrderCorrective","DESIGNATION","issueNotPerformedClicked","OPEN_ENTITY_OVERVIEW","issuePerformedClicked","OPEN_PERFORMED_WORK","issueHidePerformed","performedWorkSortBy","PERFORMED_DATE_TIME","performedWorkSortOrder","workOrderRegular","itemSortBy","itemSortOrder","itemNotPerformedClicked","itemPerformedClicked","itemHidePerformed","getCurrentConfiguration","updateConfigurations","configurations","assign","useLocalUserSettingsStore","skipConfirmCloseWorkOrder","skipConfirmWorkOrderRemoveItem","skipConfirmWorkOrderRemoveIssue","skipConfirmRemoveItemFromWorkOrder","skipConfirmRemoveIssueFromWorkOrder","extendedMenuState","openWorkRelated","openRegistryEntities","openArrangement","openAdmin","useManagerTopNavigationStore","titleReference","titleClass","titleReferenceClass","mainMenuContent","disableMainMenuContent","hideExtendedMenu","disableExtendedMenu","quickActions","disableQuickActions","contextMenuContent","disableContextMenuContent","disableContextMenu","hideContextMenu","hideContextBar","disableNotifications","hideTodoIcon","disableTodoIcon","contextActionClicked","breadcrumbs","breadcrumbsContext","breadcrumbsNavigationAction","activeTab","activeExtendedTab","setContextAction","useNotificationsStore","sysNotifications","updatePriorityList","priorityList","maxItemsInList","searchItemIndex","itemInList","extractedItem","useSearchStore","term","domain","enabled","recentSearches","resetIntermediateData","resetAllRecentSearches","resetSpecificRecentSearch","searchDomain","getRecentSearch","addItemToRecentSearches","listToUpdate","removeItemFromRecentSearches","itemIndex","getPlaceholderEntity","getManagerPlaceholderEntity","useSupportStore","setFeedbackData","useToDoItemsStore","toDoItems","deleteDone","toDoItem","isDone","deleteAll","useTopNavigationStore","quickAction","disableQuickAction","menuContent","disableMenuContent","counts","overlayContextActionClicked","htmlAllowed","setOverlayContextAction","source","GENERIC_OVERLAY","useUnsubmittedWorkStore","unsubmittedWork","unsubmittedImages","oldestWorkInDays","isWorkStagnant","profilePicture","helpDialogShown","permissions","getFullName","getLatestCallTime","getUserData","updateUserData","fetchUserData","uploadUserData","updatedUser","checkUserPermission","permissionType","permissionAccess","permissionSpecifics","workDomainKey","workDomainUUID","workspaceKey","hasAccess","accessLevel","workspaceData","workspace_permissions","workDomainPermissions","work_domain_permissions","getWorkDomainsWithPermission","workDomainsWithPermissions","workDomainsInWorkSpace","ContextMenuItem","_icon","_content","_action","HELP","_disable","getEnumData","disable","contextAction","disabledStatus","ADD_ATTACHMENT","ATTACHMENT_ADD","ADD_TO_WORKORDER","WORKORDER_ADD_TO","ASSOCIATE_IDENTIFIER","IDENTIFY","CHANGE_REQUEST","CLONE_ITEM","ITEM_CLONE","CLOSE_ISSUE","RETIRE","ITEM_CREATE","CREATE_LOCATION","LOCATION_CREATE","CREATE_MODEL","MODEL_CREATE","WORKORDER_CREATE","CLOSE_WORK_ORDER","DELETE","DISCARD","DISCARD_WORK","EXPORT_RESULTS","S_FILE_EXPORT","FEEDBACK","HANDLE_IDENTIFIERS","HISTORY","MARK_ALL_READ","MARK_AS_READ","MARK_ALL_UNREAD","MARK_AS_UNREAD","PERFORM_ADHOC_WORK","WORK_REGULAR","PERFORM_CORRECTIVE_WORK","WORK_CORRECTIVE","RAISE_ISSUE","ISSUE_CREATE","DELETE_ISSUE","REJECT_ISSUE","WORK_REJECT","REMOVE_FROM_WORKORDER","WORKORDER_REMOVE_FROM","REMOVE_LOCATION","NO_LOCATIONS","REPLACE_ITEM","SUPERSEDE_ISSUE","ISSUE_SUPERSEDE","LOGIN_HELP","TAKE_PHOTO","ADD_PHOTO","TOGGLE_DISPLAY_PERFORMED_ON","SHOW","TOGGLE_DISPLAY_PERFORMED_OFF","HIDE","SETTINGS","IMAGE_ZOOM_OUT","COMPRESS_GALLERY_IMAGE","IMAGE_ZOOM_IN","EXPAND_GALLERY_IMAGE","getContextMenuItems","itemsToShow","itemsToDisable","ignoreQuickActionDefault","defaultAction","menuItems","menuItem","Number","Logger","constructor","_isProduction","info","breadcrumb","breadcrumbData","genericSentryCapture","warn","level","exception","configStore","vw","documentElement","clientWidth","innerWidth","vh","clientHeight","innerHeight","viewSize","scope","setLevel","setTransactionName","userObject","setUser","setExtra","Log","COMMON_MESSAGES","SUPPORT_LINK","STATUS_LINK","GET_LOCATION_TIMEOUT","LANGUAGE_LIST","HEALTH_INDICATOR_COLORS","SMALL_SCREEN_WIDTH","SFX_CARD_HEIGHT","SFX_CARD_CONDENSED_HEIGHT","SFX_CARD_ATTACHMENT_HEIGHT","SFX_CARD_IMG_WIDTH","SKELETON_ANIMATION","DEBOUNCE_TIME_API_CALL","UUID_REGEX","DATE_TIME_FULL_MASK","DATE_MASK","DATE_MASK_FORWARD_SLASH_SEPARATOR","TIME_MASK","STAGNANT_WORK_DAYS","STAGNANT_WORK_INTERVAL","CACHE_IMAGES","CACHE_AVATARS","MANAGER_MAIN_MENU","WORK_ORDERS","ITEMS","PERFORMED_WORK","ENTITY_PAGES","EmptyStates","AREA_NOT_FOUND","entityName","AREA_SLASH","AREA_NO_MATCHES","ATTACHMENT_DRAG_AND_DROP_ITEM","ATTACHMENTS","ATTACHMENT_DRAG_AND_DROP_WORK_ORDER","ATTACHMENT_NOT_FOUND","ATTACHMENT_SLASH","ATTACHMENT_NO_MATCHES","ATTACHMENT_NOT_ADDED","ITEM_NOT_FOUND","ITEM_SLASH","ITEM_NO_MATCHES","ITEM_NO_RELATED_ACTIONS","ISSUE_NOT_FOUND","ISSUE_SLASH","ISSUE_NO_MATCHES","LAYOUT_NOT_FOUND","LAYOUT_SLASH","LAYOUT_NO_MATCHES","LOCATION_NOT_FOUND","LOCATION_NO_MATCHES","MODEL_NOT_FOUND","MODEL_SLASH","MODEL_NO_MATCHES","NOTIFICATION_NOT_FOUND","NO_ATTRIBUTES","NO_ISSUE_COMMENTS","NO_PERFORMED_WORK_COMMENTS","NO_WORK_ORDER_COMMENTS","PERFORMED_WORK_NOT_FOUND","PERFORMED_WORK_LIST_SLASH","PERFORMED_WORK_NO_MATCHES","PHOTO_NOT_FOUND","NO_PHOTOS","TODO_NOT_FOUND","UNSUBMITTED_WORK_NOT_FOUND","UNSUBMITTED_WORK_NO_MATCHES","WORK_ORDER_NOT_ASSIGNED","WORKORDER_SLASH","WORK_ORDER_NOT_CREATED","WORK_ORDER_NOT_FOUND","WORK_ORDER_NO_MATCHES","WORK_ORDER_NO_SUITABLE_MATCHES","WORK_ORDER_NOT_OPEN","NO_WORK_ISSUES","NO_WORK_ITEMS","WORKSPACE_NOT_FOUND","WORKSPACES","WORKSPACE_NOT_FOUND_HOME","WORKSPACE_NO_MATCHES","ZONE_NOT_FOUND","ZONES_SLASH","ZONE_NO_MATCHES","NO_ISSUES_RAISED","IMAGE_FILE_MAIN_MIME_TYPES","IMAGE_FILE_MIME_TYPES","ATTACHMENT_IMAGE_EXTENSIONS","ATTACHMENT_ALLOWED_EXTENSIONS","DIR_ATTACHMENTS","MAX_UPLOAD_FILE_SIZE","MAX_UPLOAD_PROFILE_PIC_SIZE","SFX_WATERMARK","SAMMY_BIG","WORKSPACE_PLACEHOLDER_MANAGER","WORKSPACE_PLACEHOLDER_MANAGER_BIG","WORKSPACE_PLACEHOLDER_TECHNICIAN","WORKSPACE_PLACEHOLDER_TECHNICIAN_BIG","WORKSPACE_PLACEHOLDER_TABLE","CORRECTIVE_WORK_IMG","REGULAR_WORK_IMG","IMG_PLACEHOLDER","IMG_PLACEHOLDER_SM","IMG_UPLOAD_IN_PROGRESS_PLACEHOLDER","IMG_UPLOAD_FAILED_PLACEHOLDER","IMG_MASCOT_SHRUG","IMG_MASCOT_STOP","IMG_MASCOT_SURPRISED","IMG_MASCOT_TECHNICIAN","IMG_MASCOT_TIME","IMG_MASCOT_UNPLUG","MOCK_USER_AVATAR","FILTER_COLUMN_SEARCH","FILTER_COLUMN_VALUE","FILTER_ENTITY_UUID","DEFAULT_CONTEXT_ACTIONS","TAB_TO_DO_UNSUBMITTED_WORK","TAB_WORK_ORDER_OVERVIEW","TAB_WORK_ORDER_ISSUES","TAB_WORK_ORDER_ITEMS","TAB_WORK_ORDER_ATTACHED","TAB_WORK_ORDER_COMMENTS","TABLE_PAGING_VALUES","TABLE_COLUMN_IMAGE","TABLE_COLUMN_INDICATOR","TABLE_COLUMN_STATUS","TABLE_COLUMN_WORK_STATE","TABLE_COLUMN_WORK_ORDER_STATE","TABLE_COLUMN_RIGHT_SIDE_ICON","TABLE_BODY_CELL","TABLE_HEADER_CELL","TABLE_SELECTION_SIZE","TABLE_SELECTION_SIZE_PX","TABLE_SELECTION_ARROW_SIZE","TABLE_STATUS_ICON_SIZE","TABLE_STATUS_PADDING","TABLE_IMAGE_SIZE","TABLE_BORDER_SPACING","TABLE_RIGHT_SIDE_ICON_SLOT","TABLE_WORK_STATE_COLUMN_SIZE","TABLE_WORK_ORDER_STATE_COLUMN_SIZE","STATUS_COLUMN","field","sortable","switchable","WORK_STATE_COLUMN","stateTranslated","WORK_ORDER_STATE_COLUMN","RIGHT_SIDE_ICON_COLUMN","WORK_ORDER_STATE_SORT","CALCULATIONS","EARTH_RADIUS_METERS","SUGGESTED_DEFAULTS","MAX_SUGGESTION_DISTANCE_IN_METERS","MILLISECONDS_PER_DAY","WorkActionOption","DarkModeOption","ContextSource","IssueSortBy","IssueClickOptions","WorkOrderSortBy","WorkOrderClickOptions","WorkOrderIssueSortBy","WorkOrderItemSortBy","PerformedWorkSortBy","NotPerformedEntityClickOptions","PerformedEntityClickOptions","ItemSortBy","ItemClickOptions","LayoutWithZoneSortBy","LayoutWithZoneClickOptions","ModelSortBy","ModelClickOptions","StatisticalMethod","ConfigSortOrder","MissingEntityType","ContextAction","MainMenuType","CustomIconName","CustomLocalIconName","FontAwesomeIconName","Icons","NamedPath","NamedManagerPath","DemoNamedPath","NotificationActionMessage","CardNotificationEvent","NavigationAction","AuthURL","SpringboardURL","CSIurl","uploadImagesInApp","hasPermission","getCameraPermission","getPhoto","quality","allowEditing","resultType","Uri","webPath","imageName","format","urlResponse","fetch","blob","File","checkPermissions","camera","requestPermissions","attachmentIsImage","fileTypeIsAllowed","splitAttachments","imageList","attachmentList","ids","getAttachments","attachmentInCache","attachmentInDb","getAttachmentData","attachmentID","attachmentInDB","mutableAttachment","getAttachmentContent","getReadyAttachmentContent","blobData","getAttachmentContentWeb","createObjectURL","cache","foundImage","match","updatedDoc","saveAttachmentData","mapAttachmentToAttachmentUpload","images","getAttachmentContentForEntity","getWebAttachmentURL","put","Response","upsert","fileName","attachmentId","base","ATTACHMENTS_ID_CONTENT","constructAttachmentFolderPath","mainFolder","currentWorkspaceUUID","firstPrefix","secondPrefix","csiDir","copyNewAttachmentsToAppFolder","attachmentDocument","Directory","write_blob","directory","Data","recursive","uploadImages","uploadedImages","imagesOnServer","successfulImages","removeBatchErrorsAndPrint","partitionBatchErrors","getImageAttachmentsFromAttachmentIds","idList","getImages","all","getAttachmentCardData","getImageViewerItems","attachmentData","src","getFilesystemPermission","Filesystem","publicStorage","getFirstImageAttachment","attachmentIdList","getImageAttachment","showOrDownloadAttachment","attachmentCard","absolutePath","filePath","responseType","Blob","link","download","click","revokeObjectURL","list","results","array","getAttachmentContextFromEntityPage","entityPage","isCorrectiveWork","getEntityAttachmentIdList","itemInDb","itemModelInDb","issueInDb","issueItemCommentInDb","correctiveWorkItemInDb","regularWorkItemInDb","workOrderCorrectiveItemInDb","workOrderRegularItemInDb","workOrderCorrectiveItemCommentInDb","workOrderRegularItemCommentInDb","updateEntityInUI","updatedItemInServer","updatedIssueInServer","updatedWorkOrderInServer","deleteEntityAttachments","attachmentIds","deleteAPICalls","APIResponses","canUpdateEntityAttachments","canEdit","isAttributeChar","isAttributeNumeric","isAttributeTemporal","isAttributeSelect","isAttributeSelectOption","attributeSelectToString","opt","cachedOption","join","attributeTemporalToString","_hoisted_1","class","_hoisted_2","_hoisted_3","dialogRef","onDialogOK","easterEggsEnabled","onDialogClose","_component_q_card_section","_component_q_card_actions","_component_q_card","_component_q_dialog","ref_key","persistent","$t","SfxExternal","_","SfxBtn","onClick","QDialog","cancelButtonText","String","confirmButtonText","emits","onDialogCancel","SfxEmptyPage","missingEntity","SfxBtnOutline","imgSrc","httpCode","btnText","__emit","buttonLabel","cardStyle","btnClick","_component_q_img","fit","$slots","QCard","_component_i18n_t","SfxDialogHttpBase","keypath","tag","_hoisted_4","Array","btnCancel","btnRemove","SfxCardAttachment","entityDesignation","searchMap","filteredAttachments","getPartialMatches","searchBarDisabled","onHide","$event","SfxTopNavigation","onClose","onContextSelect","SfxSearchBar","SfxSkeleton","associationType","elementsSelected","leftButtonText","leftButtonFunction","clickAddIdentifier","dialogClose","rightButtonText","rightButtonFunction","clickDisassociate","itemClick","itemClicked","indexOfItem","lastIndex","determineClass","SfxCardObject","areUnsavedChanges","onDismiss","Function","elementSelected","issuesList","correctiveWorkOnItem","loadingData","unsubmittedWorkOnIssue","goToIssue","clickCancel","determineRightButtonText","issueClicked","changesDb","checkUnsavedChanges","goToIssueRoutePush","goToIssueList","goToIssuesListRoutePush","clickCorrectIssue","handleUnsubmittedWork","issueClick","SfxCardIssueCondensed","unsubmittedWorkList","onDialogHide","bodyText","btnDontShow","btnGotIt","untitledWorkLabel","goToUnsubmittedWork","unsubmittedWorkAttachments","doNotShowAgain","unsubmittedWorkCardData","entityData","workOrderId","issueImage","issuePriority","iconRowRaw","iconRow","labelProcedureSteps","labelNone","countTotalProcedures","getIconRow","workOrderPriority","getIssuePriority","priorityInDb","getWorkDomain","workDomainInDb","getUnsubmittedImage","unsubmittedImageId","unsubmittedImage","_directive_truncate_middle","SfxCardCondensed","hasImg","SfxDataPoint","countTotalIssues","textRaisedIssues","textHowToProceed","labelReviewWork","labelRaiseIssue","reviewWork","raiseNextIssue","SfxCardIssueUnsubmittedWork","workOrders","notPerformedWorkOrderList","performedWorkOrderList","currentSelection","onlyOneWorkOrder","openWorkOrder","getRightButtonText","assignWorkOrderCardData","workOrderData","assignCorrectiveWorkOrderCardData","performedWorkData","allWorkPerformed","goToWorkOrderList","goToPerformingWork","issuesData","seePerformedWork","performedWorkId","cardClick","workOrderClicked","SfxCardWorkOrderForEntity","workPerformed","entityType","filteredWorkOrders","translatedEntity","handleCreateWorkOrder","idSelector","_component_q_toolbar_title","SfxBtnIcon","CLOSE_LARGE","SfxInfiniteScroll","slotProps","SfxCardWorkOrder","_hoisted_5","contentConfirm","contentUndone","inputLabel","checkboxLabel","rejectButtonText","input","inputRef","checkboxVal","handleDialogOk","validate","checked","_component_q_checkbox","ACCEPT","modelValue","SfxInput","autogrow","autofocus","onKeyup","btnSearchAttachments","btnUploadNewFile","handleClick","number","titleAddComment","labelAddComment","labelComment","btnConfirm","comment","addComment","issueItemComment","correctiveWorkItemComment","regularWorkItemComment","workOrderCorrectiveItemComment","workOrderRegularItemComment","SfxImageUploader","checkboxSize","labelDescription","checkBoxAllowDownloads","btnSave","originalDescription","allowDownloads","saveDisabled","dense","currentPassword","newPassword","repeatNewPassword","errorMessage","validDateRule","setNewPassword","hashResult","updatePassword","current_password","_component_q_form","onSubmit","SfxInputPassword","rules","unlockKey","setNewUnlockKey","_hoisted_6","html","confirmButtonClasses","rejectButtonClasses","dialogWidthStyle","useDevtoolsStore","devToolsInitiated","devToolsHost","devToolsPort","configureDevtools","connectDevtools","connect","devtoolsStore","reset","go","confirm","dialogResult","confirmationDialog","cancel","onReset","capitalize","modelModifiers","btnCancelLabel","btnOkLabel","itemClassFinished","attributesFinished","itemListFinished","itemAttributeValuesFinished","issuesFinished","workFinished","commentsFinished","identifiersFinished","usersFinished","allLoaded","errorInFetches","dataFetchList","attributesData","attributesTotal","every","itemAttributeData","itemAttributeValuesTotal","issueAll","workData","workTotal","commentData","commentTotal","identifierData","handleCancel","unwatchDataLoad","handleOk","batchRequest","dataLoaded","_component_q_icon","DOWNLOAD","REJECT","_hoisted_7","_hoisted_8","CHECKBOX_CHECKED","issueOnItemAction","correctiveAction","timeEstimate","requiresIsolation","requiresShutdown","correctiveActionEl","correctiveTimeRequirementsEl","correctiveAdditionalRequirementsEl","submitData","issueAction","forceShow","SfxIssueCorrectiveAction","SfxIssueTimeRequirements","SfxIssueAdditionalRequirements","MAX_SENTRY_TAG_VALUE","CHECKBOX_SIZE","titleLabel","contextLabel","subjectLabel","longTextLabel","noticeLabel","company","bugLabel","sendLabel","cancelLabel","subjectModel","longTextModel","isBug","detailedMessage","piniaTopNavigationPath","currentRouterPath","currentRoute","contextWithDefaults","cleanContext","sanitize","cleanDesignation","saveData","feedbackData","tags","userUUID","bug","table","contextVal","immediate","SfxTextarea","placeholder","entityOldType","entityOldName","entityNewType","entityNewName","oldEntity","newEntity","previousAssociation","entity_old","newAssociation","entity_new","btnChangeAssociation","INFORMATION","imageSize","IMAGE_ERROR","inputRequired","inputInitial","inputTextArea","storeItem","itemClassRaw","itemIconsRaw","icons","itemThumbnailRaw","thumbnail","itemThumbnail","itemClassDesignation","workDone","assignData","assignItemClass","assignIconRow","assignThumbnail","issuePriorityData","newItem","btnClone","SfxCardItemCondensed","clickable","buttonText","closeIcon","_component_q_space","_directive_close_popup","ClosePopup","issueEventCard","labelWorkStatement","getImagesFromAttachments","imgAttachments","SfxCardIssueEventWorkRejected","manager","SfxImageGallerySmall","_hoisted_9","_hoisted_10","withIssues","contentIssueOne","contentIssueTwo","contentIssueThree","widthDialog","dontAskAgain","onConfirm","SfxCardWorkOrderCondensed","dialogStyle","modelName","itemName","showHint","_hoisted_11","startTime","endTime","startTimeFormatted","endTimeFormatted","visibleColumns","filterTerm","searchInColumn","canSaveConfigText","configLimitReachedText","configExplanationText","btnLoadSelected","btnLoadDefault","btnOverwriteSelected","btnDeleteSelected","loadConfigActive","deleteConfigActive","overwriteConfigActive","actionBtnText","actionBtnDisable","newConfigName","selectedConfigIndex","savedConfigs","currentTableColumnConfig","configName","isFavourite","hasCurrentConfig","allowNewConfigs","hasSavedConfigs","showSeparator","dialogIntroText","paddingBottom","setActionBtnProperties","saveCurrentConfig","currentConfigName","arrayLength","getFavouriteIcon","FAVOURITE","NOT_FAVOURITE","updateFavourite","savedConfig","favouriteConfig","loadSelected","deleteConfig","overwriteConfig","actionBtnOperations","selectedConfig","addInputFieldBorder","deleteIconColor","saveIconColor","resetSelections","SAVE","padding","SfxSeparator","dimmed","configuration","readonly","amount","undoButtonName","callbackFn","callbackDismissFn","timerTick","setUndoBtn","timeout","secondsElapsed","timerData","removeTimerTick","buttonElement","getElementsByName","setProperty","hide","clearInterval","dismissNotify","_component_q_btn","TIMED_UNDO","bodyDescription","labelCheckbox","warningBorder","btnConfirmColor","originalConfig","currentConfig","isEqualToOriginal","deepEqual","firstSectionTitle","secondSectionTitle","thirdSectionTitle","workOrdersDescription","issuesDescription","performedWorkDescription","skipListDescription","locationSelectItemDescription","internetDescription","prioritizeDataDescription","downloadAllDescription","notificationsDescription","darkModeDescription","tutorialDescription","trinaryTrueLabel","trinaryFalseLabel","trinaryIndeterminateLabel","locationSelectItemTrueLabel","locationSelectItemFalseLabel","internetTrueLabel","internetItemFalseLabel","darkModeTrueLabel","darkModeFalseLabel","darkModeIndeterminateLabel","easterEggsTrueLabel","easterEggsFalseLabel","discardData","SfxToggleSettings","trinary","PERFORM","OPEN","ON","SYSTEM","SfxFormSubmit","onDiscard","selectLanguage","languageList","isExternallyLoggedIn","disableUnusedLanguages","showPasswordChangeDialog","changePasswordDialog","showUnlockKeyChangeDialog","changeUnlockKeyDialog","USER_ME","SfxCurrentUserDisplay","SfxSettingsField","SfxBtnLink","SfxSelect","informationTab","configurationTab","rightTabs","_component_q_header","_component_q_tab_panel","_component_q_tab_panels","_component_q_page","_component_q_page_container","_component_q_footer","_component_q_layout","container","view","SfxTabs","tab","SfxTab","noCaps","onScroll","onScrollend","swipeable","animated","SettingsInformation","onCloseDialog","SettingsConfiguration","bodyContent","entitiesRemoved","entitiesAdded","entitiesToDo","entitiesTotal","labelTitle","labelRemoved","labelAdded","labelToDo","labelTotal","labelSaveChanges","labelBtnCancel","labelBtnSave","SfxCardWorkOrderIssueCondensed","SfxCardWorkOrderItemCondensed","promisifyDialogChainObject","chainObject","onOk","onCancel","genericCommonDialogCreator","componentProps","messageDialog","SfxDialogMessage","permissionDialog","SfxDialogDevicePermission","SfxDialogConfirmation","inputDialog","SfxDialogInput","checkBoxDialog","SfxDialogCheckBox","unsavedChangesDialog","confirmationDialogOption","connectVueDevtoolsDialog","systemDialog","SfxDialogSystemNotification","todoDeleteAllDialog","SfxDialogToDoDelete","tableConfigurationsDialog","SfxDialogTableConfigurations","changeRequestForRemoval","dialogOptions","deleteImage","selectModel","SfxDialogSelectModel","unknownIdentifierDialog","SfxDialogIdentifierUnknown","alreadyAssociatedIdentifierDialog","SfxDialogIdentifierExists","itemCloneDialog","SfxDialogItemClone","discardUnsubmittedWorkDialog","confirmDialogText","warningDialog","SfxDialogWarning","discardWorkDialog","SfxDialogDataFetch","attachmentDetailsDialog","SfxDialogAttachmentDetails","addAttachmentsDialog","SfxDialogAddAttachments","imageDeleteDialog","SfxDialogImageDelete","unsubmittedIssuesDialog","SfxDialogUnsubmittedIssues","showFeedback","overwriteFeedbackData","SfxDialogFeedback","showWelcomeDialog","technician","product","attachmentListDeleteDialog","SfxDialogListAttachmentDelete","identifierListDialog","SfxDialogListIdentifier","workOrderListDialog","SfxDialogListWorkOrder","issueListDialog","userConfirmed","SfxDialogListIssue","issueListManagerDialog","SfxDialogListIssueManager","unsubmittedWorkIssueListDialog","SfxDialogListUnsubmittedWorkIssues","unsubmittedWorkListDialog","SfxDialogListUnsubmittedWork","workOrderListSelectDialog","SfxDialogListWorkOrderSelect","closeIssueNotCorrectedDialog","closeIssueCorrectedDialog","supersedeIssueDialog","relatedUnsubmittedWorkDialog","authenticationErrorDialog","SfxDialogAuthenticationError","noWorkspacesErrorDialog","SfxDialogNoWorkspaces","offlineErrorDialog","SfxDialogOffline","showHTTP400Dialog","SfxDialogHttp400","showHTTP401Dialog","SfxDialogHttp401","showHTTP403Dialog","SfxDialogHttp403","showHTTP404Dialog","SfxDialogHttp404","showHTTP408Dialog","SfxDialogHttp408","showHTTP500Dialog","SfxDialogHttp500","showHTTP501Dialog","SfxDialogHttp501","showHTTP502Dialog","SfxDialogHttp502","showHTTP503Dialog","SfxDialogHttp503","showHTTP504Dialog","SfxDialogHttp504","undoNotificationDialog","SfxDialogUndoNotification","userSettingsDialog","SfxDialogUserSettings","SfxDialogChangePassword","SfxDialogChangeUnlockKey","editCorrectionInfoDialog","SfxDialogEditCorrectionInfo","rejectedCorrectiveWorkDialog","SfxDialogRejectedCorrectiveWork","rejectIssueDialog","acceptPerformedWorkDialog","acceptCorrectiveWorkDialog","SfxDialogAcceptCorrectiveWork","rejectPerformedWorkDialog","SfxDialogRejectPerformedWork","rejectCorrectiveWorkDialog","unsavedWorkOrderDraftDialog","addCommentDialog","SfxDialogAddComment","workMustBeReviewedDialog","translatedOperation","closeWorkOrderCompletedDialog","closeWorkOrderNotCompletedDialog","confirmWorkOrderEntitiesModification","SfxDialogWorkOrderEntities","confirmRemoveIssueFromWorkOrderDialog","SfxDialogRemoveIssueFromWorkOrder","confirmRemoveItemFromWorkOrderDialog","SfxDialogRemoveItemFromWorkOrder","removeItemFromWorkOrderDialog","SfxDialogWorkOrderRemoveItem","removeIssueFromWorkOrderDialog","SfxDialogWorkOrderRemoveIssue","getExtendedMenuData","ZONES","LAYOUTS","AREAS","LOCATIONS","MODELS","PERFORMED_WORK_LIST","getExtendedMenuDataManager","HOME","ANALYTICS","ADMINISTRATION","externalLink","AUDIT","AUDIT_ACCEPTED","CHANGE_REQUESTS","WORK_DOMAINS","WORKDOMAINS","getTranslatedEntityForPage","isPlural","getTranslatedEntityForAttachment","fetchWorkspaceListData","entities","getWorkspaceListData","newDb","fetchUsersForWorkspaceListData","getUsersForWorkspaceListData","fetchUserRolesListData","callUrl","USER_ROLES","lastCall","fetchItemListData","getItemListData","fetchItemAttributeCharValuesListData","ITEMS_ATTRIBUTES_CHAR_VALUES_LIST","fetchItemAttributeNumericValuesListData","ITEMS_ATTRIBUTES_NUMERIC_VALUES_LIST","fetchItemAttributeSelectValuesListData","ITEMS_ATTRIBUTES_SELECT_VALUES_LIST","fetchItemAttributeTemporalValuesListData","ITEMS_ATTRIBUTES_TEMPORAL_VALUES_LIST","fetchItemClassListData","ITEM_CLASSES_LIST","getItemClassListData","fetchItemModelListData","ITEM_MODELS","getItemModelListData","fetchIssuePriorityListData","ISSUE_PRIORITIES","getIssuePriorityListData","fetchIssueOnItemListData","ISSUES_ON_ITEM","getIssuesOnItemList","getIssueOnItemListData","fetchIssueOnItemActionsListData","ISSUE_ON_ITEM_ACTIONS","fetchIssueOnItemCommentListData","ISSUES_ON_ITEM_COMMENTS","fetchAttributeCharListData","ATTRIBUTES_CHAR_LIST","fetchAttributeNumericListData","ATTRIBUTES_NUMERIC_LIST","fetchAttributeSelectListData","ATTRIBUTES_SELECT_LIST","fetchAttributeSelectOptionsListData","ATTRIBUTES_SELECT_OPTIONS_LIST","fetchAttributeTemporalListData","ATTRIBUTES_TEMPORAL_LIST","fetchCorrectiveWorkOnItemListData","PERFORMED_WORK_CORRECTIVE_ITEM_LIST","getCorrectiveWorkOnItemList","getCorrectiveWorkOnItemListData","fetchRegularWorkOnItemListData","PERFORMED_WORK_REGULAR_ITEM_LIST","getRegularWorkOnItemListData","fetchWorkDomainGlobalListData","fetchWorkDomainWorkspaceListData","workDomainId","getWorkDomainWorkspaceListData","fetchWorkOrderCorrectiveItemListData","WORK_ORDER_CORRECTIVE_ON_ITEM","getWorkOrderCorrectiveItemListData","fetchWorkOrderCorrectiveItemCommentListData","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS","fetchWorkOrderRegularItemListData","WORK_ORDER_REGULAR_ON_ITEM","getWorkOrderRegularItemListData","fetchWorkOrderRegularItemCommentListData","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS","fetchWorkOrderPriorityListData","WORK_ORDER_PRIORITIES","getWorkOrderPriorityListData","fetchIdentifierListData","IDENTIFIERS_LIST","fetchAttachmentsForEntity","getAttachmentFunc","fetchAttachmentsForItem","ITEMS_ID_ATTACHMENTS_LIST","fetchAttachmentsForItemModel","itemModelId","ITEM_MODELS_ID_ATTACHMENTS_LIST","fetchAttachmentsForCorrectiveWorkOnItem","workId","PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_LIST","fetchAttachmentsForRegularWorkOnItem","PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_LIST","fetchAttachmentsForIssueOnItem","ISSUES_ON_ITEM_ATTACHMENTS_LIST","fetchAttachmentsForIssueOnItemComment","commentId","ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS","fetchAttachmentsForCorrectiveWorkOrderItem","WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS","fetchAttachmentsForRegularWorkOrderItem","WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS","fetchAttachmentsForCorrectiveWorkOrderItemComment","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS","fetchAttachmentsForRegularWorkOrderItemComment","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS","postAttachmentForEntity","postAttachmentForEntityBatch","fetchAttachmentsListForEntity","getAttachmentForEntity","hashPassword","pass","salt","hashUnlockKey","prevLabel","nextLabel","doneLabel","startHelpTour","steps","setOptions","showBullets","disableInteraction","hidePrev","helpTourNotImplemented","pageName","getEntityWithDesignation","correctedName","getIdentifierAssociationType","getIdentifierEntityName","getIssuePriorityColor","getIssuePriorityData","issuePriorityId","priorityInCache","issuePriorityInDb","priorityMutable","userHasPermissionToCreateIssue","userHasPermissionToUpdateIssue","getIssueData","issueInCache","mutableIssue","getOverdueTime","NEGATIVE_INFINITY","currentDate","POSITIVE_INFINITY","setOverdueTime","overdueTime","priorityData","getIssueCardData","issueDoc","getAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue","actionableItem","correctiveWorkOrderData","getHighestPriorityFromIssueList","prioritiesMap","findByIds","priorities","prev","current","getLatestIssueFromCache","issuesInCache","issuesOnItem","getLatestIssueOnItem","issuesOnItemInDb","sortIssuesOnPriority","dir","sortIssuesOnRaised","sortOpenIssuesData","sortClosedIssuesData","sortIssueData","getIssueCardTime","dateTime","daysToCorrect","getOpenCorrectiveWorkOnItemForIssue","correctiveWorkOnItemDoc","correctiveWorkOnItemMutable","getOpenCorrectiveWorkOnItemFromServer","$or","unreviewedCorrectiveWork","getAcceptedCorrectiveWorkOnItemFromServer","hasAcceptedOrUnreviewedCorrectiveWorkOnItemForIssue","correctiveWorkOnItemCount","hasAcceptedCorrectiveWorkOnItemForIssue","hasCorrectiveWorkForIssue","correctiveWorkCount","filterParams","issue__id","concluded_dt__isnull","mainParams","page","page_size","isIssueInRaisedState","issueClosed","issueInWorkOrder","rejectIssue","userIsAllowed","canIssueBeRejectedOrSuperseded","rejectReason","undoMessage","rejectIssueOperations","issueComment","saveIssueOnItemComment","updatedIssue","issueCardData","rejectedIssue","rejectingComment","rejectOperation","acceptedCorrectiveWork","userHasPermissionToDeleteIssue","userHasPermission","closeIssue","closingComment","closeIssueOperations","modifiedIssue","closedIssue","hasWorkDomainToRaiseIssue","workDomainDocuments","issuePriorityDocuments","validWorkDomainOptions","deleteIssue","issueHistory","hasMoreThanOneUser","user_id","getSupersededIssueData","issueInServer","commentText","commentImages","commentInServer","insert","getIssueCommentData","issueCommentInCache","commentInDb","mutableComment","getIssueCommentListForIssueOnItem","commentList","commentInCache","commentsInDb","commentMutable","commentsInServer","getCommentForClosedIssueOnItem","issueCommentList","getIssueOnItemActionForIssue","actionInDb","actionMutable","actionInList","actionInCache","getIssuesOnItemForCorrectiveWorkOrder","issuesForWorkOrder","getIssueCardIcons","isCorrected","isAccepted","removeIssueFromWorkOrder","updateIssueOnItemWithNewWorkOrderId","toIssueTableData","issueRaw","rowImage","addIssueTableStatusData","$ne","workOrderIcon","column","sortData","correctiveWorkStatus","REJECT_CIRCLE","ignoreRendering","getItemModelData","itemModelInCache","itemModelInDB","getItemData","itemInCache","mutableItem","getItemDataByIds","itemIds","missingIds","foundItems","itemsInDbMap","itemsInDb","getItemCardBaseData","getIssuePriorityDataForItem","getWorkOrderPriorityDataForItem","sortItemData","cachedWorkOrders","toItemTableData","itemRaw","itemModelData","hasIdentifier","getItemTableIdentifiers","getItemTableAttributeCharValues","getItemTableAttributeNumericValues","getItemTableAttributeSelectValues","getItemTableAttributeTemporalValues","addItemTableStatusData","locationId","hasItemIdentifier","attributeIDs","attributeMap","attributeID","issueIcon","getItemTableAttributesColumns","cols","addItemTableCharColumns","addItemTableNumericColumns","addItemTableSelectColumns","addItemTableTemporalColumns","attr","emptyText","row","selectAttr","temporalAttr","getItemClassData","itemClassId","itemClassInCache","itemClassInDB","itemClassMutated","COLOR_LIST","lerp","v0","v1","hexToRgb","hexString","x","parseInt","calculateRGBLerp","color1","color2","percentage","r1","g1","b1","r2","g2","b2","g","getColorFromGradient","colorList","numberOfColors","minVal","roundTo2","maxVal","adjustedRange","adjustedPercentage","num","round","EPSILON","isEmptyOrNull","val","getPrecision","isNaN","isFinite","valueAfterDecimal","decimalStep","toFixed","blobToBase64","reader","FileReader","readAsDataURL","base64ToBlob","base64","escapeHTML","badString","filterOutUndefined","objArray","obj","getContrastingColorForBackground","background","luminance","extractInitials","fullName","delimiter","maxInitials","initialsRegex","regexMatches","lastInitial","initials","initial","toUpperCase","determineProfilePictureColor","sum","partialSum","charCode","codePointAt","colorIndex","selectedColor","numberToPriorityClass","primitiveValueSearch","haystack","toLowerCase","lowerTerms","showSuccessNotification","translateMessage","SUCCEEDED","showErrorNotification","showInfoNotification","showWarningNotification","showDragAndDropFail","showDragAndDropEmptyFiles","showDragAndDropEmptyFile","showMaxFileSizeExceededNotification","maxFileSizeInMB","maxFileSize","showMaxProfilePicSizeExceededNotification","showFileTypeNotAllowedNotification","allowedFileTypes","fileTypes","showFileTypeNotAllowedPartialNotification","fileTypesNotAllowed","fileNames","f","filesNotUploaded","multiLine","showIssueDownloadingFileNotification","showNotImplementedNotification","WRENCH","showUnsubmittedWorkNotification","UNSUBMITTED_WORK","LIST_DISPLAY","iconColor","showAttachmentUploadingNotification","singleImage","showEasterEggNotification","WIZARD_WHITE","showRemovedTodoNotification","removedItem","showRevertSelectionNotification","identifyAssociatedUndo","simpleUndoNotification","identifyDissociateUndo","showUserNotification","username","notifyConfig","avatar","ISSUES_RAISED","ALL_RAISED","translateEventName","ASSIGNED_WORK_ORDER","COMMENTED_WORK_ORDER","COMMENTED_PERFORMED_WORK","REJECTED_ISSUE","REJECTED_WORK","ACCEPTED_WORK","CORRECTED_ISSUE","ADDED_ISSUE","getPriorityColor","filterOldNotifications","isSystemNotification","timeSinceReceived","compareData","isSystemCardNotification","showBatchErrors","errors","hasSuccessEntries","errorList","e","translationTemplate","undoClickedStatus","undoClick","dismissHandler","selectedIdx","clampImageIdx","selectedImage","isZoomedIn","pinchZoomTarget","pinchZoom","idx","onGoTo","onToggleZoom","destroy","newIsZoomedIn","$el","enable","flush","_component_q_carousel_slide","_component_q_carousel_control","_component_q_carousel","_component_q_list","maximized","QImg","infinite","control","CHEVRON_LEFT","$refs","carousel","previous","CHEVRON_RIGHT","ratio","formatDate","notificationsStore","pageTitle","topNavigationContainer","readTab","unreadTab","unreadCount","unreadNotifications","tabs","readNotifications","scrollAreaHeight","topNavigationHeight","offsetHeight","allNotifications","isRead","selectedNotificationsList","isMultipleSelectionOn","showUndo","addBorder","handleContextSelect","contextMenuItem","helpTour","markRead","markUnread","handleNotificationClick","selectMultipleNotifications","showSystemDialog","goToRelation","indexOf","idxAll","relationRepresentation","deselect","backupArray","switchTab","currentTab","_component_q_scroll_area","_directive_touch_hold","visible","SfxCardNotificationSystem","mouse","SfxCardNotificationUser","TouchHold","disableEditImage","loadingImages","spinnerText","entityImages","getEntityData","setTitleAndBreadcrumbData","entityBreadcrumb","photoGallery","getItemBreadcrumbs","getIssueItemBreadcrumbs","getCorrectiveWorkItemBreadcrumbs","getRegularWorkItemBreadcrumbs","getWorkOrderBreadcrumbs","highlight","deep","SfxTopNavigationManager","SfxBreadcrumbs","SfxSpinner","SfxImageViewerManager","statusColumnCount","entitiesIncluded","entitiesPerformed","isDisplayingToDoEntities","isReadOnly","expose","__expose","sfxTableAvailable","sfxTableCompleted","filteredAvailableDataCount","filteredDataCount","filteredCompletedDataCount","issueAvailableList","issueCompletedList","issueTableAvailableData","issueTableCompletedData","noData","noMatchingData","mainColumn","uniqueColumn","mainColumnLabel","selectionEnabled","selected","initialSelected","initialSelectIds","selectIds","issueColumns","searchable","align","statusColumnsSort","performedRowClass","resetSelection","fetchAPIData","issueClasses","assignIssueTableData","issueWithOpenCorrectiveWorkIds","skipIds","selectedIssues","preSelectState","skipIssueIds","issueDocuments","$and","$nin","fetchError","total","SfxTable","columns","loading","enablePreSelectedMode","QIcon","itemsAvailableList","itemsCompletedList","itemsTableAvailableData","itemsTableCompletedData","itemColumns","arr","attributeColumns","assignItemTableData","selectedItems","skipItemIds","itemClasses","filteredItemClassIds","itemDocuments","progressState","workOrderEntityAssignmentRef","contentStyle","btnResetLabel","btnSaveLabel","restrictedLabel","performedCount","selectionSame","workOrderEntityComponent","SfxWorkOrderItemAssignment","SfxWorkOrderIssueItemAssignment","saveSelection","totalEntities","totalEntitiesIds","SfxTableToggle","subscription","CHANGE_PASSWORD","greedy","QForm","CHANGE_UNLOCK_KEY","internetFalseLabel","CONFIGURATIONS","overlay","ScanType","nfcScan","qrScan","CAMERA_TURN_OFF_DELAY","textStyles","newIdentifier","scanTypeToggle","nfcEnabled","cameraActiveStatus","pauseScanning","aboveBarcode","belowBarcode","bluetoothClass","screen","lt","md","barcodeStyle","aboveBarcodeHeight","belowBarcodeHeight","magicNumber","getDataFromScan","fixedValue","fixedType","CAMERA","getText","getBarcodeFormat","QR_CODE","NFC","scanData","associateIdentifier","goToIdentifier","identifierAddSource","identifierAddType","foundIdentifier","canChange","canChangeAlreadyExistingIdentifier","returnData","oldAssociation","oldEntityType","oldEntityName","scanDataRouting","unknownIdentifierScanned","areaId","LOCATION","JSON","stringify","setNfcEnabled","nfcStatus","cameraIsOff","goToItems","goToAreas","scanValNew","SfxScannerBarcode","onDecode","onCameraStop","SfxScannerNfc","onNfcEnabled","onPassData","SfxScannerKeyboard","onRead","EXTERNAL","BLUETOOTH","issueEntity","pageSubtitle","existingIssuesLabel","workDomainLabel","selectPriorityLabel","issueDescriptionLabel","correctionInfoLabel","issuesOnEntity","issueOnEntityTotal","issueOnEntityPriorityColor","issueOnEntityPriorityLabel","issueOnEntityTimeLabel","workDomainModel","workDomainOptions","issuePrioritiesList","issuePrioritiesListFiltered","selectPriorityModel","issueTitle","issueDescription","disableSubmit","unSavedChanges","assignValidWorkDomains","handleUnsavedChanges","showIssuesDialog","getIssuesForEntity","allIssuesOnEntity","highestPriorityIssue","issueDateTime","latestTemporalData","createIssue","issueCreated","saveUnsubmittedIssueData","createActions","correctiveActionText","issueID","issueActionCreated","issueToSend","clearCorrectiveInformation","correctiveActionHadData","forceHide","_component_q_item","SfxEntityReference","itemProps","SfxPriorityLabel","SfxTextareaTitled","SfxIssueBase","copiedItem","currentDesignation","overviewTab","locationTab","dataTab","attachedTab","itemIdLabel","designationLabel","itemClassLabel","currentItemId","currentItemClass","currentItemModel","currentItemChar","currentItemNumeric","currentItemSelect","currentItemTemporal","currentItemAttributes","allItemIds","uniqueItemIdRule","itemClassList","getCopiedItemItemClass","foundItemClass","createdItem","createItem","updateItemAttributes","stringifyPayload","getItemCreationUserErrors","errorForUsers","updateItemAttributeChar","updateItemAttributeNumeric","updateItemAttributeSelect","updateItemAttributeTemporal","filteredData","handlerAttributePatchError","isArray","stringifiedItem","stringifiedAttributes","filteredAttributes","resetAttributes","getSelectLabel","getSelectValue","getSelectAttributeLabel","getSelectAttributeValue","getNewItemAttributeData","newItemClass","charIDs","numericIDs","selectIDs","temporalIDs","charData","numericData","selectData","temporalData","selectDataWithOptions","populateCopiedItemValues","populateCopiedItemChar","populateCopiedItemNumeric","populateCopiedItemSelect","populateCopiedItemTemporal","charDataFromAPI","attrVal","foundAttr","numericDataFromAPI","selectDataFromAPI","temporalDataFromAPI","selectAttributeValueHandler","selectAttribute","updateSelectAttributeValueHandler","existsAttributeWithValue","updateItemClass","userWantsToContinue","itemClassDocuments","previousItemClass","maxlength","clearable","step","multiple","SfxTimeEdit","itemDesignation","canGoToOverview","itemModelList","filteredItemModels","itemModel","contentContainer","getItemModelsData","itemModels","getItemClassDesignation","modelClick","modelLongClick","SfxCardModel","showOverlay","SfxOverlay","showIdentify","contextSource","subtitleHtml","pageClasses","hideSeparator","hideNotifications","contentComponent","IdentifyOverlay","contentComponentProps","showIssueCreate","IssueCreateOverlay","showConfigurations","ConfigurationsOverlay","showChangePassword","ChangePasswordOverlay","showChangeUnlockKey","ChangeUnlockKeyOverlay","showNotifications","SfxOverlayNotifications","showImageView","SfxImageViewOverlay","img","showItemCreate","ItemCreateOverlay","showPhotoGalleryOverlay","_disableEditImage","SfxPhotoGalleryOverlay","showWorkOrderEntityList","SfxWorkOrderEntityAssignment","userHasPermissionToCreatePerformedWork","userHasPermissionToUpdatePerformedWork","getLatestCorrectiveWorkOnItem","issuesIds","limit","getLatestRegularWorkOnItem","regularWorkOnItem","getLatestPerformedWork","latestCorrectiveWork","latestRegularWork","filterInvalidWorkDomains","workDomains","issuePriorityList","filteredWorkDomains","workDomainsAllowedFromItem","getWorkDomainRestrictionsFromItemClass","wd","workDomainsWithIssuePriorities","getCorrectiveWorkOnItemData","correctiveWorkId","correctiveWorkInCache","correctiveWorkInDB","getRegularWorkOnItemData","regularWorkId","regularWorkInCache","regularWorkInDB","getRaisedIssuedFromRegularWork","issuesInDb","acceptCorrectiveWorkOnItem","modifiedWork","acceptedWork","acceptRegularWorkOnItem","rejectCorrectiveWorkOnItem","rejectedWork","rejectRegularWorkOnItem","saveCorrectiveWorkOnItemComment","saveRegularWorkOnItemComment","getCorrectiveWorkCommentListForCorrectiveWorkOnItem","getRegularWorkCommentListForRegularWorkOnItem","getCorrectiveWorkOnItemCommentData","getRegularWorkOnItemCommentData","getUnassessedWorkStats","regular","$not","corrective","getCommentForClosedCorrectiveWorkOnItem","getCorrectiveWorkOnItemListForWorkOrder","correctiveWorkMutable","correctiveWorkInServer","countPerformedCorrectiveWorkOnWorkOrder","records","getRegularWorkOnItemListForWorkOrder","regularWorkList","regularWorkMutable","regularWorkInServer","sortPerformedWorkData","performedWorkOnItemData","getRandomInt","random","numberOfLetters","letterCount","fromCodePoint","numberOfNumbers","numberCount","getRandomID","chars","getRandomCoordinates","latMin","latMax","lngMin","lngMax","lat","lng","getTimeOfEvent","hours","showScrollbar","hideScrollbar","getGreeting","userEmail","currentHours","getHours","appropriateGreeting","withTime","year","getFullYear","month","getMonth","padStart","getDate","dateFormatted","getUTCHours","minutes","getUTCMinutes","getNotificationMsg","sysTimeStamp","getDeadlineMsg","past","weeks","getTemporalInfo","timeStamp","setSeconds","NaN","shift","hour","sysTime","UTC","currentDateTime","offset","offsetMinutes","abs","offsetHours","offsetDays","getTimeRequirement","hoursAndMinutes","minute","getDaysRequirement","getHoursRequirement","getHourMinuteRequirement","getUnsubmittedWork","changeDb","getUnsubmittedRegularWorkForEntity","$eq","getUnsubmittedCorrectiveWorkForIssue","issueIds","deleteUnsubmittedWorkAttachments","unsubmittedAttachmentIds","bulkRemove","getUnsubmittedAttachments","unsubmittedAttachmentsMap","saveUnsubmittedAttachments","getUnsubmittedWorkCardData","getUnsubmittedWorkEntityData","unsubmittedWorkIssue","unsubmittedWorkIssueDocuments","itemInDbDocument","issueInDbDocument","SERVER_ERROR_INCORRECT_PASSWORD","getPasswordRequirements","isIncorrectPassword","userId","userInCache","userInDB","userMutable","getUserWithAvatarData","addUserAvatarToUser","getUserAvatarData","userAvatar","avatarInCache","avatarInDB","getUserAvatarDataWeb","saveUserAvatar","saveUserAvatarWeb","newUserAvatar","getWebUserAvatarURL","USER_ID_IMAGE","getWorkDomainWorkspaceData","workDomainInCache","workDomainMutable","userHasPermissionToCreateWorkOrder","userHasPermissionToUpdateWorkOrder","getWorkOrderCorrectiveItemData","workOrderCorrectiveItemId","workOrderInCache","workOrderMutable","getWorkOrderCorrectiveItemCommentData","workOrderCommentInCache","getWorkOrderCorrectiveItemCommentListForWorkOrderCorrectiveItem","saveWorkOrderCorrectiveItemComment","getWorkOrderRegularItemData","workOrderRegularItemId","getWorkOrderRegularItemCommentData","getWorkOrderRegularItemCommentListForWorkOrderRegularItem","saveWorkOrderRegularItemComment","getProgressIndicatorStateLabel","nonRejectedCount","totalCount","getDeadlineState","completedWorkCount","totalWorkCount","daysSpent","daysRemaining","daysPerWork","workToDo","daysNeeded","sortWorkOrderCardData","sortWorkOrderClosedCardData","closedStatus","sortWorkOrderClosedStatus","sortWorkOrderNotClosedCardData","aTotal","bTotal","aCount","bCount","aCompleted","bCompleted","sortWorkOrderPriority","sortWorkOrderNotCompletedCardData","sortWorkOrderDeadlineCardData","deadlineStatus","sortWorkOrderDeadlineStatus","aTime","bTime","aDate","bDate","sortWorkOrderDeadline","timeDifference","rankDifference","getWorkOrderCorrectiveCardData","isItem","getWorkOrderRegularCardData","itemsData","getWorkOrderCorrectiveTableData","getWorkOrderRegularTableData","getHighestPriorityFromWorkOrderList","getOpenWorkOrders","$lt","getOpenAndAssignedWorkOrders","closeWorkOrder","isCorrective","workOrderState","localUserSettingsStore","userResponse","closeWorkOrderOperations","closeWorkOrderCorrectiveOnItem","closeWorkOrderRegularOnItem","closedWorkOrder","updateItemListInWorkOrderRegularItem","itemList","getWorkOrderPriorityColor","getWorkOrderPriorityData","workOrderPriorityId","workOrderPriorityInDb","getHighestWorkOrderPriority","workOrderPriorityIds","highestPriority","getWorkspaceHomeBreadcrumb","getAttachmentsList","entityURL","ATTACHMENTS_LIST","signal","getAttachment","ATTACHMENTS_ID","patchAttachment","patch","patchAttachmentsBatch","ATTACHMENTS_BATCH","getAttributeCharList","postAttributeChar","getAttributeChar","ATTRIBUTES_CHAR","putAttributeChar","patchAttributeChar","patchAttributeCharValuesBatch","ATTRIBUTES_CHAR_VALUES_BATCH","getAttributeNumericList","postAttributeNumeric","getAttributeNumeric","ATTRIBUTES_NUMERIC","putAttributeNumeric","patchAttributeNumeric","patchAttributeNumericValuesBatch","ATTRIBUTES_NUMERIC_VALUES_BATCH","getAttributeSelectList","postAttributeSelect","getAttributeSelect","ATTRIBUTES_SELECT","putAttributeSelect","patchAttributeSelect","patchAttributeSelectValuesBatch","ATTRIBUTES_SELECT_VALUES_BATCH","getAttributeSelectOptionsList","ATTRIBUTES_SELECT_OPTIONS_ATTR_ID","getAttributesSelectOptionsList","postAttributesSelectOptions","selectOption","getAttributesSelectOption","attributeOptionId","ATTRIBUTES_SELECT_OPTIONS","putAttributesSelectOption","patchAttributesSelectOption","getAttributeTemporalList","postAttributeTemporal","getAttributeTemporal","ATTRIBUTES_TEMPORAL","putAttributeTemporal","patchAttributeTemporal","patchAttributeTemporalValuesBatch","ATTRIBUTES_TEMPORAL_VALUES_BATCH","getEntityHistory","HISTORY_ENTITY","getPermissionTypeByEntityName","getUserHistory","HISTORY_USER","getIdentifiersList","getIdentifiersListByType","idenType","IDENTIFIERS_TYPE","postIdentifier","getIdentifier","idenID","IDENTIFIERS_TYPE_ID","putIdentifier","patchIdentifier","deleteIdentifier","postIdentifiersBatch","IDENTIFIERS_BATCH","patchIdentifiersBatch","deleteIdentifiersBatch","getIssuePrioritiesList","postIssuePriority","priorityId","ISSUE_PRIORITIES_ID","putIssuePriority","patchIssuePriority","postIssuesOnItem","getIssuesOnItem","ISSUES_ON_ITEM_ID","putIssuesOnItem","patchIssuesOnItem","postIssuesOnItemBatch","ISSUES_ON_ITEM_BATCH","patchIssuesOnItemBatch","getIssuesOnItemActionsList","postIssuesOnItemAction","getIssuesOnItemAction","actionId","ISSUE_ON_ITEM_ACTIONS_ID","putIssuesOnItemAction","patchIssuesOnItemAction","postIssuesOnItemActionsBatch","ISSUE_ON_ITEM_ACTIONS_BATCH","patchIssuesOnItemActionsBatch","getIssueOnItemAttachmentList","issue_id","postIssueOnItemAttachment","formData","getIssueOnItemAttachment","ISSUES_ON_ITEM_ATTACHMENTS_ID","deleteIssueOnItemAttachment","getIssueOnItemAttachmentContent","ISSUES_ON_ITEM_ATTACHMENTS_ID_CONTENT","postIssueOnItemAttachmentBatch","ISSUES_ON_ITEM_ATTACHMENTS_BATCH","getIssueOnItemCommentList","postIssueOnItemComment","getIssueOnItemComment","ISSUES_ON_ITEM_COMMENTS_ID","putIssueOnItemComment","patchIssueOnItemComment","postIssueOnItemCommentBatch","ISSUES_ON_ITEM_COMMENTS_BATCH","patchIssueOnItemCommentBatch","getIssueOnItemCommentAttachmentList","postIssueOnItemCommentAttachment","getIssueOnItemCommentAttachment","ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID","deleteIssueOnItemCommentAttachment","getIssueOnItemCommentAttachmentContent","ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT","postIssueOnItemCommentAttachmentBatch","ISSUES_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH","getItemClassesList","postItemClass","getItemClass","ITEM_CLASSES_ID","putItemClass","patchItemClass","getItemModelsList","postItemModel","getItemModel","ITEM_MODELS_ID","putItemModel","patchItemModel","getItemModelsAttributeCharValue","ITEM_MODELS_ATTRIBUTES_CHAR_VALUE","patchItemModelsAttributeCharValue","deleteItemModelsAttributeCharValue","getItemModelsAttributeCharValues","ITEM_MODELS_ATTRIBUTES_CHAR_VALUES","getItemModelsAttributeNumericValue","ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUE","patchItemModelsAttributeNumericValue","deleteItemModelsAttributeNumericValue","getItemModelsAttributeNumericValues","ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES","getItemModelsAttributeSelectValue","ITEM_MODELS_ATTRIBUTES_SELECT_VALUE","patchItemModelsAttributeSelectValue","deleteItemModelsAttributeSelectValue","getItemModelsAttributeSelectValues","ITEM_MODELS_ATTRIBUTES_SELECT_VALUES","getItemModelsAttributeTemporalValue","ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUE","patchItemModelsAttributeTemporalValue","deleteItemModelsAttributeTemporalValue","getItemModelsAttributeTemporalValues","ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES","getItemModelsAttributeCharValuesList","ITEM_MODELS_ATTRIBUTES_CHAR_VALUES_LIST","getItemModelsAttributeNumericValuesList","ITEM_MODELS_ATTRIBUTES_NUMERIC_VALUES_LIST","getItemModelsAttributeSelectValuesList","ITEM_MODELS_ATTRIBUTES_SELECT_VALUES_LIST","getItemModelsAttributeTemporalValuesList","ITEM_MODELS_ATTRIBUTES_TEMPORAL_VALUES_LIST","getItemModelAttachmentList","model_id","postItemModelAttachment","getItemModelAttachment","ITEM_MODELS_ID_ATTACHMENTS_ID","getItemModelAttachmentContent","ITEM_MODELS_ID_ATTACHMENTS_ID_CONTENT","postItemModelAttachmentBatch","ITEM_MODELS_ID_ATTACHMENTS_BATCH","getItemsList","postItem","ITEMS_ID","putItem","patchItem","getItemAttributeCharValue","ITEMS_ATTRIBUTES_CHAR_VALUE","patchItemAttributeCharValue","deleteItemAttributeCharValue","getItemAttributeCharValues","ITEMS_ATTRIBUTES_CHAR_VALUES","getItemAttributeNumericValue","ITEMS_ATTRIBUTES_NUMERIC_VALUE","patchItemAttributeNumericValue","deleteItemAttributeNumericValue","getItemAttributeNumericValues","ITEMS_ATTRIBUTES_NUMERIC_VALUES","getItemAttributeSelectValue","ITEMS_ATTRIBUTES_SELECT_VALUE","patchItemAttributeSelectValue","deleteItemAttributeSelectValue","getItemAttributeSelectValues","ITEMS_ATTRIBUTES_SELECT_VALUES","getItemAttributeTemporalValue","ITEMS_ATTRIBUTES_TEMPORAL_VALUE","patchItemAttributeTemporalValue","deleteItemAttributeTemporalValue","getItemAttributeTemporalValues","ITEMS_ATTRIBUTES_TEMPORAL_VALUES","getItemAttributeCharValuesList","getItemAttributeNumericValuesList","getItemAttributeSelectValuesList","getItemAttributeTemporalValuesList","postItemsBatch","ITEMS_BATCH","patchItemsBatch","getItemsSearchList","ITEMS_SEARCH","getItemsSearchListResult","query_id","pageParams","getItemAttachmentList","postItemAttachment","getItemAttachment","ITEMS_ID_ATTACHMENTS_ID","deleteItemAttachment","getItemAttachmentContent","ITEMS_ID_ATTACHMENTS_ID_CONTENT","postItemAttachmentBatch","ITEMS_ID_ATTACHMENTS_BATCH","getWorkOrderListForItem","ITEMS_WORK_ORDER_REGULAR","postCorrectiveWorkOnItem","getCorrectiveWorkOnItem","PERFORMED_WORK_CORRECTIVE_ITEM_ID","putCorrectiveWorkOnItem","patchCorrectiveWorkOnItem","postCorrectiveWorkOnItemBatch","workList","PERFORMED_WORK_CORRECTIVE_ITEM_BATCH","patchCorrectiveWorkOnItemBatch","getCorrectiveWorkOnItemAttachmentList","work_id","postCorrectiveWorkOnItemAttachment","getCorrectiveWorkOnItemAttachment","PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID","getCorrectiveWorkOnItemAttachmentContent","PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_ID_CONTENT","postCorrectiveWorkOnItemAttachmentBatch","PERFORMED_WORK_CORRECTIVE_ITEM_ATTACHMENTS_BATCH","getCorrectiveWorkOnItemCommentList","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS","postCorrectiveWorkOnItemComment","getCorrectiveWorkOnItemComment","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ID","putCorrectiveWorkOnItemComment","patchCorrectiveWorkOnItemComment","postCorrectiveWorkOnItemCommentBatch","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_BATCH","patchCorrectiveWorkOnItemCommentBatch","getCorrectiveWorkOnItemCommentAttachmentList","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS","postCorrectiveWorkOnItemCommentAttachment","getCorrectiveWorkOnItemCommentAttachment","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID","deleteCorrectiveWorkOnItemCommentAttachment","getCorrectiveWorkOnItemCommentAttachmentContent","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT","postCorrectiveWorkOnItemCommentAttachmentBatch","PERFORMED_WORK_CORRECTIVE_ITEM_COMMENTS_ATTACHMENTS_BATCH","getRegularWorkOnItemList","postRegularWorkOnItem","getRegularWorkOnItem","PERFORMED_WORK_REGULAR_ITEM_ID","putRegularWorkOnItem","patchRegularWorkOnItem","postRegularWorkOnItemBatch","PERFORMED_WORK_REGULAR_ITEM_BATCH","patchRegularWorkOnItemBatch","getRegularWorkOnItemAttachmentList","postRegularWorkOnItemAttachment","getRegularWorkOnItemAttachment","PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID","getRegularWorkOnItemAttachmentContent","PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_ID_CONTENT","postRegularWorkOnItemAttachmentBatch","PERFORMED_WORK_REGULAR_ITEM_ATTACHMENTS_BATCH","getRegularWorkOnItemCommentList","PERFORMED_WORK_REGULAR_ITEM_COMMENTS","postRegularWorkOnItemComment","getRegularWorkOnItemComment","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ID","putRegularWorkOnItemComment","patchRegularWorkOnItemComment","postRegularWorkOnItemCommentBatch","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_BATCH","patchRegularWorkOnItemCommentBatch","getRegularWorkOnItemCommentAttachmentList","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS","postRegularWorkOnItemCommentAttachment","getRegularWorkOnItemCommentAttachment","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID","deleteRegularWorkOnItemCommentAttachment","getRegularWorkOnItemCommentAttachmentContent","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT","postRegularWorkOnItemCommentAttachmentBatch","PERFORMED_WORK_REGULAR_ITEM_COMMENTS_ATTACHMENTS_BATCH","getWorkDomainsWorkspaceList","getWorkDomainWorkspace","WORK_DOMAINS_ID","getWorkOrderPrioritiesList","postWorkOrderPriority","getWorkOrderPriority","WORK_ORDER_PRIORITIES_ID","putWorkOrderPriority","patchWorkOrderPriority","getWorkOrderCorrectiveItemList","postWorkOrderCorrectiveItem","getWorkOrderCorrectiveItem","WORK_ORDER_CORRECTIVE_ON_ITEM_ID","putWorkOrderCorrectiveItem","patchWorkOrderCorrectiveItem","getWorkOrderCorrectiveItemAttachmentList","postWorkOrderCorrectiveItemAttachment","getWorkOrderCorrectiveItemAttachment","WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID","deleteWorkOrderCorrectiveItemAttachment","getWorkOrderCorrectiveItemAttachmentContent","WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_ID_CONTENT","postWorkOrderCorrectiveItemAttachmentBatch","WORK_ORDER_CORRECTIVE_ON_ITEM_ATTACHMENTS_BATCH","postWorkOrderCorrectiveItemBatch","WORK_ORDER_CORRECTIVE_ON_ITEM_BATCH","patchWorkOrderCorrectiveItemBatch","getWorkOrderCorrectiveItemCommentList","postWorkOrderCorrectiveItemComment","workOrderComment","getWorkOrderCorrectiveItemComment","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ID","putWorkOrderCorrectiveItemComment","patchWorkOrderCorrectiveItemComment","getWorkOrderCorrectiveItemCommentAttachmentList","postWorkOrderCorrectiveItemCommentAttachment","getWorkOrderCorrectiveItemCommentAttachment","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID","deleteWorkOrderCorrectiveItemCommentAttachment","getWorkOrderCorrectiveItemCommentAttachmentContent","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT","postWorkOrderCorrectiveItemCommentAttachmentBatch","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH","postWorkOrderCorrectiveItemCommentBatch","WORK_ORDER_CORRECTIVE_ON_ITEM_COMMENTS_BATCH","patchWorkOrderCorrectiveItemCommentBatch","getWorkOrderRegularItemList","postWorkOrderRegularItem","getWorkOrderRegularItem","WORK_ORDER_REGULAR_ON_ITEM_ID","putWorkOrderRegularItem","patchWorkOrderRegularItem","getWorkOrderRegularItemAttachmentList","postWorkOrderRegularItemAttachment","getWorkOrderRegularItemAttachment","WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID","deleteWorkOrderRegularItemAttachment","getWorkOrderRegularItemAttachmentContent","WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_ID_CONTENT","postWorkOrderRegularItemAttachmentBatch","WORK_ORDER_REGULAR_ON_ITEM_ATTACHMENTS_BATCH","postWorkOrderRegularItemBatch","WORK_ORDER_REGULAR_ON_ITEM_BATCH","patchWorkOrderRegularItemBatch","getWorkOrderRegularItemCommentList","postWorkOrderRegularItemComment","getWorkOrderRegularItemComment","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ID","putWorkOrderRegularItemComment","patchWorkOrderRegularItemComment","getWorkOrderRegularItemCommentAttachmentList","postWorkOrderRegularItemCommentAttachment","getWorkOrderRegularItemCommentAttachment","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID","deleteWorkOrderRegularItemCommentAttachment","getWorkOrderRegularItemCommentAttachmentContent","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_ID_CONTENT","postWorkOrderRegularItemCommentAttachmentBatch","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_ATTACHMENTS_BATCH","postWorkOrderRegularItemCommentBatch","WORK_ORDER_REGULAR_ON_ITEM_COMMENTS_BATCH","patchWorkOrderRegularItemCommentBatch","concatUrl","args","arrayString","queryString","getNewAbortHandler","getCustomConfig","abortConfig","getAllEntitiesConcurrent","httpFunction","initialRequest","updated_dt__gte","maxRequests","ceil","requests","rawRemainingData","remainingData","aborted","getAllAttachmentForEntity","appendAttachmentToFormData","handleAttachmentBatchResponses","isIgnoredError","getCurrentUser","patchCurrentUser","patchChangePassword","passwords","USER_ME_PASSWORD","getUserRoles","getUser","USER_ID","getUserImage","getCurrentUserImage","USER_ME_IMAGE","postCurrentUserImage","deleteCurrentUserImage","getWorkDomainsGlobalList","postWorkDomainGlobal","getWorkDomainGlobal","putWorkDomainGlobal","patchWorkDomainGlobal","getWorkspaceList","WORKSPACES_LIST","getWorkspace","WORKSPACES_ID","getUsersForWorkspace","WORKSPACES_ID_USERS","mockUserNotifications","mockSystemNotifications","dictionaries","separator","eventsInTotal","addPredefinedData","triggeringUser","eventName","relationId","hasItem","hasIssue","hasWorkOrder","addExtraMockData","notificationData","addMockSystemNotificationData","dateInThePast","dateInTheFuture","systemNotificationData","getNotificationMockData","storedData","parse","SearchMap","extractor","caseSensitive","uniqueValueOptimization","dataItems","resultMap","dataItem","addItem","termCount","addTerm","searchTerm","termResults","getExactMatches","maxResults","getExactMatchesOrUndefined","searchLoop","keyResults","keyResult","getPartialMatchesOrUndefined","PERMISSION_ACCESS_CREATE","PERMISSION_ACCESS_READ","PERMISSION_ACCESS_UPDATE","PERMISSION_ACCESS_DELETE","PERMISSION_ATTRIBUTES","PERMISSION_FILES","PERMISSION_GIS","PERMISSION_IDENTIFIERS","PERMISSION_ISSUES","PERMISSION_ITEMS","PERMISSION_PERFORMED_WORK","PERMISSION_USER_ACCOUNTS","PERMISSION_USER_ROLES","PERMISSION_WORKSPACES","PERMISSION_WORK_DOMAINS","PERMISSION_WORK_ORDERS","inheritAttrs","attrs","isDisabled","filteredAttrs","restAttrs","handleClickEvent","clickFn","unelevated","fn","QBtn","$attrs","inline","outline","originalValue","currentModel","resetValue","UNDO","active","imgBgColor","imgFit","imgPlaceholder","bordered","cardSize","cardStyles","imgHeight","imgStyles","clearMemory","_component_q_separator","_directive_ripple","horizontal","graphics","onLoad","vertical","inset","SfxIconRow","Ripple","placeholderImg","getPlaceholderImg","createdDate","SfxCard","QSpace","problem","cssClass","noContent","createdDateTime","createdDateClass","contentClass","timeSinceRaised","storeIssue","overdue","timeLabel","chipOverdueLabel","workDomainDesignation","workDomainRaw","issueThumbnail","issueThumbnailRaw","correctiveWorkOnItemForIssue","resetData","assignItem","assignWorkDomain","assignThumbnailAttachment","getIcons","newIssue","SfxChip","expectedDuration","NOTIFICATION_FROM_SUPPORT","alt","userClasses","iconRowElements","itemOrAreaIcon","referenceExists","SfxUserData","INTERNAL_LINK","objectType","titlePlaceholder","formattedDate","userType","storeWorkOrder","workOrderIconsStaticRaw","workOrderIconsDynamicRaw","referenceLabel","deadLineLabel","chipBehindLabel","workOrderIcons","cardClasses","isOverdue","isBehind","timeWarningLabel","isClosed","assignWorkOrderIconsStatic","assignWorkOrderIconsDynamic","assignTimeWarning","workPerDay","daysWorked","expectedWorkDone","newWorkOrder","SfxProgressIndicator","closable","assignWorkOrderIcons","handleClose","storeWork","workTypeThumbnail","workIconsRaw","workStatementTitle","workDescription","workIcons","assignThumbnailIcon","assignIcons","newWork","TICK","showHand","correctedTime","correctedDate","captionClass","userDataClosed","userDataCorrected","userIdClosed","userIdCorrected","SfxCardEventBase","rejectedDate","CLICKABLE","extraClasses","_component_q_chip","ripple","square","QChip","entityIcon","navigationIcon","cardField","iconSpaceLarge","valueEllipsis","validator","pointerClass","isHexColor","iconStyle","iconClass","valueEllipsisClass","_component_q_field","borderless","chip","QItem","allowHTML","showWorkspace","verticalCenter","mainDiv","paddingTop","mainDivHeight","currentWorkspaceName","textColorClass","quoteTextSmall","quoteClass","imageSrc","canDelete","imageListRemainder","handleImageClick","requestDeletion","progress","QList","inputFileField","imageFiles","deletedImage","hasImages","imageGalleryItems","getImageFromAttachment","capacitorEnv","getImage","imageData","imageAttachment","pickFiles","handleDelete","undo","imageFile","QFile","accept","SQUARE_PLUS","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","canUpload","ICON_SIZE","THUMBNAIL_SIZE","startImage","dndContent","dndQuote","slideModel","currentImage","at","previousImage","nextImage","filePicker","filePickerFiles","canDownload","thumbnails","imageDetailsDiv","actionButtonsDiv","thumbnailsDiv","carouselStyle","actionButtonsDivHeight","imageDetailsDivHeight","thumbnailsDivHeight","totalHeight","disableBtnAction","openImage","dragScroll","acceleration","scrollBy","scrollWidth","setImageIndex","getFormattedDate","downloadFile","axios","dropFile","dndValue","handleFileUpload","allowedFiles","disallowedFiles","filesSize","saveNewImage","newImages","newImagesInServer","newImage","existingImageIndex","attachmentCardData","deleteAttachment","deletedImageIndex","newFiles","_directive_dnd","_directive_touch_pan","onDnd","UPLOAD","QCarousel","TouchPan","isOriginalValue","edited","numberFields","checkNumberField","charFields","checkCharFields","ruleList","numberRules","minMaxRules","checkMinMax","precisionRules","checkPrecision","charRules","allowBlank","QInput","outlined","after","SfxBtnUndo","QField","isHidden","inputType","eyeClick","titled","rows","newLine","maxLengthTitle","maxLengthDescription","newLineOnTitleMax","emitTitleAndDescription","splitText","newLineInBeginning","beginning","ending","lastWhiteSpace","lastIndexOf","isolationChecked","shutdownChecked","issueBase","isolationCheckedModel","shutdownCheckedModel","promptDiscard","hideMenu","QCheckbox","infoNotification","menuStatus","expansionItem","forcefullyClosed","disabledClass","expandIcon","SQUARE_MINUS","showMenu","handleDisableClick","show","_component_q_item_section","QExpansionItem","onShow","header","expanded","seconds","hoursModel","minutesModel","initialDays","setTime","dayCount","formattedString","navigationAction","isDialog","crumbs","actionIcon","HISTORY_BACK","isBreadcrumbHTML","isBreadcrumbText","isBreadcrumbCount","getTextColorClass","highlightClass","normalTextClass","actionClicked","isSafeExUrl","back","crumb","getCountText","_entity","_component_q_breadcrumbs_el","_component_q_breadcrumbs","trueTotal","SfxTrueCount","tooltipContent","QBreadcrumbs","contextMenuItems","_component_q_menu","QMenu","_createBlock","_component_q_tab","_mergeProps","_createSlots","_withCtx","_renderSlot","script","render","QTab","mobileArrows","outsideArrows","_component_q_tabs","QTabs","animationInterval","vibrationTimer","disabledMenuContent","disableMenu","notificationCount","enableAnimation","quickActionItem","contextItems","animatedIconClass","invisible","animationState","animationObject","vibrationState","vibrateClass","bellIconOn","NOTIFICATIONS_NEW","bellIcon","handleContextSelection","stopNotificationAnimation","newCount","oldCount","_component_q_badge","CONTEXT_MENU","SfxContextMenu","floating","rounded","QSeparator","subtitleClass","_component_q_toolbar","SfxContextBar","QToolbar","hideQuickActions","quickActionItems","toDoLabel","contextMenuLabel","notificationsLabel","handleTodoClick","workspaceListMenu","menuItemDataList","_component_q_expansion_item","listIndex","COLLAPSE","EXPAND","disableMainMenu","homeButton","homeTab","moreMenuTab","CHEVRONS_DOWN","tabModel","showExtendedMenu","extendedMenu","formattedItem","extendedMenuClass","_component_q_route_tab","SfxExtendedMenuManager","searchInput","inputPlaceholder","_component_q_input","SEARCH","hideSearchBar","hideUserDisplay","disableSearchBar","disableUserDisplay","settingsLabel","openUserSettings","SfxMainMenuManager","SfxSearchBarQuick","SfxContextBarManager","small","onTop","contentClasses","menuShadowPatch","pageClassPatch","pageClass","addBackClickListener","removeBackClickListener","verticalPosition","onDialogOk","priorityNumber","issueCount","labelClass","chart","ISSUE_SOLID","_component_q_item_label","_component_q_radio","RADIO_ON","RADIO_OFF","showScanner","showRetryButton","warningMessage","codeReader","scanner","readerHandler","componentIsActive","initScan","isMediaStreamAPISupported","navigator","mediaDevices","startDecoder","stream","getUserMedia","audio","video","videoTracks","getVideoTracks","DOMException","decodeFromVideoDevice","controls","handleScannerErrors","stop","FormatException","ChecksumException","NotFoundException","_component_q_banner","platform","ARROW_ROTATE_RIGHT","QBanner","minimumRequiredCharacters","readerThreshold","currentScanText","keyboardListenerHandler","startResetTimer","clearTimeout","CHECK_NFC_INTERVAL_TIME","canAttemptTurningOn","checkNfcInterval","pausedInterval","scannerSessionActive","stateListener","nfcTagScannedListener","startNfcStatusCheckInterval","checkNfcStatus","startAppStateListener","addListener","isEnabled","initScanning","startScanSession","nfcTag","convertBytesToHex","bytes","hex","retryNFCAvailability","openSettings","nfcSupported","isSupported","stopScanSession","showFilterIcon","menuRef","searchHistory","recentMenuActive","searchBarClasses","searchItemSelected","searchItem","deleteSearchItem","deleteAllSearchItems","closeMenu","showFilters","openMenu","newSearchVal","oldSearchVal","newDisable","debounce","onKeydown","onClear","onFocus","side","spaced","FILTER","ignoreOrder","popupContentClass","sortedOriginal","sortedCurrent","isPopupOpen","handleSingleOption","setPopupOpen","isOpen","_component_q_select","onPopupShow","onPopupHide","changePicture","avatarOnly","webChangeProfilePicture","nameClass","ellipsis","avatarClass","avatarSize","initialsClass","userInfoClass","userProfilePicture","profilePictureColor","disabled","removeProfilePicture","userDocument","changeProfilePicture","handleCapacitorFiles","handleWebFiles","fileList","handleImageUpload","imageOptions","getCapacitorImageOptions","base64String","imageOnServer","Base64","promptLabelHeader","promptLabelPhoto","promptLabelPicture","photos","Camera","Photos","unwatchUserId","newVal","_component_q_avatar","USER_PROFILE","hidden","QAvatar","itemCount","timeInformation","deadlinePassed","priorityLabel","deadlineClass","EXTERNAL_LINK","pageContainerClass","windowHeightClass","panel","targetClass","divContainer","isIntersecting","internalScrollContainerClass","observer","IntersectionObserver","div","stopParentSearch","currentParent","parentElement","isInnerScroll","scrollToBottom","scrollTo","scrollHeight","submit","observe","disconnect","_component_q_page_sticky","ARROW_DOWN","QPageContainer","iconRowElement","iconContainerClass","getColor","ITEMS_TO_RENDER","OFFSET_FROM_BOTTOM","dataList","idSelectorFunction","extraOffset","resetState","infiniteScroll","listWithId","onIntersection","handler","cfg","rootMargin","startIndex","listLength","currentIndex","resume","trigger","_directive_intersection","QInfiniteScroll","Intersection","isDraftState","progressIndicatorValue","displayValue","stateLabel","currentStateLabelClass","specialIconRight","WORK_ORDER_CLOSED_UNCOMPLETED","WORK_ORDER_COMPLETED","CONDENSED_PROPERTIES","percentClass","circleSize","chipClass","numbersClass","TECHNICIAN_PROPERTIES","MANAGER_PROPERTIES","componentProperties","circularProgressColor","circularProgressClass","_component_q_circular_progress","reverse","thickness","QCircularProgress","textWhite","iconDisabled","marginNone","activeClass","LINK_ICON_FORWARD","noOfCards","cardHeight","_component_q_skeleton","animation","disableActions","fixedCenter","htmlBodyElement","disableClass","_component_q_spinner_ball","QSpinnerBall","timeMask","showTime","originalValueDate","originalValueTime","startDate","labelClose","inputMask","inputMaskString","dateModel","timeModel","inputModel","originalValueModel","validDateTimeRules","isValidDate","addDateToClock","sameDate","sameTime","readonlyField","disableField","disableCalendar","disableClock","clockClass","calendarClass","dateVal","updateTime","newTime","startDateOptions","dateOption","startTimeOptions","hr","_component_q_date","_component_q_popup_proxy","_component_q_time","mask","OPEN_CALENDAR","cover","CLOCK","format24h","USER_ICON_SIZE","userNameClasses","userName","getUserName","initialsColor","USER_CIRCLE","_createElementVNode","_createVNode","oldVal","newLongEnoughValue","deletingOldStringToEmpty","pageButtonSize","pageData","currentPage","rowsPerPage","pageSizeList","pageNumber","rowSelectOpen","rowSelectClass","v","rowSelectOpened","rowSelectClosed","_component_q_pagination","isFirstPage","prevPage","pagesNumber","isLastPage","nextPage","CHEVRON_UP","QPagination","textValue","textClass","emptyTextValue","columnAlignmentClass","columnCustomClasses","_component_q_td","QTd","imagePlaceholder","cellImage","getAttachmentString","attachmentUUID","getAttachmentStringFromList","imageSource","imageContent","SfxTooltip","isHtml","INDICATOR_SIZE","INDICATOR_THICKNESS","columnData","getToolTip","stateChipData","BEHIND","WORK_ORDER_RESOURCE","stateColour","currentColumn","nonSwitchableColumns","disableDropdown","currentSearchColumn","switched","currentSearchValue","col","colName","modelColumns","menuColumns","modelVisibleColumns","searchInColumnInput","searchLabel","noResultsLabel","searchInColumnLabel","columnClass","updateCol","newCol","visCols","oldValIndex","newValIndex","temp","searchValuesInColumn","blurSearchInColumn","searchCol","searchValue","_component_q_btn_dropdown","_component_q_th","duration","onBlur","QTh","selectedKeys","getRowKey","computedRows","selectionOptions","currentPageRows","selectedModel","allRowsSelected","someRowsSelected","selectionModel","predefinedSelectionOptions","updateSelection","allSelectionOptions","isMenuOpen","arrowClass","arrow","rotation","updateCheckboxValue","callback","anchor","self","pagination","statusColumns","sortStatus","columnName","statusMenuOpen","statusSortTarget","statusButtonText","sortByText","statusClass","sortBy","allSortEntries","statusSortEntities","sortColumns","statusColumn","foundColumn","statusMenuActive","triggerStatusSort","previousTarget","descending","A","B","aIcon","bIcon","onTouchstart","onMousedown","defaultSort","sortState","stateMenuOpen","stateButtonText","sortModel","stateClass","triggerStateSort","colAState","colBState","sortByDate","sortByStateOption","stateA","stateB","stateOption","direction","newSortVal","oldSortValue","SfxRadioSimple","statusColumnsCount","enableSelectOnlyMode","rightSideIcon","viewSwitch","cardView","rowClass","leftColumn","rightColumn","iconFilter","iconFilterDisabled","iconUseCharts","iconBookmark","iconUndo","iconRightSideToggle","sfxTableThStatus","sfxTableThWorkState","tableData","loadedConfig","mark","rightSideIconColumnName","computedRowsNumber","columnsModel","fullColumns","columnList","rightSideColumn","visibleColumnsRef","getInitialColumns","visibleColumnsModel","mainColumnWidth","columnWidth","rightSideColumnWidth","statusColumnWidth","workStateColumnWidth","workOrderStateColumnWidth","numberOfColumns","totalWidth","getColumnWidth","resizeObserver","ResizeObserver","contentRect","paginationModel","showPagination","canSwitchAndInCardView","selectionMode","showSelectionCheckbox","selectAllText","allFilteredRowsSelected","selectCurrentCount","selectedIds","filteredSortedRows","searchInColumnTerm","searchInColumnUUID","currentFilteredData","filteredOnRightSideIcon","rightSideToggleIcon","USER_WITH_HELMET_SOLID","USER_WITH_HELMET_REGULAR","checkboxClass","checkboxState","topClass","tableClass","searchBarClass","isCardView","tableViewOffColor","cardViewOffColor","rowLoadingStyle","selectFieldsSpacing","searchingInColumnActive","viewToggle","areColumnsSwitched","preSwitchedColumnNames","currentColumnNames","isFilterChanged","isLoading","customSortStatus","sortFunction","tableSortStatus","tableSortWorkState","tableWorkOrderSortState","rightColumnWidth","columnSpacing","remainingWidth","columnsNeedingWidth","showTableConfigurationsDialog","searchInColumnVal","assignSavedConfig","foundCol","setSelectionAll","missingRows","setSearchInColumnTerm","filterMethod","terms","getCellValue","searchableColumns","isMatch","getRowParam","valueExtractFn","filterInColumnSync","idFunc","dataArray","addData","uuidParam","getUUIDFromFunc","dataParam","checkStringValue","filterInColumnAsync","handleQueryParamsSearch","termList","entityUUIDList","entityUUID","columnRaw","handleColumnNotVisible","getSearchTermFromUUID","oldColName","fieldFunc","toggleRightSideIconColumn","toggleViewState","cardsOn","isColumnSwitched","defaultColumnIndex","currentColumnIndex","undoChanges","rowClick","rowKey","rowData","openInNewWindow","toggleRowSelection","longRowClick","shiftClick","ctrlClick","middleClick","handleRowClasses","handleEmptyText","getCellSlotNameDefault","getCellSlotNamePrepend","getCellSlotNameAppend","getCellName","getHeaderName","getAnimationState","isDataLoading","colsVal","visColName","colIndex","newPagination","SfxTableThSelect","SfxSearchBarManager","CARD_VIEW","TABLE_VIEW","GANTT_CHART","SAVED_CONFIGURATIONS","QTable","selection","grid","SfxCardManagerSkeleton","SfxTableTrSkeleton","tdSelectProps","thProps","SfxTableTh","onSearch","SfxTableThStatus","SfxTableThWorkState","tdImageProps","SfxTableTdImage","onMouseup","tdIndicatorProps","SfxTableTdIndicator","indicator","tdStatusProps","SfxTableTdStatus","tdWorkStateProps","SfxTableTdWorkState","workState","tdWorkOrderStateProps","SfxTableTdWorkOrderState","rsiProps","bottom","bottomProps","SfxTableBottom","SfxEmptyPageManager","slotData","tdProps","SfxTableTd","prepend","TOGGLE_SIZE","TOGGLE_PADDING","toDoCount","toggleToDoClasses","togglePerformedClasses","toggleToDoLabel","togglePerformedLabel","handleToDoClick","handlePerformedClick","animationStart","animationClass","className","trueValue","trueLabel","falseValue","falseLabel","indeterminateValue","indeterminateLabel","hideToggle","_component_q_toggle","arrowLocation","mobileModelRef","modelMobile","parentEl","tooltipShown","mobile","setTooltipPositionProperties","closeTooltip","setShown","isShown","openTooltipInternally","instance","parent","subTree","_directive_click_outside","QTooltip","tooltipData","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","chunkIds","notFulfilled","Infinity","fulfilled","j","n","getter","__esModule","d","leafPrototypes","getProto","getPrototypeOf","ns","def","getOwnPropertyNames","forEach","definition","o","defineProperty","enumerable","chunkId","promises","u","miniCssF","globalThis","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","needAttach","scripts","getElementsByTagName","s","charset","nc","onScriptComplete","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","linkTag","rel","nonce","onLinkComplete","errorType","realHref","insertBefore","nextSibling","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}