{"version":3,"sources":["webpack:///./src/model/record/checkInModel.js","webpack:///../../../src/mixins/registrable/index.ts","webpack:///./src/model/image/imageModel.js","webpack:///./src/mixins/shared/base/drawer/moduleItemsDrawerMixin.js","webpack:///./src/mixins/shared/base/component/baseComponentMixin.js","webpack:///../../../src/mixins/groupable/index.ts","webpack:///./src/mixins/shared/base/app/appMixin.js","webpack:///./src/mixins/shared/base/settings/userSettingsMixin.js","webpack:///./src/mixins/public/publicAccessMixin.js","webpack:///./src/mixins/shared/router/routerMixin.js","webpack:///../../../src/components/VList/VListItem.ts","webpack:///./src/mixins/shared/navigatable/moduleItemNavigatable.js","webpack:///./src/mixins/shared/snackbarable/snackbarableMixin.js","webpack:///../../../src/mixins/toggleable/index.ts"],"names":["createCheckInOption","comment","draft","ocr","checkInComment","isCheckInDraft","isCheckInOCR","checkInOptionName","Object","freeze","checkInOptions","name","label","description","findCheckInOption","find","el","toLowerCaseSafe","UploadFileCheckInOptionModel","extension","insertOption","insertFileOption","afterLastPage","Extension","Comments","Enqueue","Draft","InsertFileOption","CheckInOptionModel","UploadOptionModel","generateWarning","child","parent","consoleWarn","inject","namespace","defaultImpl","register","unregister","Vue","extend","default","provide","self","this","annotateOption","annotationsInclude","annotationsBurn","annotationsBurnMaintainColor","redactionsInclude","redactionsBurn","imageOperation","ZoomIn","ZoomOut","FitToPage","BestFit","FitToWidth","RotateLeft","RotateRight","JumpFirstPage","JumpLastPage","PreviousPage","NextPage","SelectPage","Move","Remove","SavePage","CheckIn","CheckOut","Scan","Import","Release","ImportAnnotation","ExportAnnotation","annotateOptions","hint","note","findAnnotateOption","createAnnotateOption","printOption","annotations","redactions","include","burn","burnOption","maintainColor","burnAnnotations","burnRedaction","getEditFilePath","findPrintOption","printOptions","imageOperations","icon","iconMovePage","iconTrash","iconScanner","iconImport","iconExport","createPrintOption","findImageOperation","imageViewerToolbarActions","toolTip","iconZoomIn","iconZoomOut","iconFitToPage","iconFitToWidth","iconResize","iconRotateLeft","iconRotateRight","iconFullBack","iconSingleBackward","iconSingleForward","iconFullForward","iconSave","iconFileCheckIn","iconFileCheckOut","iconFileRelease","findImageViewerToolbarOperation","importAnnotationOptions","customPage","allPages","exportAnnotationOptions","mapGetters","createNamespacedHelpers","mapActions","moduleItemsDrawerMixin","mixins","appMixin","baseComponentMixin","menuItemSettingsMixin","moduleItemNavigatable","snackbarableMixin","buttonSettingsMixin","userSettingsMixin","components","CoreNavigationDrawer","BaseAlert","BaseTooltipIcon","BaseNavList","BaseMenuItem","RecordBadgeIcon","SearchTextField","MoveRecordDialog","CopyRecordDialog","BatchMoveRecordsDialog","DeleteRecordDialog","AgendaItemReferDialog","AgendaItemDeferDialog","UploadLocalFileDialog","PasteShortcutRecordDialog","BaseTooltipButton","ProgressDisplay","BaseButton","BatchMoveItemsDialog","SubmitRecallAgendaItemsDialog","data","searchDrawerItemName","sourceRecord","undefined","destinationRecord","visibleMoveRecordDialog","visibleCopyRecordDialog","visibleDialogDelete","selectedRecord","agendaItemTemplates","visibleReferDialog","visibleDeferDialog","draggedFile","visibleUploadLocalFileDialog","visibleDialogPasteShortcut","batchRecordList","batchMoveOperation","visibleBatchMoveRecordsDialog","visibleBatchMoveItemsDialog","visibleSubmitRecallAgendaItemsDialog","isRecallOperation","displayRecordOptions","expandedRecordChildren","loading","startIndex","iconMenu","iconProjects","moduleName","moduleNames","serverSearchPerformed","insertTreePosition","isMoveByPosition","computed","usesSidebarImage","enableMiniDrawer","drawerMini","items","itemCount","_this$items$length","_this$items","length","selectedModuleItemId","hasSelectableModuleItem","defaultSelectModuleItemId","drawerIconColorClass","menuItemColorClass","fetchRecordsTooltip","recordsFetchCount","enableDisplayMore","_this$items2","_this$items3","_this$expandedRecordC","methods","getAgendaItemTemplates","updateRecordListById","payload","console","warn","submitMeetingAgendaItems","id","submitSectionAgendaItems","recallMeetingAgendaItems","recallSectionAgendaItems","getStoredSelectedModuleItemId","moveRecord","moveMeetingContents","moveBackupMaterial","copyRecord","copyRecordShortcut","moveRecordShortcut","pasteRecordShortcut","deleteRecord","record","deleteRecordShortcut","$options","checkInFile","notImplementedMethod","existsModuleItem","canSelectModuleItem","itemId","setDrawerMini","setMovedRecord","setMovedRecords","setLocalUploadedFile","file","toggleMiniDrawer","log","$router","currentRoute","appModuleName","n","canNavigateToModuleItem","navigateToModuleItem","e","error","sectionId","_await$this$getAgenda","_await$this$getAgenda2","showSnackbarError","toString","event","_event$insertPosition","draggedRecord","insertPosition","prepareMoveRecordDialog","recordTypeId","recordType","ITEM","SECTION","ancestor","loadAgendaSectionItemTemplates","isAncestorMeeting","isBackupMaterial","treeInsertOptions","firstChild","recordList","moveOperation","isCommitReferDeferBatchOperation","_this$sourceRecord","_this$sourceRecord$is","_this$sourceRecord2","operation","findRecordOperation","recordOperation","action","fullRecordVersionName","isLink","_this$sourceRecord$id","_this$sourceRecord3","_this$sourceRecord$an","_this$sourceRecord4","_this$destinationReco","_this$destinationReco2","recordId","recordParentId","destinationId","_this$sourceRecord5","_this$destinationReco3","_this$sourceRecord6","_this$destinationReco4","_this$destinationReco5","selectedRangeChanged","push","createModuleItemContentRoute","clearSavedRecord","createActionResultSuccess","createActionResultError","_this$sourceRecord7","_this$sourceRecord$is2","_this$sourceRecord8","_this$destinationReco9","_this$sourceRecord$id2","_this$sourceRecord9","_this$sourceRecord$an2","_this$sourceRecord10","_this$destinationReco6","_this$destinationReco7","_this$sourceRecord11","_this$destinationReco8","contextMenuRecordOperation","Cut","option","templateIndex","_sourceRecord$id","_destinationRecord$id","sourceId","index","deferAgendaItem","referAgendaItem","type","Copy","showSnackbarSuccess","Paste","_this$movedRecords$re","_this$movedRecords","movedRecords","records","moveType","prepareBatchMoveRecordsDialog","movedRecord","prepareCopyRecordDialog","Shortcut","_this$movedRecord$rec","_this$movedRecord","JumpOriginal","Delete","SubmitItems","RecallItems","batchPayload","_this$selectedRecord$","_this$selectedRecord","_this$$router$current","_this$selectedRecord$2","_this$selectedRecord2","parentId","isParentExpanded","params","_this$selectedRecord$3","_this$sourceRecord12","_this$sourceRecord$id3","_this$sourceRecord13","_this$destinationReco10","_this$destinationReco11","_result$data","findAgendaItemOperation","agendaItemOperation","refer","result","_this$sourceRecord14","_this$sourceRecord$id4","_this$sourceRecord15","_this$destinationReco12","_this$destinationReco13","_this$sourceRecord16","defer","isDirectUploadAllowed","isInsertFile","isInsertFileAtBeginning","checkInOption","_this$draggedFile","_result$id","_result","_this$selectedModuleI","beforeFirstPage","overwrite","model","RECORD","_this$destinationReco14","_this$destinationReco15","uploadFile","uploadFileModel","FILE","_this$destinationReco16","_this$destinationReco17","_result2","_this$sourceRecord17","_this$sourceRecord18","_this$destinationReco18","_this$destinationReco19","_this$items4","_this$$router$current2","_this$$router","_this$$router2","item","Math","floor","expandedId","listItems","_this$$router3","_ref","_params$expandedId","closeBatchMoveRecordsDialog","closeBatchMoveItemsDialog","closeMoveRecordDialog","batchRecords","closeSubmitRecallAgendaItemsDialog","_this$selectedRecord$4","_this$selectedRecord3","_this$selectedRecord4","isSubmitOperation","submit","MEETING","watch","_this$$router$current3","_this$$router$current4","_this$searchDrawerIte","_this$searchDrawerIte2","_this$$router$current5","_this$$router4","_this$$router5","currentError","isLoading","componentName","loadingText","hasError","isEmpty","fullMethodName","handleError","methodName","_error$toString","clearError","onAlertVisibilityChanged","visible","factory","RegistrableInject","props","activeClass","String","disabled","Boolean","isActive","groupClasses","created","beforeDestroy","toggle","preventDefault","$emit","appModuleTitle","appModuleIcon","mapMutations","mapGettersUser","mapMutationsUser","setUsesAppTabs","SET_USES_APP_TABS","setUsesSidebarImage","SET_USES_SIDEBAR_IMAGE","setDrawerRight","SET_DRAWER_RIGHT","setAppBarCollapseOnScroll","SET_APP_BAR_COLLAPSE_ON_SCROLL","setEnableMiniDrawer","SET_DRAWER_ENABLE_MINI_DRAWER","setButtonTextStyle","SET_COMMAND_BUTTONS_TEXT_STYLE","setButtonOutlined","SET_COMMAND_BUTTONS_OUTLINED","setButtonRounded","SET_COMMAND_BUTTONS_ROUNDED","setButtonElevation","SET_COMMAND_BUTTONS_ELEVATION","setRecordsFetchCount","SET_RECORDS_FETCH_COUNT","setEnableModuleSearch","SET_ENABLE_MODULE_SEARCH","setEnableModuleCategory","SET_ENABLE_MODULE_CATEGORY","setEnableModuleTasks","SET_ENABLE_MODULE_TASKS","setEnableModuleProjects","SET_ENABLE_MODULE_PROJECTS","setEnableModuleAgenda","SET_ENABLE_MODULE_AGENDA","publicAccessMixin","isPublicAccess","publicAccess","routerMixin","canNavigateToModuleItemByModuleItemId","_id$toString","canNavigateToChildRecordById","baseMixins","Colorable","Routable","Themeable","GroupableFactory","ToggleableFactory","directives","Ripple","isInGroup","isInList","isInMenu","isInNav","inheritAttrs","listItemGroup","dense","inactive","link","selectable","tag","threeLine","twoLine","value","proxyClass","classes","options","call","isClickable","themeClasses","$attrs","hasOwnProperty","removed","click","detail","$el","blur","to","genAttrs","attrs","tabindex","role","_uid","inputValue","render","h","generateRouteLink","keydown","keyCode","keyCodes","enter","on","nativeOn","children","getSlot","active","setTextColor","color","createModuleItemContentRouteLocation","snackbarVisible","snackbarColor","snackbarText","snackbarTimeout","snackbarVisibleCloseButton","snackbarTop","snackbarMultiLine","Snackbar","text","top","showSnackbar","colorTheme","success","showSnackbarInfo","info","timeout","multiLine","showSnackbarWarning","warning","closeSnackbar","prop","required","val","Toggleable"],"mappings":"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","file":"js/chunk-24d127c2.0d83e0d5.js","sourcesContent":["import { toLowerCaseSafe } from \"@/utils\";\r\nimport { insertFileOption } from \"@/model/record/fileModel\";\r\n\r\n/**\r\n * create Check In Option\r\n * @param {string} comment Check In comment\r\n * @param {boolean} draft Check In as draft\r\n * @param {boolean} ocr Optically recognize text of an image\r\n * @return {{isCheckInDraft: boolean, isCheckInOCR : boolean, checkInComment : string}}\r\n */\r\nconst createCheckInOption = (comment = \"\", draft = false, ocr = true) => {\r\n return {\r\n checkInComment: comment ?? \"\",\r\n isCheckInDraft: draft ?? false,\r\n isCheckInOCR: ocr ?? false\r\n };\r\n};\r\n\r\n/**\r\n * create CheckIn Model\r\n * @param {boolean} isFileChanged\r\n * @param {number} filePageCount\r\n * @param {boolean} visibleCheckInProgress\r\n * @param {string} currentError\r\n * @param {string} checkInExtensionKey\r\n * @param {string} checkInExtensionValue\r\n * @return {{currentError: undefined, isFileChanged: boolean, visibleCheckInProgress: boolean, filePageCount: number, checkInExtension: {value: undefined, key: undefined}}}\r\n */\r\nconst createCheckInModel = (\r\n isFileChanged = false,\r\n filePageCount = -1,\r\n visibleCheckInProgress = false,\r\n currentError = undefined,\r\n checkInExtensionKey = undefined,\r\n checkInExtensionValue = undefined\r\n) => {\r\n return {\r\n isFileChanged: isFileChanged,\r\n filePageCount: filePageCount,\r\n visibleCheckInProgress: visibleCheckInProgress,\r\n currentError: currentError,\r\n checkInExtension: {\r\n key: checkInExtensionKey,\r\n value: checkInExtensionValue\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Available Check In Option names\r\n * @type {Readonly<{draft: string, comment: string, ocr: string}>}\r\n */\r\nconst checkInOptionName = Object.freeze({\r\n comment: \"comment\",\r\n draft: \"draft\",\r\n ocr: \"ocr\"\r\n});\r\n\r\n/**\r\n * check In Options\r\n * @type {({name: string, description: string, label: string})[]}\r\n */\r\nconst checkInOptions = Object.freeze([\r\n {\r\n name: checkInOptionName.comment,\r\n label: \"Comment\",\r\n description: \"Check In optional comment\"\r\n },\r\n {\r\n name: checkInOptionName.draft,\r\n label: \"Draft\",\r\n description: \"Check In file as a draft\"\r\n },\r\n {\r\n name: checkInOptionName.ocr,\r\n label: \"OCR and Index Recognized Text\",\r\n description:\r\n \"Perform Optical Character Recognition and index recognized text to make text searchable\"\r\n }\r\n]);\r\n\r\n/**\r\n * find Check In Option by its name\r\n * @param {string} name Check In Option name\r\n * @return {{name: string, description: string, label: string}}\r\n */\r\nconst findCheckInOption = name =>\r\n checkInOptions.find(\r\n el => toLowerCaseSafe(el?.name) === toLowerCaseSafe(name)\r\n );\r\n\r\n/**\r\n * Create UploadFileCheckInOption Model\r\n * @param {string|undefined} extension\r\n * @param {string|undefined} comment\r\n * @param {boolean} ocr\r\n * @param {boolean} draft\r\n * @param {{afterLastPage: number, beforeFirstPage: number, overwrite: number}} insertOption\r\n * @return {{Extension: (string|undefined), Draft: boolean, InsertFileOption: {afterLastPage: number, beforeFirstPage: number, overwrite: number}, Comments: (string|string), Enqueue: boolean}}\r\n * @constructor\r\n */\r\nconst UploadFileCheckInOptionModel = (\r\n extension = undefined,\r\n comment = \"\",\r\n ocr = false,\r\n draft = false,\r\n insertOption = insertFileOption.afterLastPage\r\n) => {\r\n return {\r\n Extension: extension,\r\n Comments: comment ?? \"\",\r\n Enqueue: ocr,\r\n Draft: draft,\r\n InsertFileOption: insertOption\r\n };\r\n};\r\n\r\n/**\r\n * Create CheckInOption Model\r\n * @param {string|undefined} extension\r\n * @param {string|undefined} comment\r\n * @param {boolean} ocr\r\n * @param {boolean} draft\r\n * @return {{Extension: undefined, Draft: boolean, Comments: string, Enqueue: boolean}}\r\n * @constructor\r\n */\r\nconst CheckInOptionModel = (\r\n extension = undefined,\r\n comment = \"\",\r\n ocr = false,\r\n draft = false\r\n) => {\r\n return {\r\n Extension: extension,\r\n Comments: comment,\r\n Enqueue: ocr,\r\n Draft: draft\r\n };\r\n};\r\n\r\n/**\r\n * Create CheckInOption Model\r\n * @param {string|undefined} comment\r\n * @param {boolean} ocr\r\n * @param {boolean} draft\r\n * @param {{afterLastPage: number, beforeFirstPage: number, overwrite: number}} insertOption\r\n * @return {{ Draft: boolean, Comments: string, Enqueue: boolean,InsertFileOption: {afterLastPage: number, beforeFirstPage: number, overwrite: number}}}\r\n */\r\nconst UploadOptionModel = (\r\n comment = \"\",\r\n ocr = false,\r\n draft = false,\r\n insertOption = insertFileOption.afterLastPage\r\n) => {\r\n return {\r\n Comments: comment,\r\n Enqueue: ocr,\r\n Draft: draft,\r\n InsertFileOption: insertOption\r\n };\r\n};\r\n\r\nexport {\r\n createCheckInOption,\r\n createCheckInModel,\r\n checkInOptionName,\r\n checkInOptions,\r\n findCheckInOption,\r\n CheckInOptionModel,\r\n UploadFileCheckInOptionModel,\r\n UploadOptionModel\r\n};\r\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable = VueConstructor : {\n register (...props: any[]): void\n unregister (self: any): void\n }\n}>\n\nexport function inject<\n T extends string, C extends VueConstructor | null = null\n> (namespace: T, child?: string, parent?: string): Registrable {\n const defaultImpl = child && parent ? {\n register: generateWarning(child, parent),\n unregister: generateWarning(child, parent),\n } : null\n\n return Vue.extend({\n name: 'registrable-inject',\n\n inject: {\n [namespace]: {\n default: defaultImpl,\n },\n },\n })\n}\n\nexport function provide (namespace: string, self = false) {\n return Vue.extend({\n name: 'registrable-provide',\n\n provide (): object {\n return {\n [namespace]: self ? this : {\n register: (this as any).register,\n unregister: (this as any).unregister,\n },\n }\n },\n })\n}\n","import {\r\n iconTrash,\r\n iconMovePage,\r\n iconZoomIn,\r\n iconZoomOut,\r\n iconFitToPage,\r\n iconFitToWidth,\r\n iconRotateLeft,\r\n iconRotateRight,\r\n iconResize,\r\n iconFullBack,\r\n iconSingleBackward,\r\n iconFullForward,\r\n iconSingleForward,\r\n iconSave,\r\n iconFileCheckIn,\r\n iconFileCheckOut,\r\n iconFileRelease,\r\n iconScanner,\r\n iconImport,\r\n iconExport\r\n} from \"@/design/icon/iconConst\";\r\n\r\n/**\r\n * annotate Option (Current implementation)\r\n * @type {Readonly<{annotationsBurn: string, annotationsBurnMaintainColor: string, redactionsBurn: string, annotationsInclude: string, redactionsInclude: string}>}\r\n */\r\nconst annotateOption = Object.freeze({\r\n annotationsInclude: \"includeAnnotations\",\r\n annotationsBurn: \"burnIntoImage\",\r\n annotationsBurnMaintainColor: \"maintainColor\",\r\n redactionsInclude: \"includeRedaction\",\r\n redactionsBurn: \"burnRedaction\"\r\n});\r\n\r\n/**\r\n * Image Operation\r\n * @type {Readonly<{Move: string, Remove: string}>}\r\n */\r\nconst imageOperation = Object.freeze({\r\n ZoomIn: \"Zoom In\",\r\n ZoomOut: \"Zoom Out\",\r\n FitToPage: \"Fit To Page\",\r\n BestFit: \"Best Fit\",\r\n FitToWidth: \"Fit To Width\",\r\n RotateLeft: \"Rotate Page Left\",\r\n RotateRight: \"Rotate Page Right\",\r\n JumpFirstPage: \"Jump to First Page\",\r\n JumpLastPage: \"Jump to Last Page\",\r\n PreviousPage: \"Previous Page\",\r\n NextPage: \"Next Page\",\r\n SelectPage: \"Select Page\",\r\n Move: \"Move\",\r\n Remove: \"Remove\",\r\n SavePage: \"Save Document\",\r\n CheckIn: \"Check In\",\r\n CheckOut: \"Check Out\",\r\n Scan: \"Scan\",\r\n Import: \"Import\",\r\n Release: \"Release\",\r\n ImportAnnotation: \"Import Annotation\",\r\n ExportAnnotation: \"Export Annotation\"\r\n});\r\n\r\n/**\r\n * annotate Options\r\n * @type {{note: string, hint: string, name: string, label: string}[]}\r\n */\r\nconst annotateOptions = Object.freeze([\r\n {\r\n name: annotateOption.annotationsInclude,\r\n label: \"Include Annotations\",\r\n hint:\r\n \"Include Annotations when exporting an image file containing annotations\",\r\n note:\r\n \"Annotations will be included when exporting an image file containing annotations\"\r\n },\r\n {\r\n name: annotateOption.annotationsBurn,\r\n label: \"Burn Annotations into Image\",\r\n hint: \"Burn Annotations into current Image\",\r\n note:\r\n \"Annotations will burned into an image when exporting an image file containing annotations\"\r\n },\r\n {\r\n name: annotateOption.annotationsBurnMaintainColor,\r\n label: \"Maintain Annotation Color\",\r\n hint: \"Maintain Annotation Color when Burn Annotations into current Image\",\r\n note: \"Drastically increases image file size\"\r\n },\r\n {\r\n name: annotateOption.redactionsInclude,\r\n label: \"Include Redactions\",\r\n hint:\r\n \"Include Redactions when exporting an image file containing annotations\",\r\n note:\r\n \"Redactions will be included when exporting an image file containing annotations\"\r\n },\r\n {\r\n name: annotateOption.redactionsBurn,\r\n label: \"Burn Redactions\",\r\n hint: \"Burn Redactions into current Image\",\r\n note:\r\n \"Redactions will burned into an image when exporting an image file containing annotations\"\r\n }\r\n]);\r\n\r\n/**\r\n * find Annotate Option\r\n * @param {string} name Annotate Option\r\n * @return {{note: string, hint: string, name: string, label: string}}\r\n */\r\nconst findAnnotateOption = name => {\r\n return annotateOptions.find(el => el.name === name);\r\n};\r\n\r\n/**\r\n * create Annotate Option (Current implementation)\r\n * @param {boolean} annotationsInclude include annotations\r\n * @param {boolean} annotationsBurn burn include annotations\r\n * @param {boolean} annotationsBurnMaintainColor Maintain Color when burn annotations\r\n * @param {boolean} redactionsInclude include redactions\r\n * @param {boolean} redactionsBurn burn included redactions\r\n * @return {{includeAnnotations: boolean, burnIntoImage: boolean, maintainColor: boolean, includeRedaction: boolean, burnRedaction: boolean}}\r\n */\r\nconst createAnnotateOption = (\r\n annotationsInclude = true,\r\n annotationsBurn = true,\r\n annotationsBurnMaintainColor = true,\r\n redactionsInclude = true,\r\n redactionsBurn = true\r\n) => {\r\n return {\r\n [annotateOption.annotationsInclude]: annotationsInclude,\r\n [annotateOption.annotationsBurn]: annotationsBurn,\r\n [annotateOption.annotationsBurnMaintainColor]: annotationsBurnMaintainColor,\r\n [annotateOption.redactionsInclude]: redactionsInclude,\r\n [annotateOption.redactionsBurn]: redactionsBurn\r\n };\r\n};\r\n\r\n/**\r\n * export Annotate Options (new proposed implementation)\r\n * @type {Readonly<{redactions: string, annotations: string}>}\r\n */\r\nconst exportAnnotateOptions = Object.freeze({\r\n annotations: \"annotations\",\r\n redactions: \"redactions\"\r\n});\r\n\r\n/**\r\n * export Annotations Option\r\n * @type {Readonly<{include: string, burn: string, burnOption: string}>}\r\n */\r\nconst exportAnnotationsOption = Object.freeze({\r\n include: \"include\",\r\n burn: \"burn\",\r\n burnOption: \"burnOption\"\r\n});\r\n\r\n/**\r\n * annotations Burn Option\r\n * @type {Readonly<{maintainColor: string}>}\r\n */\r\nconst annotationsBurnOption = Object.freeze({\r\n maintainColor: \"maintainColor\"\r\n});\r\n\r\n/**\r\n * export Redactions Option\r\n * @type {Readonly<{include: string, burn: string}>}\r\n */\r\nconst exportRedactionsOption = Object.freeze({\r\n include: \"include\",\r\n burn: \"burn\"\r\n});\r\n\r\n/**\r\n * create Export Annotate Options (new proposed implementation)\r\n * @param {boolean} annotationsInclude\r\n * @param {boolean} annotationsBurn\r\n * @param {boolean} annotationsBurnMaintainColor\r\n * @param {boolean} redactionsInclude\r\n * @param {boolean} redactionsBurn\r\n * @return {{annotations: {include: boolean, burn: boolean, burnOption: {maintainColor:boolean}}, redactions: {include: boolean, burn: boolean}}}\r\n */\r\nconst createExportAnnotateOptions = (\r\n annotationsInclude = true,\r\n annotationsBurn = true,\r\n annotationsBurnMaintainColor = true,\r\n redactionsInclude = true,\r\n redactionsBurn = true\r\n) => {\r\n return {\r\n [exportAnnotateOptions.annotations]: {\r\n [exportAnnotationsOption.include]: annotationsInclude,\r\n [exportAnnotationsOption.burn]: annotationsBurn,\r\n [exportAnnotationsOption.burnOption]: {\r\n [annotationsBurnOption.maintainColor]: annotationsBurnMaintainColor\r\n }\r\n },\r\n [exportAnnotateOptions.redactions]: {\r\n [exportRedactionsOption.include]: redactionsInclude,\r\n [exportRedactionsOption.burn]: redactionsBurn\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * print annotate-able image Option enum names\r\n * @type {Readonly<{burnAnnotations: string, burnRedaction: string, getEditFilePath: String}>}\r\n */\r\nconst printOption = Object.freeze({\r\n burnAnnotations: \"burnAnnotations\",\r\n burnRedaction: \"burnRedaction\",\r\n getEditFilePath: \"getEditFilePath\" // TODO: getEditFilePath is not a self-explanatory name, we should consider renaming it\r\n});\r\n\r\n/**\r\n * find Print annotate-able Option\r\n * @param {string} name Print Option\r\n * @return {{note: string, hint: string, name: string, label: string}}\r\n */\r\nconst findPrintOption = name => {\r\n return printOptions.find(el => el.name === name);\r\n};\r\n\r\n/**\r\n * print annotate-able image Options\r\n * @type {{note: string, hint: string, name: string, label: string}[]}\r\n */\r\nconst printOptions = Object.freeze([\r\n {\r\n name: printOption.burnAnnotations,\r\n label: \"Include Annotations\",\r\n hint: \"Include (burned) all Annotations when specified image being printed\",\r\n note:\r\n \"All Annotations will be included (burned) when specified image being printed\"\r\n },\r\n {\r\n name: printOption.burnRedaction,\r\n label: \"Include Redaction\",\r\n hint: \"Include (burned) all Redactions when specified image being printed\",\r\n note:\r\n \"All Annotations will be included (burned) when specified image being printed\"\r\n },\r\n {\r\n name: printOption.getEditFilePath,\r\n label: \"get Edit File Path\",\r\n hint: \"Sameed TODO: get Edit File Path\",\r\n note: \"Sameed TODO: get Edit File Path\"\r\n }\r\n]);\r\n\r\n/** Image Operations\r\n * NOTE : Expand interface on Demand\r\n * @type {{name: string, icon: string, label: string}[]}\r\n */\r\nconst imageOperations = Object.freeze([\r\n {\r\n name: imageOperation.Move,\r\n label: imageOperation.Move,\r\n icon: iconMovePage\r\n },\r\n {\r\n name: imageOperation.Remove,\r\n label: imageOperation.Remove,\r\n icon: iconTrash\r\n },\r\n {\r\n name: imageOperation.Scan,\r\n label: imageOperation.Scan,\r\n icon: iconScanner\r\n },\r\n {\r\n name: imageOperation.Import,\r\n label: \"Import File\",\r\n icon: iconImport\r\n },\r\n {\r\n name: imageOperation.ImportAnnotation,\r\n label: \"Import Annotations\",\r\n icon: iconImport\r\n },\r\n {\r\n name: imageOperation.ExportAnnotation,\r\n label: \"Export Annotations\",\r\n icon: iconExport\r\n }\r\n]);\r\n\r\n/**\r\n * create annotate-able Print image Option\r\n * @param {boolean} burnAnnotations burn Annotations\r\n * @param {boolean} burnRedaction burn Redaction\r\n * @param {boolean} getEditFilePath\r\n * @return {{burnAnnotations: boolean, burnRedaction: boolean, getEditFilePath: boolean}}\r\n */\r\nconst createPrintOption = (\r\n burnAnnotations = true,\r\n burnRedaction = true,\r\n getEditFilePath = false\r\n) => {\r\n return {\r\n [printOption.burnAnnotations]: burnAnnotations,\r\n [printOption.burnRedaction]: burnRedaction,\r\n [printOption.getEditFilePath]: getEditFilePath\r\n };\r\n};\r\n\r\n/** find Image Operation\r\n * @param name image operation name\r\n * @return {{name: string, icon: string, label: string}}\r\n */\r\nconst findImageOperation = name => {\r\n return imageOperations?.find(el => el?.name === name);\r\n};\r\n\r\n/** Image Operations\r\n * NOTE : Expand interface on Demand\r\n * @type {{name: string,label: string, toolTip:string, icon: string}[]}\r\n */\r\nconst imageViewerToolbarActions = Object.freeze([\r\n {\r\n name: imageOperation.ZoomIn,\r\n label: imageOperation.ZoomIn,\r\n toolTip: imageOperation.ZoomIn,\r\n icon: iconZoomIn\r\n },\r\n {\r\n name: imageOperation.ZoomOut,\r\n label: imageOperation.ZoomOut,\r\n toolTip: imageOperation.ZoomOut,\r\n icon: iconZoomOut\r\n },\r\n {\r\n name: imageOperation.FitToPage,\r\n label: imageOperation.FitToPage,\r\n toolTip: imageOperation.FitToPage,\r\n icon: iconFitToPage\r\n },\r\n {\r\n name: imageOperation.FitToWidth,\r\n label: imageOperation.FitToWidth,\r\n toolTip: imageOperation.FitToWidth,\r\n icon: iconFitToWidth\r\n },\r\n {\r\n name: imageOperation.BestFit,\r\n label: imageOperation.BestFit,\r\n toolTip: imageOperation.BestFit,\r\n icon: iconResize\r\n },\r\n {\r\n name: imageOperation.RotateLeft,\r\n label: imageOperation.RotateLeft,\r\n toolTip: imageOperation.RotateLeft,\r\n icon: iconRotateLeft\r\n },\r\n {\r\n name: imageOperation.RotateRight,\r\n label: imageOperation.RotateRight,\r\n toolTip: imageOperation.RotateRight,\r\n icon: iconRotateRight\r\n },\r\n {\r\n name: imageOperation.JumpFirstPage,\r\n label: imageOperation.JumpFirstPage,\r\n toolTip: imageOperation.JumpFirstPage,\r\n icon: iconFullBack\r\n },\r\n {\r\n name: imageOperation.PreviousPage,\r\n label: imageOperation.PreviousPage,\r\n toolTip: imageOperation.PreviousPage,\r\n icon: iconSingleBackward\r\n },\r\n {\r\n name: imageOperation.SelectPage,\r\n label: imageOperation.SelectPage,\r\n toolTip: imageOperation.SelectPage\r\n },\r\n {\r\n name: imageOperation.NextPage,\r\n label: imageOperation.NextPage,\r\n toolTip: imageOperation.NextPage,\r\n icon: iconSingleForward\r\n },\r\n {\r\n name: imageOperation.JumpLastPage,\r\n label: imageOperation.JumpLastPage,\r\n toolTip: imageOperation.JumpLastPage,\r\n icon: iconFullForward\r\n },\r\n {\r\n name: imageOperation.Move,\r\n label: imageOperation.Move,\r\n toolTip: imageOperation.Move,\r\n icon: iconMovePage\r\n },\r\n {\r\n name: imageOperation.Remove,\r\n label: imageOperation.Remove,\r\n toolTip: imageOperation.Remove,\r\n icon: iconTrash\r\n },\r\n {\r\n name: imageOperation.SavePage,\r\n label: imageOperation.SavePage,\r\n toolTip: imageOperation.SavePage,\r\n icon: iconSave\r\n },\r\n {\r\n name: imageOperation.CheckIn,\r\n label: imageOperation.CheckIn,\r\n toolTip: imageOperation.CheckIn,\r\n icon: iconFileCheckIn\r\n },\r\n {\r\n name: imageOperation.CheckOut,\r\n label: imageOperation.CheckOut,\r\n toolTip: imageOperation.CheckOut,\r\n icon: iconFileCheckOut\r\n },\r\n {\r\n name: imageOperation.Release,\r\n label: imageOperation.Release,\r\n toolTip: imageOperation.Release,\r\n icon: iconFileRelease\r\n }\r\n]);\r\n\r\n/** find Image Viewer Toolbar Operation\r\n * @param name image operation name\r\n * @return {{name: string,label: string, toolTip:string, icon: string}}\r\n */\r\nconst findImageViewerToolbarOperation = name => {\r\n return imageViewerToolbarActions?.find(el => el?.name === name);\r\n};\r\n\r\n/**\r\n * Import Annotation Options\r\n * @type {Readonly<{customPage: number, allPages: number}>}\r\n */\r\nconst importAnnotationOptions = Object.freeze({\r\n customPage: 1,\r\n allPages: 2\r\n});\r\n\r\n/**\r\n * Export Annotation Options\r\n * @type {Readonly<{customPage: number, allPages: number}>}\r\n */\r\nconst exportAnnotationOptions = Object.freeze({\r\n customPage: 1,\r\n allPages: 2\r\n});\r\nexport {\r\n annotateOption,\r\n printOption,\r\n printOptions,\r\n imageOperation,\r\n createAnnotateOption,\r\n createPrintOption,\r\n createExportAnnotateOptions,\r\n findPrintOption,\r\n findAnnotateOption,\r\n findImageOperation,\r\n findImageViewerToolbarOperation,\r\n imageViewerToolbarActions,\r\n importAnnotationOptions,\r\n exportAnnotationOptions\r\n};\r\n","// mixins\r\nimport { appMixin } from \"@/mixins/shared/base/app/appMixin\";\r\nimport { menuItemSettingsMixin } from \"@/mixins/shared/base/settings/menuItemSettingsMixin\";\r\nimport { baseComponentMixin } from \"@/mixins/shared/base/component/baseComponentMixin\";\r\nimport { moduleItemNavigatable } from \"@/mixins/shared/navigatable/moduleItemNavigatable\";\r\nimport { snackbarableMixin } from \"@/mixins/shared/snackbarable/snackbarableMixin\";\r\n\r\n// vuex/store\r\nimport { createNamespacedHelpers } from \"vuex\";\r\nimport {\r\n contextMenuRecordOperation,\r\n findRecordOperation,\r\n recordOperation,\r\n recordType,\r\n treeInsertOptions\r\n} from \"@/model/record/recordModel\";\r\nimport {\r\n fullRecordVersionName,\r\n isAncestorMeeting,\r\n isBackupMaterial,\r\n isDirectUploadAllowed\r\n} from \"@/services/record/recordService\";\r\nimport {\r\n createActionResultError,\r\n createActionResultSuccess\r\n} from \"@/model/action/actionModel\";\r\nimport {\r\n agendaItemOperation,\r\n findAgendaItemOperation\r\n} from \"@/model/agenda/item/agendaItemModel\";\r\nimport { findImageOperation, imageOperation } from \"@/model/image/imageModel\";\r\nimport { notImplementedMethod } from \"@/services/error/errorMessages\";\r\nimport { insertFileOption } from \"@/model/record/fileModel\";\r\nimport { UploadOptionModel } from \"@/model/record/checkInModel\";\r\nimport { buttonSettingsMixin } from \"@/mixins/shared/base/settings/buttonSettingsMixin\";\r\nimport { userSettingsMixin } from \"@/mixins/shared/base/settings/userSettingsMixin\";\r\nimport { iconExport, iconMenu, iconProjects } from \"@/design/icon/iconConst\";\r\nimport { moduleNames } from \"@/model/solution/moduleModel\";\r\n\r\nconst { mapGetters } = createNamespacedHelpers(\"solution\");\r\nconst { mapActions } = createNamespacedHelpers(\"agenda\");\r\n\r\n/**\r\n * moduleItemsDrawerMixin Contains options (adhere to the DRY principle) &\r\n * code re-usability for Drawer components\r\n */\r\nexport const moduleItemsDrawerMixin = {\r\n mixins: [\r\n appMixin,\r\n baseComponentMixin,\r\n menuItemSettingsMixin,\r\n moduleItemNavigatable,\r\n snackbarableMixin,\r\n buttonSettingsMixin,\r\n userSettingsMixin\r\n ],\r\n components: {\r\n CoreNavigationDrawer: () =>\r\n import(\"@/components/shared/core/drawers/CoreNavigationDrawer\"),\r\n BaseAlert: () => import(\"@/components/shared/base/BaseAlert\"),\r\n BaseTooltipIcon: () =>\r\n import(\"@/components/shared/base/icon/BaseTooltipIcon\"),\r\n BaseNavList: () => import(\"@/components/shared/base/BaseNavList\"),\r\n BaseMenuItem: () => import(\"@/components/shared/base/BaseMenuItem\"),\r\n RecordBadgeIcon: () => import(\"@/components/record/RecordBadgeIcon\"),\r\n SearchTextField: () =>\r\n import(\"@/components/shared/base/BaseSearchTextField\"),\r\n MoveRecordDialog: () =>\r\n import(\"@/components/shared/core/dialogs/MoveRecordDialog\"),\r\n CopyRecordDialog: () =>\r\n import(\"@/components/shared/core/dialogs/CopyRecordDialog\"),\r\n BatchMoveRecordsDialog: () =>\r\n import(\"@/components/shared/core/dialogs/BatchMoveRecordsDialog\"),\r\n DeleteRecordDialog: () =>\r\n import(\"@/components/shared/core/dialogs/DeleteRecordDialog\"),\r\n AgendaItemReferDialog: () =>\r\n import(\"@/components/agenda/dialogs/AgendaItemReferDialog.vue\"),\r\n AgendaItemDeferDialog: () =>\r\n import(\"@/components/agenda/dialogs/AgendaItemDeferDialog.vue\"),\r\n UploadLocalFileDialog: () =>\r\n import(\"@/components/shared/core/dialogs/UploadLocalFileDialog\"),\r\n PasteShortcutRecordDialog: () =>\r\n import(\"@/components/shared/core/dialogs/PasteShortcutRecordDialog\"),\r\n BaseTooltipButton: () =>\r\n import(\"@/components/shared/base/BaseTooltipButton\"),\r\n ProgressDisplay: () =>\r\n import(\"@/components/shared/core/progress/ProgressDisplay\"),\r\n BaseButton: () => import(\"@/components/shared/base/BaseButton\"),\r\n BatchMoveItemsDialog: () =>\r\n import(\"@/components/shared/core/dialogs/BatchMoveItemsDialog\"),\r\n SubmitRecallAgendaItemsDialog: () =>\r\n import(\"@/components/shared/core/dialogs/SubmitRecallAgendaItemsDialog\")\r\n },\r\n data() {\r\n return {\r\n searchDrawerItemName: \"\",\r\n sourceRecord: undefined,\r\n destinationRecord: undefined,\r\n visibleMoveRecordDialog: false,\r\n visibleCopyRecordDialog: false,\r\n visibleDialogDelete: false,\r\n selectedRecord: undefined,\r\n agendaItemTemplates: [],\r\n visibleReferDialog: false,\r\n visibleDeferDialog: false,\r\n draggedFile: undefined,\r\n visibleUploadLocalFileDialog: false,\r\n visibleDialogPasteShortcut: false,\r\n batchRecordList: [],\r\n batchMoveOperation: undefined,\r\n visibleBatchMoveRecordsDialog: false,\r\n visibleBatchMoveItemsDialog: false,\r\n visibleSubmitRecallAgendaItemsDialog: false,\r\n isRecallOperation: true,\r\n\r\n //\r\n // nodes\r\n //\r\n displayRecordOptions: [10, 20, 50, 100],\r\n expandedRecordChildren: 0,\r\n loading: false,\r\n startIndex: 1,\r\n iconMenu: iconMenu,\r\n iconExport: iconExport,\r\n iconProjects: iconProjects,\r\n moduleName: moduleNames,\r\n serverSearchPerformed: false,\r\n insertTreePosition: -1,\r\n isMoveByPosition: false\r\n };\r\n },\r\n computed: {\r\n ...mapGetters({\r\n usesSidebarImage: \"usesSidebarImage\",\r\n enableMiniDrawer: \"enableMiniDrawer\"\r\n }),\r\n /**\r\n * Get whether drawer is Mini\r\n * Abstract computed\r\n * @return {boolean}\r\n */\r\n drawerMini: () => false,\r\n\r\n /**\r\n * Get Module Items\r\n * Abstract computed\r\n * @returns {{any}[]}\r\n */\r\n items: () => [],\r\n\r\n /**\r\n * Get item Count\r\n * @return {number|number}\r\n */\r\n itemCount() {\r\n return this?.items?.length ?? 0;\r\n },\r\n\r\n /**\r\n * Get selected module item id\r\n * Abstract computed\r\n * @return {number}\r\n */\r\n selectedModuleItemId: () => -1,\r\n\r\n /**\r\n * Indicate whether any Module Item can be selected\r\n * @return {boolean}\r\n */\r\n hasSelectableModuleItem() {\r\n return this.defaultSelectModuleItemId >= 0;\r\n },\r\n\r\n /**\r\n * suggested Select Module Item id\r\n * @return {Number|number|undefined}\r\n */\r\n defaultSelectModuleItemId() {\r\n return undefined;\r\n },\r\n\r\n /**\r\n * drawer Icon Color Class\r\n * @return {undefined|string|*}\r\n */\r\n drawerIconColorClass() {\r\n return this.usesSidebarImage ? undefined : this.menuItemColorClass;\r\n },\r\n\r\n /**\r\n * Fetch More Records Tooltip\r\n * @return {string}\r\n */\r\n fetchRecordsTooltip() {\r\n return `Fetch next ${this.recordsFetchCount} records`;\r\n },\r\n\r\n /**\r\n * Compute whether Load Button be enabled\r\n * @return {boolean}\r\n */\r\n enableDisplayMore() {\r\n return this.serverSearchPerformed\r\n ? false\r\n : !!this.items?.length &&\r\n this.items?.length !== (this.expandedRecordChildren ?? -1);\r\n }\r\n },\r\n methods: {\r\n ...mapActions({\r\n getAgendaItemTemplates: \"getAgendaItemTemplates\"\r\n }),\r\n\r\n /**\r\n * Abstract Update Record List By Id\r\n * @param {{type:string, records:Array}} payload\r\n */\r\n updateRecordListById(payload) {\r\n console.warn(`Abstract updateRecordListById() id:`, payload);\r\n },\r\n\r\n /**\r\n * Submit Meeting Agenda Items\r\n * @param id\r\n * @return {undefined}\r\n */\r\n submitMeetingAgendaItems(id) {\r\n console.warn(`Abstract submitMeetingAgendaItems() payload:`, id);\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Submit Section Agenda Items\r\n * @param id\r\n * @return {undefined}\r\n */\r\n submitSectionAgendaItems(id) {\r\n console.warn(`Abstract submitSectionAgendaItems() payload:`, id);\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Recall Meeting Agenda Items\r\n * @param id\r\n * @return {undefined}\r\n */\r\n recallMeetingAgendaItems(id) {\r\n console.warn(`Abstract recallMeetingAgendaItems() payload:`, id);\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Recall Section Agenda Items\r\n * @param id\r\n * @return {undefined}\r\n */\r\n recallSectionAgendaItems(id) {\r\n console.warn(`Abstract recallSectionAgendaItems() payload:`, id);\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Get Selected Module Item id local storage\r\n * Abstract method\r\n * @returns {Number|number}\r\n */\r\n getStoredSelectedModuleItemId() {\r\n console.warn(\r\n \"Not implemented Abstract method: getStoredSelectedModuleItemId() \"\r\n );\r\n },\r\n\r\n /**\r\n * Move Record\r\n * Abstract method\r\n * @param {{recordId:Number,destinationId:Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n moveRecord(payload) {\r\n console.warn(\"Not implemented Abstract method: moveRecord() \", payload);\r\n },\r\n\r\n /**\r\n * Move Meeting Contents\r\n * Abstract method\r\n * @param {{recordId:Number,destinationId:Number,insertTreePosition: Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n moveMeetingContents(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: moveMeetingContents() \",\r\n payload\r\n );\r\n },\r\n\r\n /**\r\n * Move Backup Material\r\n * Abstract method\r\n * @param {{recordId:Number,destinationId:Number,insertTreePosition: Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n moveBackupMaterial(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: moveBackupMaterial() \",\r\n payload\r\n );\r\n },\r\n\r\n /**\r\n * Copy Record\r\n * Abstract method\r\n * @param {{recordId:Number,destinationId:Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n copyRecord(payload) {\r\n console.warn(\"Not implemented Abstract method: copyRecord() \", payload);\r\n },\r\n\r\n /**\r\n * Copy Record Shortcut\r\n * Abstract method\r\n * @param {{recordId:Number,recordParentId:Number,destinationId:Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n copyRecordShortcut(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: copyRecordShortcut() \",\r\n payload\r\n );\r\n },\r\n\r\n /**\r\n * Move Record Shortcut\r\n * Abstract method\r\n * @param {{recordId:Number,recordParentId:Number,destinationId:Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n moveRecordShortcut(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: moveRecordShortcut() \",\r\n payload\r\n );\r\n },\r\n\r\n /**\r\n * Paste Record Shortcut\r\n * Abstract method\r\n * @param {{recordId:Number,destinationId:Number}} payload\r\n * @return {Promise<{agendaItemOperations: {name: string, allowed: boolean, valid: boolean}[], fieldValues: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], flyingFields: {id: number, sequence: number}[], extension: string, checkOutExtension: string, version: number, versionDate: string, versionOwner: string, pageCount: number, fileSize: number, comments: string, id: number, name: string, parentId: number, ancestor: {id: number, name: string, categoryId: number, recordType: {id: number, name: string}, code: number, flags: number, createdBy: {id: number, name: string}, updatedBy: {id: number, name: string}, isComposite: boolean, isDeleted: boolean, isDraft: boolean, isHidden: boolean, isLocked: boolean, isOnHold: boolean, isReadOnly: boolean, isRetained: boolean}, categoryId: number, stateId: number, stateOwnerId: number, state: string, recordTypeId: number, recordType: string, createdBy: string, updatedBy: string, owner: string, creationDate: string, modificationDate: string, flags: number, children: number, isDraft: boolean, isReadOnly: boolean, isLocked: boolean, isDeleted: boolean, isComposite: boolean, isLink: boolean, localFile: {hasFile: boolean, isModified: boolean, pageCount: number, extension: {type: number, extensions: string[], description: string}}, searchFields: {name: string, fieldDataType: number, fieldDataTypeName: string, operations: {name: string, allowed: boolean, valid: boolean}[], id: number, value: string}[], operations: {name: string, allowed: boolean, valid: boolean}[], meetingOperations: {name: string, allowed: boolean, valid: boolean}[], fields: string[]}>}\r\n */\r\n pasteRecordShortcut(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: pasteRecordShortcut() \",\r\n payload\r\n );\r\n },\r\n\r\n /**\r\n * Delete Record\r\n * Abstract method\r\n * @param record\r\n */\r\n deleteRecord(record) {\r\n console.warn(\"Not implemented Abstract method: deleteRecord() \", record);\r\n },\r\n\r\n /**\r\n * Delete Record Shortcut\r\n * Abstract method\r\n * @param {{id:Number, parentId: Number}} payload\r\n */\r\n deleteRecordShortcut(payload) {\r\n console.warn(\r\n \"Not implemented Abstract method: deleteRecordShortcut() \",\r\n payload.id\r\n );\r\n },\r\n\r\n /**\r\n * Abstract Refer Agenda Item\r\n * @param {{sourceId:Number, destinationId:Number, option:Number, index:Number}} payload\r\n * @return {Promise}\r\n */\r\n async referAgendaItem(payload) {\r\n console.warn(\r\n `Abstract ${this.$options.name}.referAgendaItem() called. payload:`,\r\n payload\r\n );\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Abstract Defer Agenda Item\r\n * @param {{sourceId:Number, destinationId:Number, option:Number, index:Number}} payload\r\n * @return {Promise}\r\n */\r\n async deferAgendaItem(payload) {\r\n console.warn(\r\n `Abstract ${this.$options.name}.deferAgendaItem() called. payload:`,\r\n payload\r\n );\r\n return undefined;\r\n },\r\n\r\n /**\r\n * Abstract upload File\r\n * @param {{file: File, id: (number|number), uploadFileModel: {Extension: (string|undefined), Draft: boolean, InsertFileOption: {afterLastPage: number, beforeFirstPage: number, overwrite: number}, Comments: string, Enqueue: boolean}}} payload\r\n * @return {Promise}\r\n */\r\n async uploadFile(payload) {\r\n console.warn(`Not implemented uploadFile() payload:`, payload);\r\n },\r\n\r\n /**\r\n * Abstract Check In File\r\n * @param {{file: File, id: (number|number), uploadFileModel: {Extension: (string|undefined), Draft: boolean, InsertFileOption: {afterLastPage: number, beforeFirstPage: number, overwrite: number}, Comments: string, Enqueue: boolean}}} payload\r\n */\r\n checkInFile(payload) {\r\n throw notImplementedMethod(`checkInFile() payload: ${payload}`);\r\n },\r\n\r\n /**\r\n * Abstract Determines whether Module Item exists by its id\r\n * @param {Number|number} id\r\n * @return {Boolean|boolean}\r\n */\r\n existsModuleItem(id) {\r\n console.warn(`Abstract existsModuleItem() id:`, id);\r\n return false;\r\n },\r\n\r\n /**\r\n * can Select Module Item\r\n * @param {number} itemId\r\n * @return {boolean}\r\n */\r\n canSelectModuleItem(itemId) {\r\n return this.hasSelectableModuleItem && this.existsModuleItem(itemId);\r\n },\r\n\r\n /**\r\n * Abstract Set Drawer Mini\r\n * @param {boolean} drawerMini\r\n */\r\n setDrawerMini(drawerMini) {\r\n console.warn(`Abstract setDrawerMini() drawerMini:`, drawerMini);\r\n },\r\n\r\n /**\r\n * Abstract Set Moved Record\r\n * @param {{type:string, record:Object}} payload\r\n */\r\n setMovedRecord(payload) {\r\n console.warn(`Abstract setMovedRecord() payload:`, payload);\r\n },\r\n\r\n /**\r\n * Abstract Set Moved Records (Batch)\r\n * @param {{type:string, records:Array}} payload\r\n */\r\n setMovedRecords(payload) {\r\n console.warn(`Abstract setMovedRecords() payload:`, payload);\r\n },\r\n\r\n /**\r\n * Abstract Set Local Uploaded File\r\n * @param {File} file\r\n */\r\n setLocalUploadedFile(file) {\r\n console.warn(`Abstract setLocalUploadedFile() payload:`, file);\r\n },\r\n\r\n /**\r\n * Toggle Drawer (Mini/Maxi)\r\n */\r\n toggleMiniDrawer() {\r\n this.setDrawerMini(!this.drawerMini);\r\n },\r\n\r\n /**\r\n * ensure Selected Item\r\n * @return {Promise}\r\n */\r\n async ensureSelectedItem() {\r\n try {\r\n console.log(\r\n `${this.$options.name}.ensureSelectedItem() this.$router.currentRoute:`,\r\n this.$router.currentRoute\r\n );\r\n\r\n if (this.$router.currentRoute.name !== this.appModuleName) {\r\n return;\r\n }\r\n\r\n console.log(\r\n `${this.$options.name}.ensureSelectedItem() this.selectedModuleItemId:`,\r\n this.selectedModuleItemId\r\n );\r\n\r\n if (!this.hasSelectableModuleItem) {\r\n console.warn(\r\n `Cannot Select any ${this.appModuleName}. No selectable ${this.appModuleName}; item Count:`,\r\n this.itemCount\r\n );\r\n return;\r\n }\r\n\r\n console.log(\r\n `${this.$options.n}.ensureSelectedItem() this.selectedModuleItemId:`,\r\n this.selectedModuleItemId\r\n );\r\n\r\n // Store preserved, ensure Selected Item by navigating To Module Item\r\n if (this.existsModuleItem(this.selectedModuleItemId)) {\r\n if (this.canNavigateToModuleItem(this.selectedModuleItemId)) {\r\n await this.navigateToModuleItem(this.selectedModuleItemId);\r\n return;\r\n }\r\n }\r\n\r\n // Store not preserved, so load from local store\r\n let id = this.getStoredSelectedModuleItemId();\r\n if (!this.existsModuleItem(id)) {\r\n id = this.defaultSelectModuleItemId;\r\n if (!this.existsModuleItem(id)) {\r\n console.warn(\r\n `Cannot navigate to ${this.appModuleName}. Default ${this.appModuleName} id: ${id}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n if (this.canNavigateToModuleItem(id)) {\r\n console.log(`Going to select ${this.appModuleName} item by id:`, id);\r\n await this.navigateToModuleItem(id);\r\n } else {\r\n console.warn(`Cannot navigate to ${this.appModuleName} by id:`, id);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n async loadAgendaSectionItemTemplates(sectionId) {\r\n try {\r\n this.agendaItemTemplates =\r\n (await this.getAgendaItemTemplates(sectionId))?.data ?? [];\r\n } catch (e) {\r\n this.showSnackbarError(e.toString(), true);\r\n }\r\n },\r\n\r\n /**\r\n * Event is called when a dragged record is dropped on another record\r\n * @param {{draggedRecord:Object, destinationRecord:Object, insertPosition:number}}event\r\n * @return {Promise}\r\n */\r\n async onRecordMoved(event) {\r\n try {\r\n console.log(`${this.$options.name} onRecordMoved() event:`, event);\r\n const draggedRecord = event.draggedRecord;\r\n const destinationRecord = event.destinationRecord;\r\n const insertPosition = event?.insertPosition ?? -1;\r\n\r\n await this.prepareMoveRecordDialog(\r\n draggedRecord,\r\n destinationRecord,\r\n insertPosition\r\n );\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Prepare Data and open Move Record Dialog\r\n * @param sourceRecord\r\n * @param destinationRecord\r\n * @param insertPosition\r\n */\r\n async prepareMoveRecordDialog(\r\n sourceRecord,\r\n destinationRecord,\r\n insertPosition = -1\r\n ) {\r\n try {\r\n this.sourceRecord = sourceRecord;\r\n this.destinationRecord = destinationRecord;\r\n if (this.sourceRecord.recordTypeId === recordType.ITEM) {\r\n const sectionId =\r\n this.destinationRecord.recordTypeId === recordType.SECTION\r\n ? this.destinationRecord.id\r\n : this.destinationRecord.ancestor.id;\r\n\r\n await this.loadAgendaSectionItemTemplates(sectionId);\r\n this.visibleDeferDialog = true;\r\n return;\r\n }\r\n\r\n this.isMoveByPosition =\r\n (isAncestorMeeting(this.sourceRecord) ||\r\n isBackupMaterial(this.sourceRecord)) &&\r\n insertPosition !== -1;\r\n\r\n this.insertTreePosition = this.isMoveByPosition\r\n ? insertPosition\r\n : treeInsertOptions.firstChild;\r\n\r\n this.visibleMoveRecordDialog = true;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Prepare Data and open Copy Record Dialog\r\n * @param sourceRecord\r\n * @param destinationRecord\r\n */\r\n\r\n async prepareCopyRecordDialog(sourceRecord, destinationRecord) {\r\n try {\r\n this.sourceRecord = sourceRecord;\r\n this.destinationRecord = destinationRecord;\r\n if (this.sourceRecord.recordTypeId === recordType.ITEM) {\r\n const sectionId =\r\n this.destinationRecord.recordTypeId === recordType.SECTION\r\n ? this.destinationRecord.id\r\n : this.destinationRecord.ancestor.id;\r\n\r\n await this.loadAgendaSectionItemTemplates(sectionId);\r\n this.visibleReferDialog = true;\r\n return;\r\n }\r\n this.visibleCopyRecordDialog = true;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Prepare Dialog to move records in Batch\r\n * @param recordList\r\n * @param destinationRecord\r\n * @param moveOperation\r\n * @return {Promise}\r\n */\r\n async prepareBatchMoveRecordsDialog(\r\n recordList,\r\n destinationRecord,\r\n moveOperation\r\n ) {\r\n try {\r\n this.batchRecordList = recordList;\r\n this.destinationRecord = destinationRecord;\r\n this.batchMoveOperation = moveOperation;\r\n\r\n if (this.isCommitReferDeferBatchOperation(this.batchRecordList)) {\r\n const sectionId =\r\n this.destinationRecord.recordTypeId === recordType.SECTION\r\n ? this.destinationRecord.id\r\n : this.destinationRecord.ancestor.id;\r\n\r\n await this.loadAgendaSectionItemTemplates(sectionId);\r\n this.visibleBatchMoveItemsDialog = true;\r\n } else this.visibleBatchMoveRecordsDialog = true;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Move Record to new location\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onMoveRecordAction() {\r\n try {\r\n const operation = findRecordOperation(recordOperation.Move);\r\n const action = `${operation?.label} ${\r\n this.sourceRecord?.recordType\r\n }: '${fullRecordVersionName(this.sourceRecord)}'`;\r\n\r\n if (this.sourceRecord?.isLink ?? false) {\r\n const payload = {\r\n recordId: this.sourceRecord?.id ?? -1,\r\n recordParentId: this.sourceRecord?.ancestor?.id ?? -1,\r\n destinationId: this.destinationRecord?.id ?? -1\r\n };\r\n await this.moveRecordShortcut(payload);\r\n } else if (this.isMoveByPosition) {\r\n const payload = {\r\n recordId: this.sourceRecord?.id,\r\n destinationId: this.destinationRecord?.id,\r\n insertTreePosition: this.insertTreePosition\r\n };\r\n\r\n isBackupMaterial(this.sourceRecord)\r\n ? await this.moveBackupMaterial(payload)\r\n : await this.moveMeetingContents(payload);\r\n } else {\r\n const payload = {\r\n recordId: this.sourceRecord?.id,\r\n destinationId: this.destinationRecord?.id\r\n };\r\n\r\n await this.moveRecord(payload);\r\n }\r\n\r\n if (!this.isMoveByPosition) {\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(this.destinationRecord?.id)\r\n );\r\n } else {\r\n await this.selectedRangeChanged();\r\n }\r\n\r\n this.clearSavedRecord();\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Copy Record to new location\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onCopyRecordAction() {\r\n try {\r\n const action = `Copy ${\r\n this.sourceRecord?.recordType\r\n }: '${fullRecordVersionName(this.sourceRecord)}'`;\r\n\r\n if (this.sourceRecord?.isLink ?? false) {\r\n const payload = {\r\n recordId: this.sourceRecord?.id ?? -1,\r\n recordParentId: this.sourceRecord?.ancestor?.id ?? -1,\r\n destinationId: this.destinationRecord?.id ?? -1\r\n };\r\n await this.copyRecordShortcut(payload);\r\n } else {\r\n const payload = {\r\n recordId: this.sourceRecord?.id,\r\n destinationId: this.destinationRecord?.id\r\n };\r\n await this.copyRecord(payload);\r\n }\r\n\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(this.destinationRecord?.id)\r\n );\r\n\r\n this.clearSavedRecord();\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Event on Batch Move Action Performed\r\n * @param sourceRecord\r\n * @param destinationRecord\r\n * @param moveOperation\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onBatchMoveAction(sourceRecord, destinationRecord, moveOperation) {\r\n try {\r\n const action = `${moveOperation} ${\r\n sourceRecord?.recordType\r\n }: '${fullRecordVersionName(sourceRecord)}'`;\r\n\r\n const payload = {\r\n recordId: sourceRecord.id,\r\n destinationId: destinationRecord.id\r\n };\r\n\r\n moveOperation === contextMenuRecordOperation.Cut\r\n ? await this.moveRecord(payload)\r\n : await this.copyRecord(payload);\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Event on Batch Move Action Performed\r\n * @param sourceRecord\r\n * @param destinationRecord\r\n * @param moveOperation\r\n * @param option\r\n * @param templateIndex\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onBatchMoveItemsAction(\r\n sourceRecord,\r\n destinationRecord,\r\n moveOperation,\r\n option,\r\n templateIndex\r\n ) {\r\n try {\r\n const action = `${moveOperation} ${\r\n sourceRecord?.recordType\r\n }: '${fullRecordVersionName(sourceRecord)}'`;\r\n\r\n const payload = {\r\n sourceId: sourceRecord?.id ?? -1,\r\n destinationId: destinationRecord?.id ?? -1,\r\n option: option,\r\n index: templateIndex\r\n };\r\n\r\n console.log(\"Payload\", payload);\r\n\r\n moveOperation === contextMenuRecordOperation.Cut\r\n ? await this.deferAgendaItem(payload)\r\n : await this.referAgendaItem(payload);\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Perform Context Menu Action\r\n * @param {{name: string, record: object}} action\r\n */\r\n\r\n async performContextMenuAction(action) {\r\n try {\r\n console.log(\r\n `${this.$options.name} performContextMenuAction() action:`,\r\n action\r\n );\r\n const type = action.name;\r\n const record = action.record;\r\n\r\n switch (type) {\r\n case contextMenuRecordOperation.Copy: {\r\n this.clearSavedRecord();\r\n\r\n const payload = {\r\n type: contextMenuRecordOperation.Copy,\r\n record: record\r\n };\r\n this.setMovedRecord(payload);\r\n\r\n this.showSnackbarSuccess(\r\n `Successfully Copied ${record.name}`,\r\n true\r\n );\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.Cut: {\r\n this.clearSavedRecord();\r\n\r\n const payload = {\r\n type: contextMenuRecordOperation.Cut,\r\n record: record\r\n };\r\n this.setMovedRecord(payload);\r\n\r\n this.showSnackbarSuccess(`Successfully Cut ${record.name}`, true);\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.Paste: {\r\n //For Batch\r\n if (this.movedRecords?.records?.length ?? 0) {\r\n this.movedRecords.moveType === contextMenuRecordOperation.Cut\r\n ? await this.prepareBatchMoveRecordsDialog(\r\n this.movedRecords.records,\r\n record,\r\n contextMenuRecordOperation.Cut\r\n )\r\n : await this.prepareBatchMoveRecordsDialog(\r\n this.movedRecords.records,\r\n record,\r\n contextMenuRecordOperation.Copy\r\n );\r\n break;\r\n } else {\r\n if (!this.movedRecord.record) return;\r\n\r\n if (this.movedRecord.moveType === contextMenuRecordOperation.Cut)\r\n await this.prepareMoveRecordDialog(\r\n this.movedRecord.record,\r\n record\r\n );\r\n else {\r\n await this.prepareCopyRecordDialog(\r\n this.movedRecord.record,\r\n record\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n\r\n case contextMenuRecordOperation.Shortcut: {\r\n if (!this.movedRecord.record) return;\r\n\r\n if (this.movedRecord?.record?.isLink ?? false) {\r\n if (this.movedRecord.moveType === contextMenuRecordOperation.Cut)\r\n await this.prepareMoveRecordDialog(\r\n this.movedRecord.record,\r\n record\r\n );\r\n else {\r\n await this.prepareCopyRecordDialog(\r\n this.movedRecord.record,\r\n record\r\n );\r\n }\r\n } else {\r\n this.sourceRecord = this.movedRecord.record;\r\n this.destinationRecord = record;\r\n this.visibleDialogPasteShortcut = true;\r\n }\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.JumpOriginal: {\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(record.id)\r\n );\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.Delete: {\r\n this.selectedRecord = record;\r\n this.visibleDialogDelete = true;\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.SubmitItems: {\r\n this.selectedRecord = record;\r\n this.isRecallOperation = false;\r\n this.visibleSubmitRecallAgendaItemsDialog = true;\r\n break;\r\n }\r\n\r\n case contextMenuRecordOperation.RecallItems: {\r\n this.selectedRecord = record;\r\n this.isRecallOperation = true;\r\n this.visibleSubmitRecallAgendaItemsDialog = true;\r\n break;\r\n }\r\n }\r\n } catch (e) {\r\n this.showSnackbarError(e, true);\r\n }\r\n },\r\n\r\n /**\r\n * Clear Store Data\r\n */\r\n async clearSavedRecord() {\r\n try {\r\n const payload = {\r\n type: undefined,\r\n record: undefined\r\n };\r\n this.setMovedRecord(payload);\r\n\r\n const batchPayload = {\r\n type: undefined,\r\n records: []\r\n };\r\n this.setMovedRecords(batchPayload);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Delete Record\r\n * TODO: Test Different Record Types\r\n * @return {Promise}\r\n */\r\n async onRecordDelete() {\r\n try {\r\n const parentId = this.selectedRecord?.parentId ?? -1;\r\n\r\n //Verify if parent record is already expanded\r\n const isParentExpanded =\r\n this.$router.currentRoute.params?.id?.toString() ===\r\n parentId.toString();\r\n\r\n if (this.selectedRecord?.isLink ?? false) {\r\n const payload = {\r\n id: this.selectedRecord.id ?? -1,\r\n parentId: parentId\r\n };\r\n await this.deleteRecordShortcut(payload);\r\n } else await this.deleteRecord(this.selectedRecord);\r\n\r\n // Locate parent of deleted record\r\n if (this.canNavigateToModuleItem(parentId) && !isParentExpanded) {\r\n await this.$router.push(this.createModuleItemContentRoute(parentId));\r\n }\r\n } catch (e) {\r\n this.showSnackbarError(e, true);\r\n }\r\n },\r\n\r\n /**\r\n * Event On Item Refer\r\n * @param option\r\n * @param templateIndex\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onItemRefer(option, templateIndex) {\r\n try {\r\n console.log(\r\n `${this.$options.name} onItemDefer() Insert Option`,\r\n option\r\n );\r\n console.log(\r\n `${this.$options.name} onItemDefer() templateIndex: `,\r\n templateIndex\r\n );\r\n\r\n const operation = findAgendaItemOperation(agendaItemOperation.refer);\r\n const action = `${operation?.label} ${\r\n this.sourceRecord?.recordType\r\n }: '${fullRecordVersionName(this.sourceRecord)}'`;\r\n\r\n const payload = {\r\n sourceId: this.sourceRecord?.id ?? -1,\r\n destinationId: this.destinationRecord?.id ?? -1,\r\n option: option,\r\n index: templateIndex\r\n };\r\n\r\n const result = await this.referAgendaItem(payload);\r\n\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(result?.data?.id)\r\n );\r\n\r\n this.clearSavedRecord();\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Event On Item Defer\r\n * @param option\r\n * @param templateIndex\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onItemDefer(option, templateIndex) {\r\n try {\r\n console.log(\r\n `${this.$options.name} onItemDefer() Insert Option`,\r\n option\r\n );\r\n console.log(\r\n `${this.$options.name} onItemDefer() templateIndex: `,\r\n templateIndex\r\n );\r\n\r\n const operation = findAgendaItemOperation(agendaItemOperation.defer);\r\n const action = `${operation?.label} ${\r\n this.sourceRecord?.recordType\r\n }: '${fullRecordVersionName(this.sourceRecord)}'`;\r\n\r\n const payload = {\r\n sourceId: this.sourceRecord?.id ?? -1,\r\n destinationId: this.destinationRecord?.id ?? -1,\r\n option: option,\r\n index: templateIndex\r\n };\r\n\r\n await this.deferAgendaItem(payload);\r\n\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(this.sourceRecord?.id)\r\n );\r\n\r\n this.clearSavedRecord();\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * On File Dropped Action\r\n * @param {{draggedFile: File, destinationRecord: Object}} payload\r\n */\r\n async onFileDropped(payload) {\r\n try {\r\n if (payload.draggedFile === undefined) {\r\n this.showSnackbarError(\"Please Select File Type Only\", true);\r\n return;\r\n }\r\n this.draggedFile = payload.draggedFile;\r\n this.destinationRecord = payload.destinationRecord;\r\n\r\n // If local file is dropped on Folder or an item , set file in local store and route to that record\r\n if (isDirectUploadAllowed(this.destinationRecord)) {\r\n this.setLocalUploadedFile(this.draggedFile);\r\n if (this.canNavigateToModuleItem(this.destinationRecord.id)) {\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(this.destinationRecord.id)\r\n );\r\n }\r\n } else this.visibleUploadLocalFileDialog = true;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * On Upload Local File Action\r\n * @param isInsertFile\r\n * @param isInsertFileAtBeginning\r\n * @param {{isCheckInDraft: boolean, isCheckInOCR : boolean, checkInComment : string}} checkInOption\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onUploadLocalFile(\r\n isInsertFile,\r\n isInsertFileAtBeginning,\r\n checkInOption\r\n ) {\r\n try {\r\n console.log(\r\n `${this.$options.name} onUploadLocalFile() isInsertFile`,\r\n isInsertFile\r\n );\r\n console.log(\r\n `${this.$options.name} onUploadLocalFile() isInsertFileAtBeginning: `,\r\n isInsertFileAtBeginning\r\n );\r\n\r\n const operation = findImageOperation(imageOperation.Import);\r\n const action = `${operation?.label} ${\r\n this.draggedFile?.name\r\n } to '${fullRecordVersionName(this.destinationRecord)}'`;\r\n\r\n const insertOption = isInsertFile\r\n ? isInsertFileAtBeginning\r\n ? insertFileOption.beforeFirstPage\r\n : insertFileOption.afterLastPage\r\n : insertFileOption.overwrite;\r\n\r\n const model = UploadOptionModel(\r\n checkInOption.checkInComment,\r\n checkInOption.isCheckInOCR,\r\n checkInOption.isCheckInDraft,\r\n insertOption\r\n );\r\n\r\n let result = undefined;\r\n switch (this.destinationRecord.recordTypeId) {\r\n case recordType.RECORD: {\r\n result = await this.uploadFile({\r\n id: this.destinationRecord?.id ?? -1,\r\n file: this.draggedFile,\r\n uploadFileModel: model\r\n });\r\n break;\r\n }\r\n case recordType.FILE: {\r\n result = await this.checkInFile({\r\n id: this.destinationRecord?.id ?? -1,\r\n file: this.draggedFile,\r\n uploadFileModel: model\r\n });\r\n break;\r\n }\r\n }\r\n\r\n //Jump to record that has been updated\r\n if ((result?.id ?? -1) !== (this.selectedModuleItemId ?? -1)) {\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(result?.id)\r\n );\r\n }\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Paste Shortcut Event\r\n * @return {{type: string, message: string, outcome: string}}\r\n */\r\n async onPasteShortcutRecordAction() {\r\n try {\r\n const action = `Paste Shortcut ${\r\n this.sourceRecord?.recordType\r\n }: '${fullRecordVersionName(this.sourceRecord)}'`;\r\n\r\n const payload = {\r\n recordId: this.sourceRecord?.id,\r\n destinationId: this.destinationRecord?.id\r\n };\r\n\r\n await this.pasteRecordShortcut(payload);\r\n\r\n await this.$router.push(\r\n this.createModuleItemContentRoute(this.destinationRecord?.id)\r\n );\r\n\r\n this.clearSavedRecord();\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n },\r\n\r\n /**\r\n * Event called when Load More Records is clicked\r\n * @return {Promise}\r\n */\r\n async loadMoreRecords() {\r\n try {\r\n this.loading = true;\r\n const item = Math.floor(this.items?.length / 10) * 10; // Important: When a selected record is appended to the list without fetch, this code makes sure that it doesn't increase startIndex, which will overwrite other record's place.\r\n this.startIndex = (item ?? 0) + 1; //Get displayed items. Required so that new items can be appended\r\n const id =\r\n this.$router?.currentRoute?.params?.expandedId ?? //This helps us to maintain expanded record even when other record is selected\r\n this.$router?.currentRoute?.params?.id;\r\n await this.listItems(id ?? -1);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n },\r\n\r\n /**\r\n * Event called when Node range is Changed\r\n * @return {Promise}\r\n */\r\n async selectedRangeChanged() {\r\n try {\r\n // Reset to get values from start\r\n this.startIndex = 1;\r\n\r\n // This helps us to maintain expanded record even when other record is selected\r\n const params = this.$router?.currentRoute?.params;\r\n const id = params?.expandedId ?? params?.id ?? -1;\r\n\r\n await this.listItems(id ?? -1);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * Close Batch Move Records Dialog\r\n */\r\n closeBatchMoveRecordsDialog() {\r\n this.visibleBatchMoveRecordsDialog = false;\r\n },\r\n\r\n /**\r\n * Close Batch Move Items Dialog\r\n */\r\n closeBatchMoveItemsDialog() {\r\n this.visibleBatchMoveItemsDialog = false;\r\n },\r\n\r\n /**\r\n * Close Move Record Dialog\r\n */\r\n closeMoveRecordDialog() {\r\n this.visibleMoveRecordDialog = false;\r\n this.insertTreePosition = -1;\r\n this.isMoveByPosition = false;\r\n },\r\n\r\n /**\r\n * Is Commit Refer Defer Batch Operation\r\n * @param {{Array}} batchRecords\r\n * @return {boolean}\r\n */\r\n isCommitReferDeferBatchOperation(batchRecords) {\r\n for (const record of batchRecords) {\r\n if (record?.recordTypeId !== recordType.ITEM) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n\r\n /**\r\n * Event on Close Submit Recall Agenda Items Dialog\r\n */\r\n closeSubmitRecallAgendaItemsDialog() {\r\n this.isRecallOperation = false;\r\n this.visibleSubmitRecallAgendaItemsDialog = false;\r\n },\r\n\r\n /**\r\n * Event on Items Submit Recall\r\n * @param operation\r\n * @return {Promise<{type: string, message: string, outcome: string}>}\r\n */\r\n async onItemsSubmitRecall(operation) {\r\n try {\r\n const action = `${operation?.label} Agenda Item`;\r\n\r\n const id = this.selectedRecord?.id ?? -1;\r\n\r\n const isSubmitOperation =\r\n operation?.name === agendaItemOperation.submit;\r\n\r\n this.selectedRecord?.recordTypeId === recordType.MEETING\r\n ? isSubmitOperation\r\n ? await this.submitMeetingAgendaItems(id)\r\n : await this.recallMeetingAgendaItems(id)\r\n : isSubmitOperation\r\n ? await this.submitSectionAgendaItems(id)\r\n : await this.recallSectionAgendaItems(id);\r\n\r\n return createActionResultSuccess(action);\r\n } catch (e) {\r\n return createActionResultError(e?.toString());\r\n }\r\n }\r\n },\r\n\r\n watch: {\r\n /**\r\n * recordsFetchCount is changed, Load Drawer Children accordingly per new recordsFetchCount\r\n * @return {Promise}\r\n */\r\n async recordsFetchCount() {\r\n await this.selectedRangeChanged();\r\n },\r\n\r\n /**\r\n * Watch if Update Record List is Required\r\n * @param id\r\n * @return {Promise}\r\n */\r\n async fetchRecordListById(id) {\r\n try {\r\n if (\r\n this.$router.currentRoute.params?.id?.toString() === id?.toString() &&\r\n !this.$router.currentRoute.params?.expandedId //Make sure the record is expanded in Drawer List\r\n ) {\r\n await this.selectedRangeChanged();\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n } finally {\r\n this.updateRecordListById(undefined);\r\n }\r\n },\r\n\r\n async searchDrawerItemName() {\r\n if (!this.searchDrawerItemName?.length ?? true) {\r\n this.serverSearchPerformed = false;\r\n const id =\r\n this.$router?.currentRoute?.params?.expandedId ?? //This helps us to maintain expanded record even when other record is selected\r\n this.$router?.currentRoute?.params?.id;\r\n await this.listItems(id ?? -1);\r\n }\r\n }\r\n }\r\n};\r\n","/**\r\n * Base Component Mixin serves as a base class for components\r\n */\r\nimport { isEmpty } from \"@/utils\";\r\n\r\nexport const baseComponentMixin = {\r\n data() {\r\n return {\r\n /**\r\n * Current Error\r\n * @type {string}\r\n */\r\n currentError: \"\",\r\n\r\n /**\r\n * Is Loading indicator\r\n * @type {boolean}\r\n */\r\n isLoading: false\r\n };\r\n },\r\n computed: {\r\n /**\r\n * Get component Name\r\n * @returns {string}\r\n */\r\n componentName() {\r\n return this.$options.name;\r\n },\r\n /**\r\n * Get loading Text (overwrite it if needed)\r\n * @returns {string}\r\n */\r\n loadingText() {\r\n return `Loading ...`;\r\n },\r\n /**\r\n * Has an Error occurred\r\n * @returns {boolean}\r\n */\r\n hasError() {\r\n return !isEmpty(this.currentError);\r\n }\r\n },\r\n methods: {\r\n /**\r\n * Build full Method (function) Name (this.componentName + Method Name)\r\n * @param {string} name\r\n * @returns {string}\r\n */\r\n fullMethodName(name) {\r\n return `${this.componentName}.${name}`;\r\n },\r\n /**\r\n * Handle Error\r\n * @param {string} error\r\n * @param {string} methodName\r\n */\r\n handleError(error, methodName = \"\") {\r\n this.currentError = error?.toString() ?? \"\";\r\n\r\n console.error(\r\n methodName ? `${this.fullMethodName(methodName)} Error:` : \"Error:\",\r\n this.currentError\r\n );\r\n },\r\n /**\r\n * Clear current error\r\n */\r\n clearError() {\r\n this.currentError = undefined;\r\n },\r\n /**\r\n * on Alert Visibility Changed event handler\r\n * @param {Boolean|boolean} visible\r\n */\r\n onAlertVisibilityChanged(visible) {\r\n if (!visible) {\r\n this.clearError();\r\n }\r\n }\r\n }\r\n};\r\n","// Mixins\nimport { Registrable, inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { ExtractVue } from '../../util/mixins'\nimport { VueConstructor } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type Groupable = VueConstructor> & {\n activeClass: string\n isActive: boolean\n disabled: boolean\n groupClasses: object\n toggle (e?: Event): void\n}>\n\nexport function factory (\n namespace: T,\n child?: string,\n parent?: string\n): Groupable {\n return RegistrableInject(namespace, child, parent).extend({\n name: 'groupable',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this[namespace]) return undefined\n\n return this[namespace].activeClass\n },\n } as any as PropValidator,\n disabled: Boolean,\n },\n\n data () {\n return {\n isActive: false,\n }\n },\n\n computed: {\n groupClasses (): object {\n if (!this.activeClass) return {}\n\n return {\n [this.activeClass]: this.isActive,\n }\n },\n },\n\n created () {\n this[namespace] && (this[namespace] as any).register(this)\n },\n\n beforeDestroy () {\n this[namespace] && (this[namespace] as any).unregister(this)\n },\n\n methods: {\n toggle (e?: Event) {\n if (this.disabled && e) {\n // Prevent keyboard actions\n // from children elements\n // within disabled tabs\n e.preventDefault()\n return\n }\n this.$emit('change')\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n","import { createNamespacedHelpers } from \"vuex\";\r\nconst { mapGetters } = createNamespacedHelpers(\"solution\");\r\n\r\n/**\r\n * appMixin contains options (adhere to the DRY principle) &\r\n * code re-usability for Application\r\n */\r\nexport const appMixin = {\r\n computed: {\r\n ...mapGetters({\r\n appModuleName: \"appModuleName\",\r\n appModuleTitle: \"appModuleTitle\",\r\n appModuleIcon: \"appModuleIcon\"\r\n })\r\n }\r\n};\r\n","// mutation-types\r\nimport {\r\n SET_DRAWER_RIGHT,\r\n SET_USES_APP_TABS,\r\n SET_USES_SIDEBAR_IMAGE,\r\n SET_APP_BAR_COLLAPSE_ON_SCROLL,\r\n SET_DRAWER_ENABLE_MINI_DRAWER,\r\n SET_COMMAND_BUTTONS_TEXT_STYLE,\r\n SET_COMMAND_BUTTONS_OUTLINED,\r\n SET_COMMAND_BUTTONS_ROUNDED,\r\n SET_COMMAND_BUTTONS_ELEVATION,\r\n SET_RECORDS_FETCH_COUNT\r\n} from \"@/store/solution/mutation-types\";\r\n\r\nimport {\r\n SET_ENABLE_MODULE_CATEGORY,\r\n SET_ENABLE_MODULE_TASKS,\r\n SET_ENABLE_MODULE_PROJECTS,\r\n SET_ENABLE_MODULE_AGENDA,\r\n SET_ENABLE_MODULE_SEARCH\r\n} from \"@/store/user/mutation-types\";\r\n\r\n// vuex\r\nimport { createNamespacedHelpers } from \"vuex\";\r\nconst { mapGetters, mapMutations } = createNamespacedHelpers(\"solution\");\r\n\r\nconst {\r\n mapGetters: mapGettersUser,\r\n mapMutations: mapMutationsUser\r\n} = createNamespacedHelpers(\"user\");\r\n\r\n/**\r\n * User Settings Mixin - encapsulate user Settings functionality\r\n */\r\nexport const userSettingsMixin = {\r\n computed: {\r\n ...mapGetters([\r\n \"usesAppTabs\",\r\n \"appBarCollapseOnScroll\",\r\n \"usesSidebarImage\",\r\n \"visibleRightDrawer\",\r\n \"enableMiniDrawer\",\r\n \"buttonTextStyle\",\r\n \"buttonOutlined\",\r\n \"buttonRounded\",\r\n \"buttonElevation\",\r\n \"recordsFetchCount\"\r\n ]),\r\n ...mapGettersUser([\r\n \"modules\",\r\n \"isLicensedModule\",\r\n \"enableCategoryModule\",\r\n \"enableSearchModule\",\r\n \"enableTasksModule\",\r\n \"enableProjectsModule\",\r\n \"enableAgendaModule\",\r\n \"enableWebScan\",\r\n \"isEnabledModule\"\r\n ])\r\n },\r\n methods: {\r\n ...mapMutations({\r\n setUsesAppTabs: SET_USES_APP_TABS,\r\n setUsesSidebarImage: SET_USES_SIDEBAR_IMAGE,\r\n setDrawerRight: SET_DRAWER_RIGHT,\r\n setAppBarCollapseOnScroll: SET_APP_BAR_COLLAPSE_ON_SCROLL,\r\n setEnableMiniDrawer: SET_DRAWER_ENABLE_MINI_DRAWER,\r\n setButtonTextStyle: SET_COMMAND_BUTTONS_TEXT_STYLE,\r\n setButtonOutlined: SET_COMMAND_BUTTONS_OUTLINED,\r\n setButtonRounded: SET_COMMAND_BUTTONS_ROUNDED,\r\n setButtonElevation: SET_COMMAND_BUTTONS_ELEVATION,\r\n setRecordsFetchCount: SET_RECORDS_FETCH_COUNT\r\n }),\r\n ...mapMutationsUser({\r\n setEnableModuleSearch: SET_ENABLE_MODULE_SEARCH,\r\n setEnableModuleCategory: SET_ENABLE_MODULE_CATEGORY,\r\n setEnableModuleTasks: SET_ENABLE_MODULE_TASKS,\r\n setEnableModuleProjects: SET_ENABLE_MODULE_PROJECTS,\r\n setEnableModuleAgenda: SET_ENABLE_MODULE_AGENDA\r\n })\r\n }\r\n};\r\n","import { isPublicAccess, publicAccess } from \"@/services/config/configService\";\r\n\r\n/**\r\n * Encapsulate public Access business logic\r\n */\r\nexport const publicAccessMixin = {\r\n computed: {\r\n /**\r\n * is Public Access\r\n * @return {boolean} true if Public Access is enabled\r\n */\r\n isPublicAccess() {\r\n return isPublicAccess;\r\n },\r\n\r\n /**\r\n * public Access\r\n * @return {\r\n * {searcher: {name: string, code: string, repository: string}},\r\n * {appBar: {prominent: boolean, color: string, gradient: string, useTabs: boolean, logo: string, logoSize:number, backgroundImageUrl: string, title: string, collapseOnScroll: boolean, fadeImgOnScroll: boolean, shrinkOnScroll: boolean}}, {sideBar: {enableMiniSidebar: boolean, backgroundImageUrl: string}}, {sideBar: {enableMiniSidebar: boolean, backgroundImageUrl: string}},\r\n * {buttons: {color: string, elevation: number, outlined: boolean, rounded: boolean, textStyle: boolean}},\r\n * {company: {disclaimers: string, name: string, logo: string, description: string, linkedIn: string, address: {zip: string, country: string, city: string, addressLine1: string, addressLine2: string, state: string}}},\r\n * {contact: {name: string, description: string, phone: string, phoneDescription: string, email: string, emailDescription: string}},\r\n * {modules: {visibleFolder: string, visibleCategory: string, visibleMeetings: string}}\r\n * }\r\n */\r\n publicAccess() {\r\n return publicAccess;\r\n }\r\n }\r\n};\r\n","/**\r\n * Contains options (adhere to the DRY principle) & code re-usability\r\n * for components that needs router functionality\r\n */\r\nexport const routerMixin = {\r\n methods: {\r\n /**\r\n * can Navigate To Module Item By Module Item Id\r\n * @param {String|string} moduleName\r\n * @param {Number|number} id\r\n * @return {boolean} true if navigatable To Module Item By Module Item id\r\n */\r\n canNavigateToModuleItemByModuleItemId(moduleName, id) {\r\n return !(\r\n this.$router.currentRoute.name === moduleName &&\r\n this.$router.currentRoute.params?.id?.toString() ===\r\n (id?.toString() ?? \"\")\r\n );\r\n },\r\n\r\n /**\r\n * can Navigate To Module Child Record By id\r\n * @param {String|string} moduleName\r\n * @param {Number|number} id record id\r\n * @param {Number|number} expandedId record's parent id\r\n * @return {boolean}\r\n */\r\n canNavigateToChildRecordById(moduleName, id, expandedId) {\r\n return !(\r\n this.$router.currentRoute.name === moduleName &&\r\n this.$router.currentRoute.params?.id?.toString() === id.toString() &&\r\n this.$router.currentRoute.params?.expandedId?.toString() ===\r\n expandedId.toString()\r\n );\r\n }\r\n }\r\n};\r\n","// Styles\nimport './VListItem.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Routable from '../../mixins/routable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\n\n// Directives\nimport Ripple from '../../directives/ripple'\n\n// Utilities\nimport { getSlot, keyCodes } from './../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport { removed } from '../../util/console'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\nimport { PropType, PropValidator } from 'vue/types/options'\n\nconst baseMixins = mixins(\n Colorable,\n Routable,\n Themeable,\n GroupableFactory('listItemGroup'),\n ToggleableFactory('inputValue')\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n isInGroup: boolean\n isInList: boolean\n isInMenu: boolean\n isInNav: boolean\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-list-item',\n\n directives: {\n Ripple,\n },\n\n inject: {\n isInGroup: {\n default: false,\n },\n isInList: {\n default: false,\n },\n isInMenu: {\n default: false,\n },\n isInNav: {\n default: false,\n },\n },\n\n inheritAttrs: false,\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.listItemGroup) return ''\n\n return this.listItemGroup.activeClass\n },\n } as any as PropValidator,\n dense: Boolean,\n inactive: Boolean,\n link: Boolean,\n selectable: {\n type: Boolean,\n },\n tag: {\n type: String,\n default: 'div',\n },\n threeLine: Boolean,\n twoLine: Boolean,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-list-item--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-list-item': true,\n ...Routable.options.computed.classes.call(this),\n 'v-list-item--dense': this.dense,\n 'v-list-item--disabled': this.disabled,\n 'v-list-item--link': this.isClickable && !this.inactive,\n 'v-list-item--selectable': this.selectable,\n 'v-list-item--three-line': this.threeLine,\n 'v-list-item--two-line': this.twoLine,\n ...this.themeClasses,\n }\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.listItemGroup\n )\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('avatar')) {\n removed('avatar', this)\n }\n },\n\n methods: {\n click (e: MouseEvent | KeyboardEvent) {\n if (e.detail) this.$el.blur()\n\n this.$emit('click', e)\n\n this.to || this.toggle()\n },\n genAttrs () {\n const attrs: Record = {\n 'aria-disabled': this.disabled ? true : undefined,\n tabindex: this.isClickable && !this.disabled ? 0 : -1,\n ...this.$attrs,\n }\n\n if (this.$attrs.hasOwnProperty('role')) {\n // do nothing, role already provided\n } else if (this.isInNav) {\n // do nothing, role is inherit\n } else if (this.isInGroup) {\n attrs.role = 'option'\n attrs['aria-selected'] = String(this.isActive)\n } else if (this.isInMenu) {\n attrs.role = this.isClickable ? 'menuitem' : undefined\n attrs.id = attrs.id || `list-item-${this._uid}`\n } else if (this.isInList) {\n attrs.role = 'listitem'\n }\n\n return attrs\n },\n toggle () {\n if (this.to && this.inputValue === undefined) {\n this.isActive = !this.isActive\n }\n this.$emit('change')\n },\n },\n\n render (h): VNode {\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n ...this.genAttrs(),\n }\n data[this.to ? 'nativeOn' : 'on'] = {\n ...data[this.to ? 'nativeOn' : 'on'],\n keydown: (e: KeyboardEvent) => {\n if (!this.disabled) {\n /* istanbul ignore else */\n if (e.keyCode === keyCodes.enter) this.click(e)\n\n this.$emit('keydown', e)\n }\n },\n }\n\n if (this.inactive) tag = 'div'\n if (this.inactive && this.to) {\n data.on = data.nativeOn\n delete data.nativeOn\n }\n\n const children = getSlot(this, 'default', {\n active: this.isActive,\n toggle: this.toggle,\n })\n\n return h(tag, this.isActive ? this.setTextColor(this.color, data) : data, children)\n },\n})\n","// router\r\nimport { createModuleItemContentRouteLocation } from \"@/router/solution/solutionRoutes\";\r\n\r\n// mixins\r\nimport { appMixin } from \"@/mixins/shared/base/app/appMixin\";\r\nimport { routerMixin } from \"@/mixins/shared/router/routerMixin\";\r\n\r\n/**\r\n * Contains options (adhere to the DRY principle) & code re-usability\r\n * for components that needs Application module navigatable behavior\r\n */\r\nexport const moduleItemNavigatable = {\r\n mixins: [appMixin, routerMixin],\r\n methods: {\r\n /**\r\n * Navigate to Application Module Item\r\n * @param {Number|number} id Application Module Item id\r\n */\r\n async navigateToModuleItem(id) {\r\n if (!this.canNavigateToModuleItem(id)) {\r\n console.warn(\r\n `Couldn't navigate to ${this.appModuleName} Item by id:`,\r\n id\r\n );\r\n return;\r\n }\r\n\r\n try {\r\n await this.$router.push(this.createModuleItemContentRoute(id));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n /**\r\n * create Module Item Target Route\r\n * @param {Number|number} id Module Item id\r\n * @return {{name: (String|string), params: {id:number}}}\r\n */\r\n createModuleItemContentRoute(id) {\r\n return createModuleItemContentRouteLocation(this.appModuleName, id);\r\n },\r\n\r\n /**\r\n * can Navigate To Module Item\r\n * @param {Number|number} id Module Item id\r\n * @return {boolean} true if Navigatable To Module Item\r\n */\r\n canNavigateToModuleItem(id) {\r\n return this.canNavigateToModuleItemByModuleItemId(this.appModuleName, id);\r\n }\r\n }\r\n};\r\n","import { colorTheme } from \"@/design/colors/mdColors\";\r\n\r\n/**\r\n * snackbar-able Mixin\r\n */\r\nexport const snackbarableMixin = {\r\n data() {\r\n return {\r\n snackbarVisible: false,\r\n snackbarColor: \"\",\r\n snackbarText: \"\",\r\n snackbarTimeout: 2000,\r\n snackbarVisibleCloseButton: true,\r\n snackbarTop: false,\r\n snackbarMultiLine: false\r\n };\r\n },\r\n components: {\r\n Snackbar: () => import(\"@/components/shared/base/BaseSnackbar\")\r\n },\r\n methods: {\r\n /**\r\n * show Snackbar Success\r\n * @param {String} text\r\n * @param {Boolean} top\r\n */\r\n showSnackbarSuccess(text, top = false) {\r\n this.showSnackbar(text, colorTheme.success, top);\r\n },\r\n /**\r\n * show Snackbar Info\r\n * @param {String} text\r\n * @param {Boolean} top\r\n */\r\n showSnackbarInfo(text, top = false) {\r\n this.showSnackbar(text, colorTheme.info, top);\r\n },\r\n /**\r\n * show Snackbar Error (timeout: Use -1 to keep open indefinitely)\r\n * @param {String} text\r\n * @param {Boolean} top\r\n * @param {Number|number} timeout\r\n * @param {Boolean} multiLine\r\n */\r\n showSnackbarError(text, top = false, timeout = -1, multiLine = true) {\r\n this.showSnackbar(text, colorTheme.error, top, timeout, multiLine);\r\n },\r\n /**\r\n * show Snackbar Warning\r\n * @param {String} text\r\n * @param {Boolean} top\r\n */\r\n showSnackbarWarning(text, top = false) {\r\n this.showSnackbar(text, colorTheme.warning, top);\r\n },\r\n /**\r\n * show Snackbar\r\n * @param {String} text\r\n * @param {String} color\r\n * @param {Boolean} top\r\n * @param {Number|number} timeout\r\n * @param {Boolean} multiLine\r\n */\r\n showSnackbar(\r\n text,\r\n color = undefined,\r\n top = false,\r\n timeout = 2000,\r\n multiLine = false\r\n ) {\r\n this.snackbarVisible = true;\r\n this.snackbarColor = color;\r\n this.snackbarText = text;\r\n this.snackbarTop = top;\r\n this.snackbarTimeout = timeout;\r\n this.snackbarMultiLine = multiLine;\r\n },\r\n /**\r\n * close Snackbar\r\n */\r\n closeSnackbar() {\r\n this.snackbarVisible = false;\r\n }\r\n }\r\n};\r\n","import Vue, { VueConstructor } from 'vue'\n\nexport type Toggleable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Toggleable\nexport function factory (prop = 'value', event = 'input') {\n return Vue.extend({\n name: 'toggleable',\n\n model: { prop, event },\n\n props: {\n [prop]: { required: false },\n },\n\n data () {\n return {\n isActive: !!this[prop],\n }\n },\n\n watch: {\n [prop] (val) {\n this.isActive = !!val\n },\n isActive (val) {\n !!val !== this[prop] && this.$emit(event, val)\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n"],"sourceRoot":""}