@acorex/modules 20.0.2 → 20.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-modules-content-management.mjs +1 -0
- package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-BP-HLvDt.mjs → acorex-modules-document-management-acorex-modules-document-management-ClH75xx1.mjs} +28 -27
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-BP-HLvDt.mjs.map → acorex-modules-document-management-acorex-modules-document-management-ClH75xx1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DiE1iI_0.mjs → acorex-modules-document-management-attachment-widget.component-B_tjfzIn.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DiE1iI_0.mjs.map → acorex-modules-document-management-attachment-widget.component-B_tjfzIn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-Bq7bRA5y.mjs → acorex-modules-document-management-create-folder-dialog.component-DNdRcCAs.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-Bq7bRA5y.mjs.map → acorex-modules-document-management-create-folder-dialog.component-DNdRcCAs.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-details-view.component-C3R3GojY.mjs → acorex-modules-document-management-details-view.component-JsK1UgZh.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-details-view.component-C3R3GojY.mjs.map → acorex-modules-document-management-details-view.component-JsK1UgZh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-DnzJ7ujZ.mjs → acorex-modules-document-management-drive-choose.component-DJT9oLek.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-DnzJ7ujZ.mjs.map → acorex-modules-document-management-drive-choose.component-DJT9oLek.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive.component-BW0gVjML.mjs → acorex-modules-document-management-drive.component-DYxpvUWX.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive.component-BW0gVjML.mjs.map → acorex-modules-document-management-drive.component-DYxpvUWX.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-B02pUo3R.mjs → acorex-modules-document-management-large-icons-view.component-B324V2hL.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-B02pUo3R.mjs.map → acorex-modules-document-management-large-icons-view.component-B324V2hL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-IOgOKZHe.mjs → acorex-modules-document-management-large-tiles-view.component-V5gHyu9X.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-IOgOKZHe.mjs.map → acorex-modules-document-management-large-tiles-view.component-V5gHyu9X.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-list-view.component-B1tWiewp.mjs → acorex-modules-document-management-list-view.component-Bm2EH2aT.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-list-view.component-B1tWiewp.mjs.map → acorex-modules-document-management-list-view.component-Bm2EH2aT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs → acorex-modules-document-management-meta-choose-popup.component-q6mDKrFi.mjs} +56 -49
- package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-q6mDKrFi.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BxGnnbvr.mjs → acorex-modules-document-management-permission-definition.provider-DGqVDVLJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BxGnnbvr.mjs.map → acorex-modules-document-management-permission-definition.provider-DGqVDVLJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-BtH4ZteD.mjs → acorex-modules-document-management-rename-node-dialog.component-LgpvDguk.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-BtH4ZteD.mjs.map → acorex-modules-document-management-rename-node-dialog.component-LgpvDguk.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-CSZM_GTs.mjs → acorex-modules-document-management-small-icons-view.component-BwFoe1vd.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-CSZM_GTs.mjs.map → acorex-modules-document-management-small-icons-view.component-BwFoe1vd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CpYgK225.mjs → acorex-modules-document-management-small-tiles-view.component-B5gp0wus.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-CpYgK225.mjs.map → acorex-modules-document-management-small-tiles-view.component-B5gp0wus.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D0GgVrM1.mjs → acorex-modules-platform-management-acorex-modules-platform-management-DqpAYmHM.mjs} +33 -5
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D0GgVrM1.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-DqpAYmHM.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-list-version.component-ZXM2ZJtt.mjs → acorex-modules-platform-management-list-version.component-DidjxkmH.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-list-version.component-ZXM2ZJtt.mjs.map → acorex-modules-platform-management-list-version.component-DidjxkmH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-settings.provider-D5WKWolF.mjs → acorex-modules-platform-management-settings.provider-DcHKHrSK.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-settings.provider-D5WKWolF.mjs.map → acorex-modules-platform-management-settings.provider-DcHKHrSK.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-project-management.mjs +30 -1
- package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workflow-management-task-board.page-R4x5Rq-D.mjs +494 -0
- package/fesm2022/acorex-modules-workflow-management-task-board.page-R4x5Rq-D.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +17 -3
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +1 -1
- package/workflow-management/index.d.ts +2 -1
- package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs +0 -305
- package/fesm2022/acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs.map +0 -1
package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-document-management-meta-choose-popup.component-BcwgdkCu.mjs","sources":["../tmp-esm2022/document-management/lib/features/meta-choose-widget/meta-choose-popup/meta-choose-popup.component.js"],"sourcesContent":["import { Component, signal, ViewEncapsulation, viewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTreeViewModule } from '@acorex/components/tree-view';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMMetaDataDefinitionCategoryService } from '@acorex/modules/platform-management';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/search-box\";\nimport * as i3 from \"@acorex/components/tree-view\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@acorex/components/button\";\nimport * as i6 from \"@acorex/core/translation\";\nexport class AXPMetaChoosePopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.categoryService = inject(AXMMetaDataDefinitionCategoryService);\n this.treeRef = viewChild('treeRef');\n /**\n * Holds the complete list of tree items in a flattened structure.\n * This structure makes it easy to:\n * 1) Provide children lazily via `provideLazyTreeView` using `parentId`.\n * 2) Perform search across all levels while still being able to include\n * ancestor nodes of matched items.\n */\n this.treeViewData = signal([]);\n /**\n * Keeps an immutable reference to the original (unfiltered) data so that\n * we can restore the tree when the search box is cleared.\n */\n this.originalTreeData = [];\n this.searchTerm = signal('');\n this.selectedNode = null;\n this.provideLazyTreeView = (selectedItemId) => {\n if (selectedItemId) {\n return Promise.resolve(this.treeViewData().filter((x) => x.parentId === selectedItemId));\n }\n else {\n return Promise.resolve(this.treeViewData().filter((x) => !x.parentId));\n }\n };\n }\n ngOnInit() {\n this.categoryService.getAllWithItems().then((categories) => {\n //#region ---- Helper Functions ----\n const convertCategoryToTreeItem = (category) => {\n const categoryChildren = [\n // Map sub-categories recursively\n ...category.categories.map((c) => convertCategoryToTreeItem(c)),\n // Map items of current category\n ...category.items.map((item) => ({\n id: item.id,\n text: item.name,\n parentId: category.id,\n hasCheckBox: true,\n hasChild: false,\n isSelected: false\n })),\n ];\n return {\n id: category.id,\n text: category.title,\n parentId: category.parentId,\n hasCheckBox: false,\n hasChild: categoryChildren.length > 0,\n children: categoryChildren,\n isSelected: false\n };\n };\n //#endregion\n // Build a flattened list of all categories & items to simplify\n // lazy-loading & search operations.\n const flatList = [];\n const buildTree = (category) => {\n const categoryItem = {\n id: category.id,\n text: category.title,\n parentId: category.parentId,\n hasCheckBox: false,\n hasChild: (category.categories?.length ?? 0) + (category.items?.length ?? 0) > 0,\n isSelected: false\n };\n flatList.push(categoryItem);\n // Recurse into sub-categories\n category.categories.forEach((sub) => buildTree(sub));\n // Push items of current category\n category.items.forEach((item) => {\n flatList.push({\n id: item.id,\n text: item.name,\n parentId: category.id,\n hasCheckBox: true,\n hasChild: false,\n isSelected: false\n });\n });\n };\n categories.forEach((c) => buildTree(c));\n // Persist original data & initialise reactive signal.\n this.originalTreeData = flatList;\n this.treeViewData.set([...flatList]);\n });\n }\n handleNodeClick(e) {\n this.selectedNode = e.data;\n }\n handleSelectClick() {\n if (this.selectedNode) {\n this.close(this.selectedNode);\n }\n else {\n this.close();\n }\n }\n handleCreateNewClick() {\n this.close('create-new');\n }\n handleCloseClick() {\n this.close();\n }\n handleChangeSearchValue(e) {\n const term = (e.value ?? '').trim();\n this.searchTerm.set(term);\n // When search is cleared, simply restore the initial dataset\n if (!term) {\n this.treeViewData.set([...this.originalTreeData]);\n return;\n }\n const loweredTerm = term.toLowerCase();\n // Build a quick lookup map to traverse ancestors efficiently\n const mapById = new Map(this.originalTreeData.map((item) => [item.id, item]));\n // Helper to collect all ancestors of a given node\n const collectAncestors = (node) => {\n const ancestors = [];\n let currentParentId = node.parentId;\n while (currentParentId) {\n const parent = mapById.get(currentParentId);\n if (!parent) {\n break;\n }\n ancestors.push(parent);\n currentParentId = parent.parentId;\n }\n return ancestors;\n };\n // 1) Find all nodes whose text contains the search term\n const matchedNodes = this.originalTreeData.filter((item) => item.text.toLowerCase().includes(loweredTerm));\n // 2) Collect their ancestors to ensure the tree can render correct paths\n const resultSet = new Map();\n matchedNodes.forEach((node) => {\n resultSet.set(node.id, node);\n collectAncestors(node).forEach((ancestor) => resultSet.set(ancestor.id, ancestor));\n });\n this.treeViewData.set(Array.from(resultSet.values()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXPMetaChoosePopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXPMetaChoosePopupComponent, isStandalone: true, selector: \"axp-meta-choose-popup\", providers: [], viewQueries: [{ propertyName: \"treeRef\", first: true, predicate: [\"treeRef\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden\\\">\\n <div class=\\\"ax-w-full\\\">\\n <ax-search-box\\n [placeholder]=\\\"('widget.lookup.search' | translate | async)\\\"\\n [value]=\\\"searchTerm()\\\"\\n (onValueChanged)=\\\"handleChangeSearchValue($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n </div>\\n <ax-tree-view\\n class=\\\"ax-h-[50vh]\\\"\\n #treeRef\\n [parentField]=\\\"'parentId'\\\"\\n hasChildField=\\\"hasChild\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n [selectionMode]=\\\"'multiple'\\\"\\n [hasCheckboxField]=\\\"'isSelected'\\\"\\n >\\n \\n </ax-tree-view>\\n </div>\\n <ax-footer>\\n <ax-suffix>\\n <ax-button look=\\\"solid\\\" [text]=\\\"('close' | translate | async)!\\\" (onClick)=\\\"handleCloseClick()\\\"> </ax-button>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"('select' | translate | async)!\\\"\\n (onClick)=\\\"handleSelectClick()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n </ax-footer>\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: \n // Angular\n CommonModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"ngmodule\", type: \n // ACoreX\n AXSearchBoxModule }, { kind: \"component\", type: i2.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXTreeViewModule }, { kind: \"component\", type: i3.AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"items\", \"showCheckbox\", \"hasCheckboxField\", \"selectionMode\", \"selectionBehavior\", \"selectionScope\", \"focusNodeEnabled\", \"valueField\", \"textField\", \"visibleField\", \"disableField\", \"hasChildField\", \"selectedField\", \"expandedField\", \"tooltipField\", \"childrenField\", \"activeField\", \"indeterminateField\", \"parentField\", \"iconField\", \"toggleIcons\", \"look\", \"showEmptyNodeMassage\", \"itemTemplate\", \"emptyTemplate\", \"expandOn\"], outputs: [\"onSelectionChanged\", \"onItemSelectedChanged\", \"onNodeClick\", \"onCollapsedChanged\", \"onNodedbClick\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: i4.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i5.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXPMetaChoosePopupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-meta-choose-popup', imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXSearchBoxModule,\n AXTreeViewModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule\n // Platform\n ], encapsulation: ViewEncapsulation.None, providers: [], template: \"<div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden\\\">\\n <div class=\\\"ax-w-full\\\">\\n <ax-search-box\\n [placeholder]=\\\"('widget.lookup.search' | translate | async)\\\"\\n [value]=\\\"searchTerm()\\\"\\n (onValueChanged)=\\\"handleChangeSearchValue($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n </div>\\n <ax-tree-view\\n class=\\\"ax-h-[50vh]\\\"\\n #treeRef\\n [parentField]=\\\"'parentId'\\\"\\n hasChildField=\\\"hasChild\\\"\\n [items]=\\\"provideLazyTreeView\\\"\\n (onNodeClick)=\\\"handleNodeClick($event)\\\"\\n [selectionMode]=\\\"'multiple'\\\"\\n [hasCheckboxField]=\\\"'isSelected'\\\"\\n >\\n \\n </ax-tree-view>\\n </div>\\n <ax-footer>\\n <ax-suffix>\\n <ax-button look=\\\"solid\\\" [text]=\\\"('close' | translate | async)!\\\" (onClick)=\\\"handleCloseClick()\\\"> </ax-button>\\n <ax-button\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"('select' | translate | async)!\\\"\\n (onClick)=\\\"handleSelectClick()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n </ax-footer>\" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2RvY3VtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZXRhLWNob29zZS13aWRnZXQvbWV0YS1jaG9vc2UtcG9wdXAvbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2RvY3VtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZXRhLWNob29zZS13aWRnZXQvbWV0YS1jaG9vc2UtcG9wdXAvbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFpRCxNQUFNLDhCQUE4QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsb0NBQW9DLEVBQXVGLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7O0FBaUNoTCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsbUJBQW1CO0lBcEJwRTs7UUFzQmMsb0JBQWUsR0FBRyxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUV6RSxZQUFPLEdBQUcsU0FBUyxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUVwRDs7Ozs7O1dBTUc7UUFDSCxpQkFBWSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFN0M7OztXQUdHO1FBQ0sscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQztRQUV2QyxlQUFVLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGlCQUFZLEdBQTJCLElBQUksQ0FBQztRQTRFdEQsd0JBQW1CLEdBQUcsQ0FBQyxjQUFnQyxFQUE4QixFQUFFO1lBQ25GLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsQ0FDbkUsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUNqRCxDQUFDO1lBQ04sQ0FBQztRQUNMLENBQUMsQ0FBQztLQW9FTDtJQXhKWSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUV2RCx3Q0FBd0M7WUFFeEMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLFFBQW1FLEVBQW1CLEVBQUU7Z0JBQ3ZILE1BQU0sZ0JBQWdCLEdBQXNCO29CQUN4QyxpQ0FBaUM7b0JBQ2pDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUE0RCxFQUFFLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUgsZ0NBQWdDO29CQUNoQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBc0MsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDL0QsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ3JCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUcsS0FBSztxQkFDckIsQ0FBQyxDQUFDO2lCQUNOLENBQUM7Z0JBRUYsT0FBTztvQkFDSCxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3JDLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRyxLQUFLO2lCQUNyQixDQUFDO1lBQ04sQ0FBQyxDQUFDO1lBRUYsWUFBWTtZQUVaLCtEQUErRDtZQUMvRCxvQ0FBb0M7WUFDcEMsTUFBTSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztZQUV2QyxNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQW1FLEVBQVEsRUFBRTtnQkFDNUYsTUFBTSxZQUFZLEdBQW9CO29CQUNsQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNwQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ2hGLFVBQVUsRUFBRyxLQUFLO2lCQUNyQixDQUFDO2dCQUVGLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRTVCLDhCQUE4QjtnQkFDOUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUVyRCxpQ0FBaUM7Z0JBQ2pDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ3JCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUcsS0FBSztxQkFDckIsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO1lBRUYsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEMsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFFUCxDQUFDO0lBY1MsZUFBZSxDQUFDLENBQTJCO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQXVCLENBQUM7SUFDbEQsQ0FBQztJQUVTLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUVTLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFUyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxDQUFzQjtRQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXZDLDZEQUE2RDtRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ3ZELENBQUM7UUFFRixrREFBa0Q7UUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQXFCLEVBQXFCLEVBQUU7WUFDbEUsTUFBTSxTQUFTLEdBQXNCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3BDLE9BQU8sZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDVixNQUFNO2dCQUNWLENBQUM7Z0JBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVGLHdEQUF3RDtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQ2hELENBQUM7UUFFRix5RUFBeUU7UUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDckQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7OEdBL0tRLDJCQUEyQjtrR0FBM0IsMkJBQTJCLG9FQUp6QixFQUVWLHFLQ3hDTCxrbUNBaUNjO2dCRE5OLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixTQUFTO2dCQUNULGlCQUFpQiw0WUFDakIsZ0JBQWdCLDRvQkFDaEIsaUJBQWlCLHFXQUNqQixjQUFjLDZYQUNkLG1CQUFtQjs7MkZBUWQsMkJBQTJCO2tCQXBCdkMsU0FBUzsrQkFDRyx1QkFBdUIsV0FHdkI7d0JBQ0wsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFdBQVc7cUJBQ2QsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixFQUVWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uLCB2aWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFNlYXJjaEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcbmltcG9ydCB7IEFYVHJlZVZpZXdNb2R1bGUsIEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudCwgQVhUcmVlVmlld0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5U2VydmljZSwgQVhNTWV0YURhdGFEZWZpbml0aW9uQ2F0ZWdvcnlXaXRoSXRlbXNFbnRpdHlNb2RlbCwgQVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvcGxhdGZvcm0tbWFuYWdlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQTWV0YVRyZWVJdGVtIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgICBoYXNDaGVja0JveD86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIGlzU2VsZWN0ZWQgOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjonYXhwLW1ldGEtY2hvb3NlLXBvcHVwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0YS1jaG9vc2UtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9tZXRhLWNob29zZS1wb3B1cC5jb21wb25lbnQuc2NzcycsXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBBbmd1bGFyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgLy8gQUNvcmVYXG4gICAgICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgICAgICBBWFRyZWVWaWV3TW9kdWxlLFxuICAgICAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICAgICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgICAgIEFYVHJhbnNsYXRpb25Nb2R1bGVcbiAgICAgICAgLy8gUGxhdGZvcm1cbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQTWV0YUNob29zZVBvcHVwQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlUGFnZUNvbXBvbmVudCB7XG5cbiAgICBwcm90ZWN0ZWQgY2F0ZWdvcnlTZXJ2aWNlID0gaW5qZWN0KEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5U2VydmljZSk7XG4gICAgXG4gICAgdHJlZVJlZiA9IHZpZXdDaGlsZDxBWFRyZWVWaWV3Q29tcG9uZW50PigndHJlZVJlZicpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHRyZWUgaXRlbXMgaW4gYSBmbGF0dGVuZWQgc3RydWN0dXJlLlxuICAgICAqIFRoaXMgc3RydWN0dXJlIG1ha2VzIGl0IGVhc3kgdG86XG4gICAgICogIDEpIFByb3ZpZGUgY2hpbGRyZW4gbGF6aWx5IHZpYSBgcHJvdmlkZUxhenlUcmVlVmlld2AgdXNpbmcgYHBhcmVudElkYC5cbiAgICAgKiAgMikgUGVyZm9ybSBzZWFyY2ggYWNyb3NzIGFsbCBsZXZlbHMgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byBpbmNsdWRlXG4gICAgICogICAgIGFuY2VzdG9yIG5vZGVzIG9mIG1hdGNoZWQgaXRlbXMuXG4gICAgICovXG4gICAgdHJlZVZpZXdEYXRhID0gc2lnbmFsPEFYUE1ldGFUcmVlSXRlbVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBLZWVwcyBhbiBpbW11dGFibGUgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCAodW5maWx0ZXJlZCkgZGF0YSBzbyB0aGF0XG4gICAgICogd2UgY2FuIHJlc3RvcmUgdGhlIHRyZWUgd2hlbiB0aGUgc2VhcmNoIGJveCBpcyBjbGVhcmVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgb3JpZ2luYWxUcmVlRGF0YTogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcblxuICAgIHByb3RlY3RlZCBzZWFyY2hUZXJtID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZE5vZGU6IEFYUE1ldGFUcmVlSXRlbSB8IG51bGwgPSBudWxsO1xuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlTZXJ2aWNlLmdldEFsbFdpdGhJdGVtcygpLnRoZW4oKGNhdGVnb3JpZXMpID0+IHtcblxuICAgICAgICAgICAgLy8jcmVnaW9uIC0tLS0gICBIZWxwZXIgRnVuY3Rpb25zICAgLS0tLVxuXG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0Q2F0ZWdvcnlUb1RyZWVJdGVtID0gKGNhdGVnb3J5OiBBWE1NZXRhRGF0YURlZmluaXRpb25DYXRlZ29yeVdpdGhJdGVtc0VudGl0eU1vZGVsPHN0cmluZz4pOiBBWFBNZXRhVHJlZUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5Q2hpbGRyZW46IEFYUE1ldGFUcmVlSXRlbVtdID0gW1xuICAgICAgICAgICAgICAgICAgICAvLyBNYXAgc3ViLWNhdGVnb3JpZXMgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICAgICAgLi4uY2F0ZWdvcnkuY2F0ZWdvcmllcy5tYXAoKGM6IEFYTU1ldGFEYXRhRGVmaW5pdGlvbkNhdGVnb3J5V2l0aEl0ZW1zRW50aXR5TW9kZWw8c3RyaW5nPikgPT4gY29udmVydENhdGVnb3J5VG9UcmVlSXRlbShjKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcCBpdGVtcyBvZiBjdXJyZW50IGNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgIC4uLmNhdGVnb3J5Lml0ZW1zLm1hcCgoaXRlbTogQVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjYXRlZ29yeS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGNhdGVnb3J5LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBoYXNDaGVja0JveDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBjYXRlZ29yeUNoaWxkcmVuLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjYXRlZ29yeUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkIDogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8jZW5kcmVnaW9uXG5cbiAgICAgICAgICAgIC8vIEJ1aWxkIGEgZmxhdHRlbmVkIGxpc3Qgb2YgYWxsIGNhdGVnb3JpZXMgJiBpdGVtcyB0byBzaW1wbGlmeVxuICAgICAgICAgICAgLy8gbGF6eS1sb2FkaW5nICYgc2VhcmNoIG9wZXJhdGlvbnMuXG4gICAgICAgICAgICBjb25zdCBmbGF0TGlzdDogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgYnVpbGRUcmVlID0gKGNhdGVnb3J5OiBBWE1NZXRhRGF0YURlZmluaXRpb25DYXRlZ29yeVdpdGhJdGVtc0VudGl0eU1vZGVsPHN0cmluZz4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeUl0ZW06IEFYUE1ldGFUcmVlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjYXRlZ29yeS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGNhdGVnb3J5LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBoYXNDaGVja0JveDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiAoY2F0ZWdvcnkuY2F0ZWdvcmllcz8ubGVuZ3RoID8/IDApICsgKGNhdGVnb3J5Lml0ZW1zPy5sZW5ndGggPz8gMCkgPiAwLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkIDogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZmxhdExpc3QucHVzaChjYXRlZ29yeUl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpbnRvIHN1Yi1jYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcmllcy5mb3JFYWNoKChzdWIpID0+IGJ1aWxkVHJlZShzdWIpKTtcblxuICAgICAgICAgICAgICAgIC8vIFB1c2ggaXRlbXMgb2YgY3VycmVudCBjYXRlZ29yeVxuICAgICAgICAgICAgICAgIGNhdGVnb3J5Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmxhdExpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjKSA9PiBidWlsZFRyZWUoYykpO1xuXG4gICAgICAgICAgICAvLyBQZXJzaXN0IG9yaWdpbmFsIGRhdGEgJiBpbml0aWFsaXNlIHJlYWN0aXZlIHNpZ25hbC5cbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxUcmVlRGF0YSA9IGZsYXRMaXN0O1xuICAgICAgICAgICAgdGhpcy50cmVlVmlld0RhdGEuc2V0KFsuLi5mbGF0TGlzdF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgcHJvdmlkZUxhenlUcmVlVmlldyA9IChzZWxlY3RlZEl0ZW1JZD86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8QVhQTWV0YVRyZWVJdGVtW10+ID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhKCkuZmlsdGVyKCh4KSA9PiB4LnBhcmVudElkID09PSBzZWxlY3RlZEl0ZW1JZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhKCkuZmlsdGVyKCh4KSA9PiAheC5wYXJlbnRJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZU5vZGVDbGljayhlOiBBWFRyZWVJdGVtQ2xpY2tCYXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBlLmRhdGEgYXMgQVhQTWV0YVRyZWVJdGVtO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKHRoaXMuc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVDcmVhdGVOZXdDbGljaygpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgnY3JlYXRlLW5ldycpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVDbG9zZUNsaWNrKCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZVNlYXJjaFZhbHVlKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGVybSA9IChlLnZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybS5zZXQodGVybSk7XG5cbiAgICAgICAgLy8gV2hlbiBzZWFyY2ggaXMgY2xlYXJlZCwgc2ltcGx5IHJlc3RvcmUgdGhlIGluaXRpYWwgZGF0YXNldFxuICAgICAgICBpZiAoIXRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVZpZXdEYXRhLnNldChbLi4udGhpcy5vcmlnaW5hbFRyZWVEYXRhXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlcmVkVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAvLyBCdWlsZCBhIHF1aWNrIGxvb2t1cCBtYXAgdG8gdHJhdmVyc2UgYW5jZXN0b3JzIGVmZmljaWVudGx5XG4gICAgICAgIGNvbnN0IG1hcEJ5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQTWV0YVRyZWVJdGVtPihcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxUcmVlRGF0YS5tYXAoKGl0ZW0pID0+IFtpdGVtLmlkLCBpdGVtXSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBIZWxwZXIgdG8gY29sbGVjdCBhbGwgYW5jZXN0b3JzIG9mIGEgZ2l2ZW4gbm9kZVxuICAgICAgICBjb25zdCBjb2xsZWN0QW5jZXN0b3JzID0gKG5vZGU6IEFYUE1ldGFUcmVlSXRlbSk6IEFYUE1ldGFUcmVlSXRlbVtdID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yczogQVhQTWV0YVRyZWVJdGVtW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG1hcEJ5SWQuZ2V0KGN1cnJlbnRQYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFuY2VzdG9ycy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudElkID0gcGFyZW50LnBhcmVudElkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9ycztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyAxKSBGaW5kIGFsbCBub2RlcyB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBzZWFyY2ggdGVybVxuICAgICAgICBjb25zdCBtYXRjaGVkTm9kZXMgPSB0aGlzLm9yaWdpbmFsVHJlZURhdGEuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgaXRlbS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJlZFRlcm0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gMikgQ29sbGVjdCB0aGVpciBhbmNlc3RvcnMgdG8gZW5zdXJlIHRoZSB0cmVlIGNhbiByZW5kZXIgY29ycmVjdCBwYXRoc1xuICAgICAgICBjb25zdCByZXN1bHRTZXQgPSBuZXcgTWFwPHN0cmluZywgQVhQTWV0YVRyZWVJdGVtPigpO1xuICAgICAgICBtYXRjaGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0U2V0LnNldChub2RlLmlkLCBub2RlKTtcbiAgICAgICAgICAgIGNvbGxlY3RBbmNlc3RvcnMobm9kZSkuZm9yRWFjaCgoYW5jZXN0b3IpID0+IHJlc3VsdFNldC5zZXQoYW5jZXN0b3IuaWQsIGFuY2VzdG9yKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudHJlZVZpZXdEYXRhLnNldChBcnJheS5mcm9tKHJlc3VsdFNldC52YWx1ZXMoKSkpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1wLTQgYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtNCAgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtdy1mdWxsXCI+XG4gICAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIignd2lkZ2V0Lmxvb2t1cC5zZWFyY2gnIHwgdHJhbnNsYXRlIHwgYXN5bmMpXCJcbiAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVGVybSgpXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiaGFuZGxlQ2hhbmdlU2VhcmNoVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgPjxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b25cbiAgICAgICAgPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgIDwvZGl2PlxuICAgIDxheC10cmVlLXZpZXdcbiAgICAgIGNsYXNzPVwiYXgtaC1bNTB2aF1cIlxuICAgICAgI3RyZWVSZWZcbiAgICAgIFtwYXJlbnRGaWVsZF09XCIncGFyZW50SWQnXCJcbiAgICAgIGhhc0NoaWxkRmllbGQ9XCJoYXNDaGlsZFwiXG4gICAgICBbaXRlbXNdPVwicHJvdmlkZUxhenlUcmVlVmlld1wiXG4gICAgICAob25Ob2RlQ2xpY2spPVwiaGFuZGxlTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiJ211bHRpcGxlJ1wiXG4gICAgICBbaGFzQ2hlY2tib3hGaWVsZF09XCInaXNTZWxlY3RlZCdcIlxuICAgID5cbiAgICAgIFxuICAgIDwvYXgtdHJlZS12aWV3PlxuICA8L2Rpdj5cbiAgPGF4LWZvb3Rlcj5cbiAgICA8YXgtc3VmZml4PlxuICAgICAgPGF4LWJ1dHRvbiBsb29rPVwic29saWRcIiBbdGV4dF09XCIoJ2Nsb3NlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIiAob25DbGljayk9XCJoYW5kbGVDbG9zZUNsaWNrKClcIj4gPC9heC1idXR0b24+XG4gICAgICA8YXgtYnV0dG9uXG4gICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFt0ZXh0XT1cIignc2VsZWN0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVTZWxlY3RDbGljaygpXCJcbiAgICAgID5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIDwvYXgtc3VmZml4PlxuICA8L2F4LWZvb3Rlcj4iXX0="],"names":["i2","i4","i5","i6"],"mappings":"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"}
|
@@ -1,305 +0,0 @@
|
|
1
|
-
import { AXBadgeModule } from '@acorex/components/badge';
|
2
|
-
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
3
|
-
import * as i4 from '@acorex/components/button';
|
4
|
-
import { AXButtonModule } from '@acorex/components/button';
|
5
|
-
import { AXCalendarComponent } from '@acorex/components/calendar';
|
6
|
-
import * as i6 from '@acorex/components/decorators';
|
7
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
8
|
-
import { AXDropdownPanelComponent } from '@acorex/components/dropdown';
|
9
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
10
|
-
import { AXLoadingModule } from '@acorex/components/loading';
|
11
|
-
import * as i3 from '@acorex/components/menu';
|
12
|
-
import { AXMenuModule } from '@acorex/components/menu';
|
13
|
-
import * as i7 from '@acorex/components/popover';
|
14
|
-
import { AXPopoverModule } from '@acorex/components/popover';
|
15
|
-
import { AXLocaleService } from '@acorex/core/locale';
|
16
|
-
import * as i5 from '@acorex/core/translation';
|
17
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
18
|
-
import { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
|
19
|
-
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
20
|
-
import * as i2 from '@angular/common';
|
21
|
-
import { CommonModule } from '@angular/common';
|
22
|
-
import * as i0 from '@angular/core';
|
23
|
-
import { computed, inject, viewChild, input, model, output, ViewEncapsulation, ChangeDetectionStrategy, Component, signal } from '@angular/core';
|
24
|
-
import * as i1 from '@angular/forms';
|
25
|
-
import { FormsModule } from '@angular/forms';
|
26
|
-
import { RouterModule } from '@angular/router';
|
27
|
-
import { AXPTaskBoardService } from './acorex-modules-workflow-management.mjs';
|
28
|
-
import { AXPSettingService } from '@acorex/platform/common';
|
29
|
-
import { AXPPlatformScope } from '@acorex/platform/core';
|
30
|
-
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
31
|
-
import { AXSchedulerComponent } from '@acorex/components/scheduler';
|
32
|
-
|
33
|
-
const config = {
|
34
|
-
i18n: 'workflow-management',
|
35
|
-
};
|
36
|
-
const RootConfig = {
|
37
|
-
config,
|
38
|
-
module: {
|
39
|
-
module: 'WorkflowManagement',
|
40
|
-
name: 'WorkflowManagement',
|
41
|
-
title: `t('module-name', {scope:"${config.i18n}"})`,
|
42
|
-
icon: 'fa-light fa-clipboard-list-check',
|
43
|
-
},
|
44
|
-
};
|
45
|
-
|
46
|
-
var AXMTaskBoardSettings;
|
47
|
-
(function (AXMTaskBoardSettings) {
|
48
|
-
AXMTaskBoardSettings["CalendarViewMode"] = "taskboard.calendar.viewMode";
|
49
|
-
AXMTaskBoardSettings["CurrentDate"] = "taskboard.calendar.currentDate";
|
50
|
-
AXMTaskBoardSettings["SelectedTaskTypeFilter"] = "taskboard.filter.selectedTaskType";
|
51
|
-
})(AXMTaskBoardSettings || (AXMTaskBoardSettings = {}));
|
52
|
-
|
53
|
-
const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
|
54
|
-
isLoading: true, // Start with loading true until initialized
|
55
|
-
calendarViewMode: 'month', // Default value
|
56
|
-
currentDate: new Date(), // Default to today
|
57
|
-
selectedTaskTypeName: null, // Store the name/ID of the task type for persistence
|
58
|
-
taskTypes: [],
|
59
|
-
})), withComputed((store) => ({
|
60
|
-
// Computed property to get the actual AXPWorkflowTaskProvider object
|
61
|
-
selectedTaskType: computed(() => {
|
62
|
-
const name = store.selectedTaskTypeName();
|
63
|
-
if (!name) {
|
64
|
-
return null;
|
65
|
-
}
|
66
|
-
return store.taskTypes().find((tt) => tt.name === name) || null;
|
67
|
-
}),
|
68
|
-
// Example computed (you can add more as needed):
|
69
|
-
// isMonthView: computed(() => store.calendarViewMode() === 'month'),
|
70
|
-
})), withMethods((store, settingService = inject(AXPSettingService), // Inject the main service
|
71
|
-
taskBoardService = inject(AXPTaskBoardService)) => ({
|
72
|
-
async initialize() {
|
73
|
-
patchState(store, { isLoading: true });
|
74
|
-
const userScopedSettings = settingService.scope(AXPPlatformScope.User); // Get user scope once
|
75
|
-
try {
|
76
|
-
// 1. Load Task Types first
|
77
|
-
const taskTypes = await taskBoardService.getTaskTypes();
|
78
|
-
patchState(store, { taskTypes });
|
79
|
-
// 2. Load Persisted Settings individually
|
80
|
-
const [savedViewMode, savedDateString, savedTaskTypeName] = await Promise.all([
|
81
|
-
userScopedSettings.get(AXMTaskBoardSettings.CalendarViewMode),
|
82
|
-
userScopedSettings.get(AXMTaskBoardSettings.CurrentDate),
|
83
|
-
userScopedSettings.get(AXMTaskBoardSettings.SelectedTaskTypeFilter),
|
84
|
-
]);
|
85
|
-
patchState(store, {
|
86
|
-
calendarViewMode: savedViewMode || 'month', // Fallback to default
|
87
|
-
currentDate: savedDateString ? new Date(savedDateString) : new Date(), // Parse stored date string
|
88
|
-
selectedTaskTypeName: savedTaskTypeName || null, // Load persisted task type name
|
89
|
-
isLoading: false,
|
90
|
-
});
|
91
|
-
}
|
92
|
-
catch (error) {
|
93
|
-
console.error('Error initializing TaskBoard ViewModel:', error);
|
94
|
-
// Fallback to defaults on error to ensure the app is usable
|
95
|
-
patchState(store, {
|
96
|
-
calendarViewMode: 'month',
|
97
|
-
currentDate: new Date(),
|
98
|
-
selectedTaskTypeName: null,
|
99
|
-
taskTypes: store.taskTypes(), // Retain loaded task types if any, or empty if error was before taskTypes load
|
100
|
-
isLoading: false,
|
101
|
-
});
|
102
|
-
}
|
103
|
-
},
|
104
|
-
setCalendarViewMode(mode) {
|
105
|
-
patchState(store, { calendarViewMode: mode });
|
106
|
-
settingService
|
107
|
-
.scope(AXPPlatformScope.User)
|
108
|
-
.set(AXMTaskBoardSettings.CalendarViewMode, mode)
|
109
|
-
.catch((error) => console.error('Error saving calendar view mode:', error));
|
110
|
-
},
|
111
|
-
setCurrentDate(date) {
|
112
|
-
patchState(store, { currentDate: new Date(date) }); // Ensure it's a new Date object
|
113
|
-
settingService
|
114
|
-
.scope(AXPPlatformScope.User)
|
115
|
-
.set(AXMTaskBoardSettings.CurrentDate, date.toISOString()) // Store as ISO string
|
116
|
-
.catch((error) => console.error('Error saving current date:', error));
|
117
|
-
},
|
118
|
-
setSelectedTaskTypeProvider(taskType) {
|
119
|
-
const taskTypeName = taskType ? taskType.name : null;
|
120
|
-
patchState(store, { selectedTaskTypeName: taskTypeName });
|
121
|
-
settingService
|
122
|
-
.scope(AXPPlatformScope.User)
|
123
|
-
.set(AXMTaskBoardSettings.SelectedTaskTypeFilter, taskTypeName)
|
124
|
-
.catch((error) => console.error('Error saving selected task type filter:', error));
|
125
|
-
},
|
126
|
-
})));
|
127
|
-
|
128
|
-
/**
|
129
|
-
* Component for displaying and interacting with an organizational chart.
|
130
|
-
*/
|
131
|
-
class AXMTaskBoardCalendarViewComponent {
|
132
|
-
constructor() {
|
133
|
-
this.taskBoardService = inject(AXPTaskBoardService);
|
134
|
-
this.schedulerComponent = viewChild(AXSchedulerComponent);
|
135
|
-
this.startingDate = input(new Date());
|
136
|
-
this.selectedView = model('day');
|
137
|
-
this.dataSource = input.required();
|
138
|
-
this.onTaskChanged = output();
|
139
|
-
this.onMonthSlotDblClicked = output();
|
140
|
-
this.component = output();
|
141
|
-
this.onTaskRightClick = output();
|
142
|
-
}
|
143
|
-
ngAfterViewInit() {
|
144
|
-
if (this.schedulerComponent()) {
|
145
|
-
this.component.emit(this.schedulerComponent());
|
146
|
-
}
|
147
|
-
}
|
148
|
-
onTaskDrop(event) {
|
149
|
-
this.taskBoardService
|
150
|
-
.updateTask(event.appointment, {
|
151
|
-
from: event.slot.startDate.date,
|
152
|
-
end: event.slot.endDate.date,
|
153
|
-
})
|
154
|
-
.then((task) => {
|
155
|
-
this.onTaskChanged.emit(task);
|
156
|
-
this.schedulerComponent()?.refresh([task]);
|
157
|
-
});
|
158
|
-
}
|
159
|
-
onTaskRightClickHandler(event) {
|
160
|
-
this.onTaskRightClick.emit(event);
|
161
|
-
}
|
162
|
-
onSlotDblClicked(event) {
|
163
|
-
if (event.sender.selectedView() === 'month') {
|
164
|
-
this.onMonthSlotDblClicked.emit(event.slot.startDate.date);
|
165
|
-
}
|
166
|
-
}
|
167
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
168
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.4", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: "axm-task-board-calendar-view", inputs: { startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectedView: "selectedViewChange", onTaskChanged: "onTaskChanged", onMonthSlotDblClicked: "onMonthSlotDblClicked", component: "component", onTaskRightClick: "onTaskRightClick" }, viewQueries: [{ propertyName: "schedulerComponent", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"selectedView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"], dependencies: [{ kind: "component", type: AXSchedulerComponent, selector: "ax-scheduler", inputs: ["calendar", "startingDate", "endDayHour", "startDayHour", "hasHeader", "readonly", "draggable", "allowFullScreen", "multiDayViewDaysCount", "dataSource", "firstDayOfWeek", "views", "selectedView"], outputs: ["selectedViewChange", "onDataLoaded", "onRangeChanged", "onSlotClicked", "onSlotDblClicked", "onSlotRightClick", "onAppointmentDrop", "onAppointmentClicked", "onAppointmentDblClicked", "onAppointmentRightClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
169
|
-
}
|
170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, decorators: [{
|
171
|
-
type: Component,
|
172
|
-
args: [{ selector: 'axm-task-board-calendar-view', imports: [AXSchedulerComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"selectedView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"] }]
|
173
|
-
}] });
|
174
|
-
|
175
|
-
/**
|
176
|
-
* Component for displaying and interacting with an organizational chart.
|
177
|
-
*/
|
178
|
-
class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
179
|
-
constructor() {
|
180
|
-
super(...arguments);
|
181
|
-
this.rootConfig = RootConfig;
|
182
|
-
this.localeService = inject(AXLocaleService);
|
183
|
-
this.taskBoardService = inject(AXPTaskBoardService);
|
184
|
-
this.vm = inject(AXMTaskBoardViewModel);
|
185
|
-
this.currentTask = signal(null);
|
186
|
-
this.schedulerComponent = signal(null);
|
187
|
-
this.viewsItems = signal([
|
188
|
-
{ key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },
|
189
|
-
{ key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },
|
190
|
-
{ key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },
|
191
|
-
{ key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },
|
192
|
-
]);
|
193
|
-
this.calendarType = computed(() => this.localeService.activeProfile().calendar.system);
|
194
|
-
this.contextMenu = viewChild('rootContextMenu');
|
195
|
-
this.selectedViewMode = computed(() => this.viewsItems().find((item) => item.key === this.vm.calendarViewMode()) || this.viewsItems()[0]);
|
196
|
-
this.dataSource = (filter) => {
|
197
|
-
const taskTypeProvider = this.vm.selectedTaskType();
|
198
|
-
const types = taskTypeProvider ? [taskTypeProvider.name] : undefined;
|
199
|
-
return this.taskBoardService.getTasks({ ...filter, types });
|
200
|
-
};
|
201
|
-
}
|
202
|
-
async ngOnInit() {
|
203
|
-
await super.ngOnInit();
|
204
|
-
await this.vm.initialize();
|
205
|
-
}
|
206
|
-
async getPageTitle() {
|
207
|
-
return await this.translateService.translateAsync('task-board.page-title', { scope: this.rootConfig.config.i18n });
|
208
|
-
}
|
209
|
-
async getPageBreadcrumbs() {
|
210
|
-
return [
|
211
|
-
{
|
212
|
-
title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n }),
|
213
|
-
},
|
214
|
-
];
|
215
|
-
}
|
216
|
-
schedulerComponentChanged(component) {
|
217
|
-
this.schedulerComponent.set(component);
|
218
|
-
}
|
219
|
-
handleContextMenuOnOpening(event) {
|
220
|
-
for (const item of this.currentTask()?.data?.actions || []) {
|
221
|
-
event.items.push({
|
222
|
-
text: item.title,
|
223
|
-
icon: item.icon,
|
224
|
-
data: {
|
225
|
-
command: item.command,
|
226
|
-
},
|
227
|
-
});
|
228
|
-
}
|
229
|
-
}
|
230
|
-
handleTaskRightClick(event) {
|
231
|
-
this.currentTask.set(event.appointment);
|
232
|
-
const x = event.nativeEvent.clientX;
|
233
|
-
const y = event.nativeEvent.clientY;
|
234
|
-
const element = event.sender.nativeElement;
|
235
|
-
this.contextMenu()?.showAt({ x, y }, element);
|
236
|
-
}
|
237
|
-
handleMonthSlotDblClicked(date) {
|
238
|
-
this.vm.setCurrentDate(date);
|
239
|
-
this.vm.setCalendarViewMode('day');
|
240
|
-
}
|
241
|
-
handleCalendarViewChange(view) {
|
242
|
-
this.vm.setCalendarViewMode(view);
|
243
|
-
}
|
244
|
-
handleSelectedTaskTypeChange(taskType) {
|
245
|
-
this.vm.setSelectedTaskTypeProvider(taskType);
|
246
|
-
this.schedulerComponent()?.refresh();
|
247
|
-
}
|
248
|
-
handleSchedulerDateChanged(event) {
|
249
|
-
if (this.vm.isLoading()) {
|
250
|
-
return;
|
251
|
-
}
|
252
|
-
const newDate = event.value;
|
253
|
-
const currentDateInVm = this.vm.currentDate();
|
254
|
-
const dateToSet = newDate || new Date();
|
255
|
-
if (!currentDateInVm || currentDateInVm.getTime() !== dateToSet.getTime()) {
|
256
|
-
this.vm.setCurrentDate(dateToSet);
|
257
|
-
}
|
258
|
-
}
|
259
|
-
handleContextMenuItemClick(event) {
|
260
|
-
this.taskBoardService.executeCommand(event.item.data?.command, this.currentTask()?.data?.provider ?? '');
|
261
|
-
}
|
262
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
263
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: AXMTaskBoardPage, isStandalone: true, selector: "ng-component", providers: [
|
264
|
-
{
|
265
|
-
provide: AXPPageLayoutBase,
|
266
|
-
useExisting: AXMTaskBoardPage,
|
267
|
-
},
|
268
|
-
], viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.prevClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"schedulerComponent()?.currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.nextClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [ngModel]=\"vm.currentDate()\"\n [depth]=\"schedulerComponent()?.calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"(t('dateTime.duration.' + item.text, { scope: 'common' }) | async)!\"\n [selected]=\"vm.calendarViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-hidden\">\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.calendarViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-task-board-calendar-view{height:100%}html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
269
|
-
//
|
270
|
-
AXMenuModule }, { kind: "component", type: i3.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i4.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i4.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type:
|
271
|
-
//
|
272
|
-
AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXMTaskBoardCalendarViewComponent, selector: "axm-task-board-calendar-view", inputs: ["startingDate", "selectedView", "dataSource"], outputs: ["selectedViewChange", "onTaskChanged", "onMonthSlotDblClicked", "component", "onTaskRightClick"] }, { kind: "component", type: AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i7.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "cellTemplate", "cellClass", "showNavigation", "count", "id"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
273
|
-
}
|
274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: AXMTaskBoardPage, decorators: [{
|
275
|
-
type: Component,
|
276
|
-
args: [{ imports: [
|
277
|
-
FormsModule,
|
278
|
-
CommonModule,
|
279
|
-
RouterModule,
|
280
|
-
//
|
281
|
-
AXMenuModule,
|
282
|
-
AXButtonModule,
|
283
|
-
AXDropdownButtonModule,
|
284
|
-
AXTranslationModule,
|
285
|
-
AXDecoratorModule,
|
286
|
-
AXLoadingModule,
|
287
|
-
AXBreadcrumbsModule,
|
288
|
-
AXBadgeModule,
|
289
|
-
//
|
290
|
-
AXPThemeLayoutBlockComponent,
|
291
|
-
AXPPageLayoutComponent,
|
292
|
-
AXMTaskBoardCalendarViewComponent,
|
293
|
-
AXDropdownPanelComponent,
|
294
|
-
AXPopoverModule,
|
295
|
-
AXCalendarComponent,
|
296
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
297
|
-
{
|
298
|
-
provide: AXPPageLayoutBase,
|
299
|
-
useExisting: AXMTaskBoardPage,
|
300
|
-
},
|
301
|
-
], template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.prevClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"schedulerComponent()?.currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"schedulerComponent()?.nextClick()\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [ngModel]=\"vm.currentDate()\"\n [depth]=\"schedulerComponent()?.calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"(t('dateTime.duration.' + item.text, { scope: 'common' }) | async)!\"\n [selected]=\"vm.calendarViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-overflow-hidden\">\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.calendarViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-task-board-calendar-view{height:100%}html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}\n"] }]
|
302
|
-
}] });
|
303
|
-
|
304
|
-
export { AXMTaskBoardPage };
|
305
|
-
//# sourceMappingURL=acorex-modules-workflow-management-task-board.page-BzLr0QnF.mjs.map
|