@talxis/base-controls 1.2605.1 → 1.2606.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DatasetControl/EditColumns/OptionText/OptionText.js +1 -2
- package/dist/components/DatasetControl/EditColumns/OptionText/OptionText.js.map +1 -1
- package/dist/components/Grid/cells/cell/Cell.js +2 -6
- package/dist/components/Grid/cells/cell/Cell.js.map +1 -1
- package/dist/components/Grid/column-headers/column-header/ColumnHeader.js +1 -1
- package/dist/components/Grid/column-headers/column-header/ColumnHeader.js.map +1 -1
- package/dist/components/Grid/grid/ag-grid/AgGridModel.js +1 -1
- package/dist/components/Grid/grid/ag-grid/AgGridModel.js.map +1 -1
- package/dist/components/Lookup/Lookup.js +4 -1
- package/dist/components/Lookup/Lookup.js.map +1 -1
- package/dist/components/Lookup/components/TargetSelector.js +1 -1
- package/dist/components/Lookup/components/TargetSelector.js.map +1 -1
- package/dist/components/Lookup/hooks/useLookup.d.ts +8 -0
- package/dist/components/Lookup/translations.d.ts +8 -0
- package/dist/components/Lookup/translations.js +8 -0
- package/dist/components/Lookup/translations.js.map +1 -1
- package/dist/components/TaskGrid/TaskGrid.js +5 -6
- package/dist/components/TaskGrid/TaskGrid.js.map +1 -1
- package/dist/components/TaskGrid/TaskGridDatasetControl.d.ts +18 -5
- package/dist/components/TaskGrid/TaskGridDatasetControl.js +63 -30
- package/dist/components/TaskGrid/TaskGridDatasetControl.js.map +1 -1
- package/dist/components/TaskGrid/TaskGridDatasetControlFactory.d.ts +3 -2
- package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js +10 -5
- package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/cell-renderers/add-task-button/AddTaskButton.js +3 -8
- package/dist/components/TaskGrid/components/grid/cell-renderers/add-task-button/AddTaskButton.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.d.ts +7 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js +102 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js +4 -5
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/index.js +1 -1
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.d.ts +0 -6
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.js +0 -6
- package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.d.ts +2 -7
- package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js +47 -16
- package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/grid-drag-handler/GridDragHandler.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/group-cell/styles.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/group-cell/styles.js +3 -0
- package/dist/components/TaskGrid/components/grid/group-cell/styles.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.d.ts +13 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js +84 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.d.ts +5 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.js +12 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.d.ts +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js +13 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.js +17 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.js +17 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/index.js +2 -0
- package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → components/grid/lookup-many/colorful-lookup-many/components/option}/index.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.d.ts +14 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.js +21 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.d.ts +4 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.js +9 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/index.js +2 -0
- package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → components/grid/lookup-many/colorful-lookup-many}/index.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/lookup-many/components/components.d.ts +11 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/components.js +17 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/components.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.js +10 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.d.ts +7 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js +16 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.d.ts +18 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.js +24 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.js +21 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.d.ts +15 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.js +22 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.js +18 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.d.ts +22 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.js +28 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/context.d.ts +4 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/context.js +9 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/context.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/index.d.ts +4 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/index.js +5 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.d.ts +5 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js +12 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.d.ts +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.js +15 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.js +12 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.d.ts +9 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.js +18 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js +17 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.d.ts +5 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.js +6 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.js +16 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.d.ts +10 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.js +11 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.d.ts +4 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.js +9 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.js +2 -0
- package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.d.ts +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.js +27 -14
- package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.js.map +1 -1
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.js +13 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.d.ts +18 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.js +24 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js +20 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.d.ts +12 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.js +19 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.js +16 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.d.ts +22 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.js +28 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/option/Option.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/components/option/styles.d.ts +16 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.d.ts +3 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.js +15 -0
- package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.js.map +1 -0
- package/dist/components/TaskGrid/components/header/Header.d.ts +1 -1
- package/dist/components/TaskGrid/components/header/Header.js +62 -47
- package/dist/components/TaskGrid/components/header/Header.js.map +1 -1
- package/dist/components/TaskGrid/components/header/edit-columns/EditColumns.js.map +1 -1
- package/dist/components/TaskGrid/components/header/view-switcher/create-view-dialog/CreateViewDialog.js.map +1 -1
- package/dist/components/TaskGrid/components/header/view-switcher/view-manager/ViewManager.js.map +1 -1
- package/dist/components/TaskGrid/context.d.ts +5 -4
- package/dist/components/TaskGrid/context.js.map +1 -1
- package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.d.ts +75 -0
- package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.js → extensions/dataverse/DataverseCustomColumnsStrategy.js} +56 -21
- package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.d.ts +20 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js +41 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.d.ts +49 -0
- package/dist/components/TaskGrid/{data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.js → extensions/dataverse/DataverseSavedQueryStrategy.js} +41 -19
- package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.d.ts +102 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js +184 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.d.ts +124 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js +498 -0
- package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/index.d.ts +5 -0
- package/dist/components/TaskGrid/extensions/dataverse/index.js +6 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.d.ts +65 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js +208 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.d.ts +11 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.js +16 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.js.map +1 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.d.ts +2 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js +35 -0
- package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js.map +1 -0
- package/dist/components/TaskGrid/interfaces.d.ts +58 -26
- package/dist/components/TaskGrid/labels.d.ts +1 -15
- package/dist/components/TaskGrid/labels.js +2 -16
- package/dist/components/TaskGrid/labels.js.map +1 -1
- package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → providers/custom-columns}/CustomColumnsDataProvider.d.ts +11 -1
- package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → providers/custom-columns}/CustomColumnsDataProvider.js +3 -0
- package/dist/components/TaskGrid/providers/custom-columns/CustomColumnsDataProvider.js.map +1 -0
- package/dist/components/TaskGrid/providers/custom-columns/index.d.ts +1 -0
- package/dist/components/TaskGrid/providers/custom-columns/index.js +2 -0
- package/dist/components/TaskGrid/providers/custom-columns/index.js.map +1 -0
- package/dist/components/TaskGrid/providers/index.d.ts +3 -0
- package/dist/components/TaskGrid/providers/index.js +4 -0
- package/dist/components/TaskGrid/providers/index.js.map +1 -0
- package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → providers/saved-query}/SavedQueryDataProvider.d.ts +14 -9
- package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → providers/saved-query}/SavedQueryDataProvider.js +89 -69
- package/dist/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.js.map +1 -0
- package/dist/components/TaskGrid/providers/saved-query/index.d.ts +1 -0
- package/dist/components/TaskGrid/providers/saved-query/index.js +2 -0
- package/dist/components/TaskGrid/providers/saved-query/index.js.map +1 -0
- package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/TaskDataProvider.d.ts +25 -39
- package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/TaskDataProvider.js +51 -34
- package/dist/components/TaskGrid/providers/task/TaskDataProvider.js.map +1 -0
- package/dist/components/TaskGrid/providers/task/index.js.map +1 -0
- package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/RecordTree.d.ts +8 -0
- package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/RecordTree.js +2 -0
- package/dist/components/TaskGrid/providers/task/record-tree/RecordTree.js.map +1 -0
- package/dist/components/TaskGrid/providers/task/record-tree/index.js.map +1 -0
- package/dist/components/TaskGrid/providers/task/record-tree/patchDataBuilderPrepare.js.map +1 -0
- package/dist/index.d.ts +234 -196
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/localization/LocalizationService.d.ts +15 -0
- package/dist/utils/localization/LocalizationService.js +17 -0
- package/dist/utils/localization/LocalizationService.js.map +1 -0
- package/dist/utils/localization/index.d.ts +1 -0
- package/dist/utils/localization/index.js +2 -0
- package/dist/utils/localization/index.js.map +1 -0
- package/package.json +5 -4
- package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/CustomColumnsDataProvider.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.d.ts +0 -33
- package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/index.d.ts +0 -2
- package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/index.js +0 -3
- package/dist/components/TaskGrid/data-providers/index.d.ts +0 -3
- package/dist/components/TaskGrid/data-providers/index.js +0 -6
- package/dist/components/TaskGrid/data-providers/saved-query-data-provider/SavedQueryDataProvider.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.d.ts +0 -21
- package/dist/components/TaskGrid/data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/saved-query-data-provider/index.d.ts +0 -2
- package/dist/components/TaskGrid/data-providers/saved-query-data-provider/index.js +0 -3
- package/dist/components/TaskGrid/data-providers/task-data-provider/TaskDataProvider.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/task-data-provider/record-tree/RecordTree.js.map +0 -1
- package/dist/components/TaskGrid/data-providers/task-data-provider/record-tree/patchDataBuilderPrepare.js.map +0 -1
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → components/grid/cell-renderers/lookup-many}/index.js.map +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider/record-tree → components/grid/lookup-many/colorful-lookup-many/components/multi-value-container}/index.js.map +0 -0
- /package/dist/components/TaskGrid/{data-providers → extensions/dataverse}/index.js.map +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/index.d.ts +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/index.js +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/index.d.ts +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/index.js +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/patchDataBuilderPrepare.d.ts +0 -0
- /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/patchDataBuilderPrepare.js +0 -0
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
import { FetchXmlDataProvider, Operators, DataTypes, Sanitizer, DatasetConstants } from '@talxis/client-libraries';
|
|
2
|
+
import { LexoRank } from 'lexorank';
|
|
3
|
+
import { Liquid } from 'liquidjs';
|
|
4
|
+
import { LookupManyHandler } from './lookup-many/LookupManyHandler.js';
|
|
5
|
+
|
|
6
|
+
const LIQUID = new Liquid();
|
|
7
|
+
/**
|
|
8
|
+
* Ready-to-use {@link ITaskDataProviderStrategy} implementation for the Dataverse / Talxis platform.
|
|
9
|
+
*
|
|
10
|
+
* Handles all task CRUD operations, drag-and-drop reordering (via LexoRank), template-based creation,
|
|
11
|
+
* and lookup-many column rendering — all backed by the Xrm WebApi and FetchXML.
|
|
12
|
+
*
|
|
13
|
+
* Normally instantiated automatically by {@link DataverseTaskGridDescriptor}. Construct directly only
|
|
14
|
+
* when you need to pass a custom `formStrategy` or override specific behaviour.
|
|
15
|
+
*/
|
|
16
|
+
class DataverseTaskStrategy {
|
|
17
|
+
/** @param params — see {@link IDataverseTaskStrategyParams} for full documentation of each option. */
|
|
18
|
+
constructor(params, deps) {
|
|
19
|
+
this._lookupManyColumns = [];
|
|
20
|
+
this._customColumns = [];
|
|
21
|
+
this._lookupManyHandlers = {};
|
|
22
|
+
this._fetchXml = params.fetchXml;
|
|
23
|
+
this._customColumnsDataProvider = deps.customColumnsDataProvider;
|
|
24
|
+
this._projectRecord = params.projectRecord;
|
|
25
|
+
this._projectReference = this._projectRecord?.getNamedReference();
|
|
26
|
+
this._editFormId = params.editFormId;
|
|
27
|
+
this._rootTaskId = params.rootTaskId;
|
|
28
|
+
this._createFormId = params.createFormId;
|
|
29
|
+
this._bulkEditFormId = params.bulkEditFormId;
|
|
30
|
+
this._isInlineCreateEnabled = deps.enableInlineCreation;
|
|
31
|
+
this._isEditingEnabled = deps.enableTaskEditing;
|
|
32
|
+
this._isDeletingTasksWithChildrenEnabled = params.isDeletingTasksWithChildrenEnabled ?? false;
|
|
33
|
+
this._isCascadeDeleteEnabled = params.isCascadeDeleteEnabled ?? false;
|
|
34
|
+
this._getFormParameters = params.form?.onGetFormParameters ?? ((operation, defaultParameters) => defaultParameters);
|
|
35
|
+
this._sourceRecord = params.sourceRecord;
|
|
36
|
+
}
|
|
37
|
+
async onGetRawRecords(ids, select) {
|
|
38
|
+
let records = [];
|
|
39
|
+
const expands = await Promise.all(this._lookupManyColumns.map(async (col) => {
|
|
40
|
+
const referencedEntityNavigationPropertyName = col.metadata.LookupMany.ReferencedEntityNavigationPropertyName;
|
|
41
|
+
const customIntersection = col.metadata.LookupMany.CustomIntersection;
|
|
42
|
+
const handler = this._lookupManyHandlers[col.name] ?? new LookupManyHandler({
|
|
43
|
+
entityName: this._entityName,
|
|
44
|
+
navigationPropertyName: referencedEntityNavigationPropertyName,
|
|
45
|
+
customIntersection: customIntersection ? {
|
|
46
|
+
referencingEntityNavigationPropertyName: customIntersection.ReferencingEntityNavigationPropertyName
|
|
47
|
+
} : undefined
|
|
48
|
+
});
|
|
49
|
+
this._lookupManyHandlers[col.name] = handler;
|
|
50
|
+
await handler.init();
|
|
51
|
+
return handler.getExpand(col.metadata.LookupMany.Select);
|
|
52
|
+
}));
|
|
53
|
+
if (this._customColumns.length > 0) {
|
|
54
|
+
const strategy = this._customColumnsDataProvider.getStrategy();
|
|
55
|
+
expands.push(strategy.getExpand());
|
|
56
|
+
}
|
|
57
|
+
const suffixParts = [];
|
|
58
|
+
if (select)
|
|
59
|
+
suffixParts.push(`$select=${select}`);
|
|
60
|
+
if (expands.length > 0)
|
|
61
|
+
suffixParts.push(`$expand=${expands.join(',')}`);
|
|
62
|
+
const querySuffix = suffixParts.length > 0 ? `&${suffixParts.join('&')}` : '';
|
|
63
|
+
records = await this._getRawRecordsByIds({ ids, querySuffix });
|
|
64
|
+
if (this._lookupManyColumns.length > 0 || this._customColumns.length > 0) {
|
|
65
|
+
for (const record of records) {
|
|
66
|
+
await this._harmonizeLookupManyData(record);
|
|
67
|
+
await this._harmonizenizeCustomColumnsData(record);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return records;
|
|
71
|
+
}
|
|
72
|
+
getProjectRecord() {
|
|
73
|
+
return this._projectRecord ?? null;
|
|
74
|
+
}
|
|
75
|
+
getSourceRecord() {
|
|
76
|
+
return this._sourceRecord ?? null;
|
|
77
|
+
}
|
|
78
|
+
async _harmonizenizeCustomColumnsData(record) {
|
|
79
|
+
for (const col of this._customColumns) {
|
|
80
|
+
const strategy = this._customColumnsDataProvider.getStrategy();
|
|
81
|
+
const value = strategy.getValueFromRawRecord(record[this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute], record, col);
|
|
82
|
+
record[col.name] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async _harmonizeLookupManyData(record) {
|
|
86
|
+
const nextLinkSuffix = '@odata.nextLink';
|
|
87
|
+
for (const lookupManyCol of this._lookupManyColumns) {
|
|
88
|
+
const referencedEntityNavigationPropertyName = lookupManyCol.metadata.LookupMany.ReferencedEntityNavigationPropertyName;
|
|
89
|
+
record[lookupManyCol.name] = await this._convertLookupManyToEntityReference(record[referencedEntityNavigationPropertyName], lookupManyCol);
|
|
90
|
+
delete record[referencedEntityNavigationPropertyName];
|
|
91
|
+
delete record[`${referencedEntityNavigationPropertyName}${nextLinkSuffix}`];
|
|
92
|
+
}
|
|
93
|
+
return record;
|
|
94
|
+
}
|
|
95
|
+
async _convertLookupManyToEntityReference(data, col) {
|
|
96
|
+
const relatedEntityMetadata = await window.Xrm.Utility.getEntityMetadata(col.metadata?.Targets[0]);
|
|
97
|
+
const primaryIdAttribute = relatedEntityMetadata.PrimaryIdAttribute;
|
|
98
|
+
const primaryNameAttribute = relatedEntityMetadata.PrimaryNameAttribute;
|
|
99
|
+
const referencingEntityNavigationPropertyName = col.metadata?.LookupMany?.CustomIntersection?.ReferencingEntityNavigationPropertyName;
|
|
100
|
+
const lookupManyHandler = this._getLookupManyHandlerForColumn(col.name);
|
|
101
|
+
return data.map(record => {
|
|
102
|
+
let data = record;
|
|
103
|
+
if (referencingEntityNavigationPropertyName) {
|
|
104
|
+
data = record[referencingEntityNavigationPropertyName];
|
|
105
|
+
}
|
|
106
|
+
const result = {
|
|
107
|
+
id: {
|
|
108
|
+
guid: data[primaryIdAttribute]
|
|
109
|
+
},
|
|
110
|
+
name: data[primaryNameAttribute],
|
|
111
|
+
etn: relatedEntityMetadata.LogicalName,
|
|
112
|
+
rawData: data
|
|
113
|
+
};
|
|
114
|
+
if (lookupManyHandler.isCustomIntersection()) {
|
|
115
|
+
if (result.rawData) {
|
|
116
|
+
result.rawData.__intersectionId = record[lookupManyHandler.getCustomIntersectionEntityMetadata().PrimaryIdAttribute];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async _getRawRecordsByIds(params) {
|
|
123
|
+
const maxIdsPerRequest = 800;
|
|
124
|
+
const batches = [];
|
|
125
|
+
const { ids, querySuffix = '' } = params;
|
|
126
|
+
let currentBatch = [];
|
|
127
|
+
for (const [i, taskId] of Object.entries(ids)) {
|
|
128
|
+
if (currentBatch.length < maxIdsPerRequest) {
|
|
129
|
+
currentBatch.push(taskId);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
batches.push(currentBatch);
|
|
133
|
+
currentBatch = [taskId];
|
|
134
|
+
}
|
|
135
|
+
if (+i + 1 === ids.length) {
|
|
136
|
+
batches.push(currentBatch);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const batchedTasks = await Promise.all(batches.map(async (batchIds) => {
|
|
140
|
+
const query = `?$filter=Microsoft.Dynamics.CRM.In(PropertyName='${this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute}', PropertyValues=[${batchIds.map((id) => `'${id}'`).join(',')}])${querySuffix}`;
|
|
141
|
+
const { entities } = await window.Xrm.WebApi.retrieveMultipleRecords(this._entityName, query);
|
|
142
|
+
return entities;
|
|
143
|
+
}));
|
|
144
|
+
return batchedTasks.flat();
|
|
145
|
+
}
|
|
146
|
+
async onInitialize(provider) {
|
|
147
|
+
this._provider = provider;
|
|
148
|
+
this._taskTree = provider.getRecordTree();
|
|
149
|
+
this._fetchXml = this._getFetchXml();
|
|
150
|
+
const virtualColumns = structuredClone(provider.getColumns().filter(col => col.isVirtual));
|
|
151
|
+
this._fetchXmlDataProvider = new FetchXmlDataProvider({ fetchXml: this._fetchXml, loadAllRecords: true });
|
|
152
|
+
this._fetchXmlDataProvider.setColumns(provider.getColumns());
|
|
153
|
+
this._fetchXmlDataProvider.setLinking(provider.getLinking());
|
|
154
|
+
await this._fetchXmlDataProvider.refresh();
|
|
155
|
+
this._entityName = this._fetchXmlDataProvider.getEntityName();
|
|
156
|
+
this._entitySetName = this._fetchXmlDataProvider.getMetadata().EntitySetName;
|
|
157
|
+
const columns = this._fetchXmlDataProvider.getColumns();
|
|
158
|
+
this._customColumns = this._getCustomColumns(columns);
|
|
159
|
+
this._lookupManyColumns = this._getLookupManyColumns(columns);
|
|
160
|
+
this._restoreVirtualColumnMetadata(virtualColumns, columns);
|
|
161
|
+
this._injectLookupManyFilterOperators(columns);
|
|
162
|
+
const metadata = this._fetchXmlDataProvider.getMetadata();
|
|
163
|
+
const fetchXmlProviderData = this._fetchXmlDataProvider.getRawData();
|
|
164
|
+
const primaryIdAttribute = this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute;
|
|
165
|
+
const enrichedData = await this.onGetRawRecords(this._fetchXmlDataProvider.getSortedRecordIds(), primaryIdAttribute);
|
|
166
|
+
const enrichedDataMap = new Map(enrichedData.map(record => [record[primaryIdAttribute], record]));
|
|
167
|
+
const finalRawData = fetchXmlProviderData.map((record) => {
|
|
168
|
+
const id = record[primaryIdAttribute];
|
|
169
|
+
return {
|
|
170
|
+
...enrichedDataMap.get(id),
|
|
171
|
+
...record,
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
if (this._projectReference) {
|
|
175
|
+
this._projectMetadata = await window.Xrm.Utility.getEntityMetadata(this._projectReference.etn);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
rawData: finalRawData,
|
|
179
|
+
columns,
|
|
180
|
+
metadata
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
_getLookupManyColumns(columns) {
|
|
184
|
+
return columns.filter(col => col.metadata?.LookupMany);
|
|
185
|
+
}
|
|
186
|
+
_getCustomColumns(columns) {
|
|
187
|
+
return columns.filter(col => this._customColumnsDataProvider?.isCustomColumn(col.name));
|
|
188
|
+
}
|
|
189
|
+
//fetch xml provider will override virtual column metadata by default, so we need to restore it after initialization.
|
|
190
|
+
_restoreVirtualColumnMetadata(virtualColumns, columns) {
|
|
191
|
+
columns.map((col, i) => {
|
|
192
|
+
const virtualCol = virtualColumns.find(virtualCol => virtualCol.name === col.name);
|
|
193
|
+
if (virtualCol) {
|
|
194
|
+
columns[i] = virtualCol;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
_injectLookupManyFilterOperators(columns) {
|
|
199
|
+
columns.map(col => {
|
|
200
|
+
if (col.metadata?.LookupMany) {
|
|
201
|
+
col.metadata = {
|
|
202
|
+
...col.metadata,
|
|
203
|
+
SupportedFilterConditionOperators: Operators.GetOperatorsForDataType(DataTypes.MultiSelectOptionSet).map(op => op.Value)
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
_getFieldMapping() {
|
|
209
|
+
return this._provider.getNativeColumns();
|
|
210
|
+
}
|
|
211
|
+
_getFetchXml() {
|
|
212
|
+
return LIQUID.parseAndRenderSync(this._fetchXml, {
|
|
213
|
+
project: {
|
|
214
|
+
id: this._projectReference?.id.guid,
|
|
215
|
+
...this._projectRecord?.getRawData()
|
|
216
|
+
},
|
|
217
|
+
currentRecord: {
|
|
218
|
+
id: this._sourceRecord?.getNamedReference().id.guid,
|
|
219
|
+
...this._sourceRecord?.getRawData()
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
async onGetAvailableColumns(options) {
|
|
224
|
+
return this._fetchXmlDataProvider.getAvailableColumns(options);
|
|
225
|
+
}
|
|
226
|
+
async onGetAvailableRelatedColumns() {
|
|
227
|
+
return this._fetchXmlDataProvider.getAvailableRelatedColumns();
|
|
228
|
+
}
|
|
229
|
+
async onCreateTask(parentTaskId) {
|
|
230
|
+
const data = {};
|
|
231
|
+
let pageInput = {
|
|
232
|
+
pageType: 'entityrecord',
|
|
233
|
+
entityName: this._entityName,
|
|
234
|
+
data: data,
|
|
235
|
+
formId: this._createFormId
|
|
236
|
+
};
|
|
237
|
+
//prefill project
|
|
238
|
+
if (this._projectReference) {
|
|
239
|
+
const projectIdColumnName = this._getFieldMapping().projectId;
|
|
240
|
+
data[`${projectIdColumnName}`] = this._projectReference.id.guid;
|
|
241
|
+
data[`${projectIdColumnName}name`] = this._projectReference.name;
|
|
242
|
+
data[`${projectIdColumnName}type`] = this._projectReference.etn;
|
|
243
|
+
}
|
|
244
|
+
//prefill parent task
|
|
245
|
+
if (parentTaskId) {
|
|
246
|
+
const parentIdColumnName = this._getFieldMapping().parentId;
|
|
247
|
+
data[`${parentIdColumnName}`] = parentTaskId;
|
|
248
|
+
data[`${parentIdColumnName}name`] = this._provider.getRecordsMap()[parentTaskId].getNamedReference().name;
|
|
249
|
+
data[`${parentIdColumnName}type`] = this._entityName;
|
|
250
|
+
}
|
|
251
|
+
const node = this._taskTree.getNode(parentTaskId ?? null);
|
|
252
|
+
let payload = {};
|
|
253
|
+
payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ previousTaskId: undefined, nextTaskId: node.directChildren[0]?.getRecordId(), skipSave: true });
|
|
254
|
+
if (this._projectReference) {
|
|
255
|
+
payload[`${await this._getNavigationalPropertyName(this._projectReference.etn, this._getFieldMapping().projectId)}@odata.bind`] = `/${this._projectMetadata?.EntitySetName}(${this._projectReference.id.guid})`;
|
|
256
|
+
}
|
|
257
|
+
if (parentTaskId) {
|
|
258
|
+
payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${parentTaskId})`;
|
|
259
|
+
}
|
|
260
|
+
if (this._isInlineCreateEnabled) {
|
|
261
|
+
const result = await window.Xrm.WebApi.createRecord(this._entityName, payload);
|
|
262
|
+
const rawRecord = (await this.onGetRawRecords([result.id]))[0];
|
|
263
|
+
return rawRecord;
|
|
264
|
+
}
|
|
265
|
+
const { pageInput: resolvedPageInput, navigationOptions: resolvedNavigationOptions } = this._getFormParameters('create', {
|
|
266
|
+
pageInput,
|
|
267
|
+
navigationOptions: this._getFormNavigationOptions()
|
|
268
|
+
});
|
|
269
|
+
const navigateToResult = await Xrm.Navigation.navigateTo(resolvedPageInput, resolvedNavigationOptions);
|
|
270
|
+
if (navigateToResult.savedEntityReference) {
|
|
271
|
+
const entityReference = Sanitizer.Lookup.getEntityReference(navigateToResult.savedEntityReference[0]);
|
|
272
|
+
await window.Xrm.WebApi.updateRecord(this._entityName, entityReference.id.guid, payload);
|
|
273
|
+
const rawRecord = (await this.onGetRawRecords([entityReference.id.guid]))[0];
|
|
274
|
+
return rawRecord;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async onDeleteTasks(taskIds) {
|
|
281
|
+
const allTaskIds = new Set(taskIds);
|
|
282
|
+
let success = true;
|
|
283
|
+
const notDeletableTaskIds = [];
|
|
284
|
+
if (this._isCascadeDeleteEnabled) {
|
|
285
|
+
for (const taskId of taskIds) {
|
|
286
|
+
const children = this._taskTree.getNode(taskId)?.allChildren.map(c => c.getRecordId()) ?? [];
|
|
287
|
+
children.map(id => allTaskIds.add(id));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (!this._isDeletingTasksWithChildrenEnabled) {
|
|
291
|
+
for (const taskId of allTaskIds) {
|
|
292
|
+
if (this._taskTree.hasChildren(taskId)) {
|
|
293
|
+
success = false;
|
|
294
|
+
allTaskIds.delete(taskId);
|
|
295
|
+
notDeletableTaskIds.push(taskId);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const result = await this._fetchXmlDataProvider.deleteRecords([...allTaskIds]);
|
|
300
|
+
return {
|
|
301
|
+
success: result.success && success,
|
|
302
|
+
deletedTaskIds: [...allTaskIds],
|
|
303
|
+
errors: [...result.results.filter(result => !result.success).map(result => {
|
|
304
|
+
return {
|
|
305
|
+
id: result.recordId,
|
|
306
|
+
error: result.errorMessage
|
|
307
|
+
};
|
|
308
|
+
}), ...notDeletableTaskIds.map(id => {
|
|
309
|
+
return {
|
|
310
|
+
id,
|
|
311
|
+
//TODO: localize
|
|
312
|
+
error: 'Cannot delete task with children.'
|
|
313
|
+
};
|
|
314
|
+
})]
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
onCreateTemplateFromTask(taskId) {
|
|
318
|
+
throw new Error("Method not implemented.");
|
|
319
|
+
}
|
|
320
|
+
onCreateTasksFromTemplate(templateId, parentTaskId) {
|
|
321
|
+
throw new Error("Method not implemented.");
|
|
322
|
+
}
|
|
323
|
+
async onOpenDatasetItems(entityReferences, isTaskEntity) {
|
|
324
|
+
if (!isTaskEntity) {
|
|
325
|
+
// Navigate to related entity (lookup target)
|
|
326
|
+
const { pageInput, navigationOptions } = this._getFormParameters('open', {
|
|
327
|
+
pageInput: {
|
|
328
|
+
pageType: 'entityrecord',
|
|
329
|
+
entityName: entityReferences[0].etn,
|
|
330
|
+
entityId: entityReferences[0].id.guid,
|
|
331
|
+
},
|
|
332
|
+
navigationOptions: this._getFormNavigationOptions()
|
|
333
|
+
});
|
|
334
|
+
await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
if (entityReferences.length === 1) {
|
|
338
|
+
const rawRecord = await this._editSingleTask(entityReferences[0].id.guid);
|
|
339
|
+
if (!rawRecord)
|
|
340
|
+
return null;
|
|
341
|
+
return { success: true, updatedRecords: [rawRecord] };
|
|
342
|
+
}
|
|
343
|
+
const result = await this._editMultipleTasks(entityReferences.map(ref => ref.id.guid));
|
|
344
|
+
return result;
|
|
345
|
+
}
|
|
346
|
+
async onMoveTask(movingTaskId, movingToTaskId, position) {
|
|
347
|
+
const movingToRecord = this._provider.getRecordsMap()[movingToTaskId];
|
|
348
|
+
let payload = {};
|
|
349
|
+
if (position === 'child') {
|
|
350
|
+
//change parent
|
|
351
|
+
payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${movingToTaskId})`;
|
|
352
|
+
const firstChild = this._taskTree.getNode(movingToTaskId).directChildren
|
|
353
|
+
.find(c => c.getRecordId() !== movingTaskId);
|
|
354
|
+
if (firstChild) {
|
|
355
|
+
//change stack rank to be before first child
|
|
356
|
+
payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: undefined, nextTaskId: firstChild.getRecordId(), skipSave: true });
|
|
357
|
+
}
|
|
358
|
+
await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);
|
|
359
|
+
const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];
|
|
360
|
+
return [rawRecord];
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
const movingToRecordParent = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())?.parent;
|
|
364
|
+
payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = movingToRecordParent ? `/${this._entitySetName}(${movingToRecordParent.getRecordId()})` : null;
|
|
365
|
+
const movingToRecordNode = this._taskTree.getNodeMap().get(movingToRecord.getRecordId());
|
|
366
|
+
const siblings = this._taskTree.getNodeMap().get(movingToRecordParent?.getRecordId() ?? null)?.directChildren ?? [];
|
|
367
|
+
let prevSiblingId;
|
|
368
|
+
let nextSiblingId;
|
|
369
|
+
if (position === 'above') {
|
|
370
|
+
prevSiblingId = siblings[movingToRecordNode.index - 1]?.getRecordId();
|
|
371
|
+
nextSiblingId = movingToRecord.getRecordId();
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
prevSiblingId = movingToRecord.getRecordId();
|
|
375
|
+
nextSiblingId = siblings[movingToRecordNode.index + 1]?.getRecordId();
|
|
376
|
+
}
|
|
377
|
+
payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: prevSiblingId, nextTaskId: nextSiblingId, skipSave: true });
|
|
378
|
+
await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);
|
|
379
|
+
const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];
|
|
380
|
+
return [rawRecord];
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Saves a single dirty field on a task record.
|
|
385
|
+
* Lookup-many fields are persisted through their dedicated {@link LookupManyHandler}; all other fields use the standard FetchXML provider save path.
|
|
386
|
+
* TaskGrid uses auto-save, so exactly one dirty field is expected per call.
|
|
387
|
+
*/
|
|
388
|
+
async onRecordSave(record) {
|
|
389
|
+
const dirtyField = record.getFields().find(field => field.isDirty());
|
|
390
|
+
const column = dirtyField?.getColumn();
|
|
391
|
+
if (column?.metadata?.LookupMany) {
|
|
392
|
+
const handler = this._getLookupManyHandlerForColumn(column.name);
|
|
393
|
+
return handler.saveRecord(record, column.name);
|
|
394
|
+
}
|
|
395
|
+
else if (column?.name.endsWith(DatasetConstants.CUSTOM_COLUMN_NAME_SUFFIX)) {
|
|
396
|
+
return this._customColumnsDataProvider.saveValue(record.getRecordId(), column, dirtyField?.getValue());
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
return this._fetchXmlDataProvider.onRecordSave(record);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/** Returns `true` when the task's `stateCode` attribute equals `0` (active). */
|
|
403
|
+
onIsRecordActive(recordId) {
|
|
404
|
+
const record = this._provider.getRecordsMap()[recordId];
|
|
405
|
+
return record.getValue(this._provider.getNativeColumns().stateCode) == 0;
|
|
406
|
+
}
|
|
407
|
+
/** Returns the root task ID used to scope the displayed hierarchy. */
|
|
408
|
+
onGetRootTaskId() {
|
|
409
|
+
return this._rootTaskId;
|
|
410
|
+
}
|
|
411
|
+
async _getNavigationalPropertyName(referencedEntityName, referencingAttribute) {
|
|
412
|
+
const metadata = await window.Xrm.Utility.getEntityMetadata(this._entityName);
|
|
413
|
+
const relationship = metadata.ManyToOneRelationships.getAll().find((rel) => rel.ReferencedEntity === referencedEntityName &&
|
|
414
|
+
rel.ReferencingAttribute === referencingAttribute);
|
|
415
|
+
if (!relationship) {
|
|
416
|
+
throw new Error(`Could not find many-to-one relationship targeting ${referencedEntityName} on ${metadata.LogicalName}`);
|
|
417
|
+
}
|
|
418
|
+
return relationship.ReferencingEntityNavigationPropertyName;
|
|
419
|
+
}
|
|
420
|
+
_getFormNavigationOptions() {
|
|
421
|
+
return {
|
|
422
|
+
target: 2,
|
|
423
|
+
width: { value: 80, unit: '%' },
|
|
424
|
+
position: 1,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
_getLookupManyHandlerForColumn(colName) {
|
|
428
|
+
const handler = this._lookupManyHandlers[colName];
|
|
429
|
+
if (!handler) {
|
|
430
|
+
throw new Error(`No LookupManyHandler found for column ${colName}`);
|
|
431
|
+
}
|
|
432
|
+
return handler;
|
|
433
|
+
}
|
|
434
|
+
async _editSingleTask(recordId) {
|
|
435
|
+
const { pageInput, navigationOptions } = this._getFormParameters('edit', {
|
|
436
|
+
pageInput: {
|
|
437
|
+
pageType: 'entityrecord',
|
|
438
|
+
entityName: this._entityName,
|
|
439
|
+
entityId: recordId,
|
|
440
|
+
formId: this._editFormId,
|
|
441
|
+
data: {
|
|
442
|
+
isEditingEnabled: this._isEditingEnabled
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
navigationOptions: this._getFormNavigationOptions()
|
|
446
|
+
});
|
|
447
|
+
await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
|
|
448
|
+
const result = await this.onGetRawRecords([recordId]);
|
|
449
|
+
return result[0];
|
|
450
|
+
}
|
|
451
|
+
async _editMultipleTasks(recordIds) {
|
|
452
|
+
const { pageInput, navigationOptions } = this._getFormParameters('bulkEdit', {
|
|
453
|
+
//@ts-ignore - not documented, passing of record id array is possible in Power Apps - https://butenko.pro/2021/10/14/howto-open-bulk-editing-of-records-using-xrm-navigation-navigateto/
|
|
454
|
+
pageInput: {
|
|
455
|
+
//@ts-ignore - typings
|
|
456
|
+
pageType: 'bulkedit',
|
|
457
|
+
entityName: this._entityName,
|
|
458
|
+
entityIds: recordIds,
|
|
459
|
+
formId: this._bulkEditFormId
|
|
460
|
+
},
|
|
461
|
+
navigationOptions: {
|
|
462
|
+
target: 2,
|
|
463
|
+
position: 2,
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
|
|
467
|
+
const rawRecords = await this.onGetRawRecords(recordIds);
|
|
468
|
+
return { success: true, updatedRecords: rawRecords };
|
|
469
|
+
}
|
|
470
|
+
async _updateStackRank(params) {
|
|
471
|
+
const stackRankCol = this._getFieldMapping().stackRank;
|
|
472
|
+
const rawDataMap = this._provider.getRawDataMap();
|
|
473
|
+
const prevRankStr = params.previousTaskId ? rawDataMap[params.previousTaskId]?.[stackRankCol] : undefined;
|
|
474
|
+
const nextRankStr = params.nextTaskId ? rawDataMap[params.nextTaskId]?.[stackRankCol] : undefined;
|
|
475
|
+
let newRank;
|
|
476
|
+
if (prevRankStr && nextRankStr) {
|
|
477
|
+
newRank = LexoRank.parse(prevRankStr).between(LexoRank.parse(nextRankStr)).format();
|
|
478
|
+
}
|
|
479
|
+
else if (nextRankStr) {
|
|
480
|
+
newRank = LexoRank.parse(nextRankStr).genPrev().format();
|
|
481
|
+
}
|
|
482
|
+
else if (prevRankStr) {
|
|
483
|
+
newRank = LexoRank.parse(prevRankStr).genNext().format();
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
newRank = LexoRank.middle().format();
|
|
487
|
+
}
|
|
488
|
+
if (!params.skipSave && params.recordId) {
|
|
489
|
+
await window.Xrm.WebApi.updateRecord(this._entityName, params.recordId, {
|
|
490
|
+
[stackRankCol]: newRank
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
return newRank;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
export { DataverseTaskStrategy };
|
|
498
|
+
//# sourceMappingURL=DataverseTaskStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataverseTaskStrategy.js","sources":["../../../../../src/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.ts"],"sourcesContent":["import { IRecord, IFetchXmlDataProvider, IRawRecord, FetchXmlDataProvider, FetchXmlBuilder, IAvailableColumnOptions, IAvailableRelatedColumn, IRecordSaveOperationResult, IColumn, Sanitizer, Operators, DataTypes, ISingleRecord, DatasetConstants } from \"@talxis/client-libraries\";\nimport { ITaskDataProviderStrategy, ITaskDataProvider, IDeleteTasksResult, IOpenDatasetItemsResult, ICustomColumnsDataProvider } from \"../../providers\";\nimport { IRecordTree } from \"../../providers/task/record-tree\";\nimport { LexoRank } from \"lexorank\";\nimport { Liquid } from \"liquidjs\";\nimport { IFieldMapping } from \"./DataverseTaskGridDescriptor\";\nimport { LookupManyHandler } from \"./lookup-many/LookupManyHandler\";\nimport { ITaskStrategyDeps } from \"../..\";\nimport { IDataverseCustomColumnsStrategy } from \"./DataverseCustomColumnsStrategy\";\n\n\ninterface IFormParameters {\n pageInput: Xrm.Navigation.PageInputEntityRecord;\n navigationOptions: Xrm.Navigation.NavigationOptions;\n}\n\n/** Constructor parameters for {@link DataverseTaskStrategy}. */\nexport interface IDataverseTaskStrategyParams {\n /** FetchXML used to load tasks. May contain Liquid template variables (e.g. `{{ projectId }}`). */\n fetchXml: string;\n /** When `false`, the edit form is opened in read-only mode. Defaults to `true`. */\n isEditingEnabled?: boolean;\n /** When `true`, deleting a task will also delete its child tasks. Defaults to `false`. */\n isCascadeDeleteEnabled?: boolean;\n /** When `true`, deleting tasks with children is enabled. Defaults to `false`. */\n isDeletingTasksWithChildrenEnabled?: boolean;\n /** Form ID to open when editing a single existing task. */\n editFormId?: string;\n /** Form ID to open when creating a new task via dialog (non-inline). */\n createFormId?: string;\n /** Form ID to open when bulk-editing multiple selected tasks. */\n bulkEditFormId?: string;\n /** Project record reference. When provided, new tasks are pre-linked to this project. */\n projectRecord?: ISingleRecord;\n\n sourceRecord?: ISingleRecord;\n /** When set, the task hierarchy is rooted at this task ID. */\n rootTaskId?: string;\n /**\n * Optional hook to intercept and override the `Xrm.Navigation.navigateTo` parameters for\n * any form operation (`create`, `edit`, `bulkEdit`, `open`).\n * Return the modified `pageInput` and `navigationOptions` to customize the dialog.\n */\n form?: {\n onGetFormParameters?: (operation: 'create' | 'edit' | 'bulkEdit' | 'open', defaultParameters: IFormParameters) => IFormParameters;\n }\n}\n\ninterface ILookupManyColumn extends IColumn {\n metadata: ILookupManyColumnMetadata;\n}\n\ninterface ILookupManyColumnMetadata {\n LookupMany: {\n ReferencedEntityNavigationPropertyName: string;\n Select?: string;\n CustomIntersection?: {\n ReferencingEntityNavigationPropertyName: string;\n }\n }\n}\n\n/** Extends {@link ITaskDataProviderStrategy} with a Dataverse-specific accessor for the project reference. */\nexport interface IDataverseTaskStrategy extends ITaskDataProviderStrategy {\n /** Returns the resolved project entity reference, or `null` if no project was provided at construction time. */\n getProjectRecord(): ISingleRecord | null;\n getSourceRecord(): ISingleRecord | null;\n}\n\nconst LIQUID = new Liquid();\n\n/**\n * Ready-to-use {@link ITaskDataProviderStrategy} implementation for the Dataverse / Talxis platform.\n *\n * Handles all task CRUD operations, drag-and-drop reordering (via LexoRank), template-based creation,\n * and lookup-many column rendering — all backed by the Xrm WebApi and FetchXML.\n *\n * Normally instantiated automatically by {@link DataverseTaskGridDescriptor}. Construct directly only\n * when you need to pass a custom `formStrategy` or override specific behaviour.\n */\nexport class DataverseTaskStrategy implements IDataverseTaskStrategy {\n private _fetchXml: string;\n private _entitySetName!: string;\n private _entityName!: string;\n private _projectReference?: ComponentFramework.EntityReference;\n private _projectRecord?: ISingleRecord;\n private _projectMetadata?: Xrm.Metadata.EntityMetadata;\n private _rootTaskId?: string;\n private _taskTree!: IRecordTree;\n private _provider!: ITaskDataProvider;\n private _editFormId?: string;\n private _createFormId?: string;\n private _bulkEditFormId?: string;\n private _fetchXmlDataProvider!: IFetchXmlDataProvider;\n private _isInlineCreateEnabled: boolean;\n private _isEditingEnabled: boolean;\n private _isDeletingTasksWithChildrenEnabled: boolean;\n private _isCascadeDeleteEnabled: boolean;\n private _lookupManyColumns: ILookupManyColumn[] = [];\n private _customColumns: IColumn[] = [];\n private _sourceRecord?: ISingleRecord;\n private _customColumnsDataProvider?: ICustomColumnsDataProvider;\n private _lookupManyHandlers: { [colName: string]: LookupManyHandler } = {};\n private _getFormParameters: (operation: 'create' | 'edit' | 'bulkEdit' | 'open', defaultParameters: IFormParameters) => IFormParameters;\n\n\n /** @param params — see {@link IDataverseTaskStrategyParams} for full documentation of each option. */\n constructor(params: IDataverseTaskStrategyParams, deps: ITaskStrategyDeps) {\n this._fetchXml = params.fetchXml;\n this._customColumnsDataProvider = deps.customColumnsDataProvider;\n this._projectRecord = params.projectRecord;\n this._projectReference = this._projectRecord?.getNamedReference();\n this._editFormId = params.editFormId;\n this._rootTaskId = params.rootTaskId;\n this._createFormId = params.createFormId;\n this._bulkEditFormId = params.bulkEditFormId;\n this._isInlineCreateEnabled = deps.enableInlineCreation;\n this._isEditingEnabled = deps.enableTaskEditing;\n this._isDeletingTasksWithChildrenEnabled = params.isDeletingTasksWithChildrenEnabled ?? false;\n this._isCascadeDeleteEnabled = params.isCascadeDeleteEnabled ?? false;\n this._getFormParameters = params.form?.onGetFormParameters ?? ((operation, defaultParameters) => defaultParameters);\n this._sourceRecord = params.sourceRecord;\n }\n\n public async onGetRawRecords(ids: string[], select?: string): Promise<IRawRecord[]> {\n let records: IRawRecord[] = [];\n const expands = await Promise.all(this._lookupManyColumns.map(async col => {\n const referencedEntityNavigationPropertyName = col.metadata.LookupMany.ReferencedEntityNavigationPropertyName;\n const customIntersection = col.metadata.LookupMany.CustomIntersection;\n const handler = this._lookupManyHandlers[col.name] ?? new LookupManyHandler({\n entityName: this._entityName,\n navigationPropertyName: referencedEntityNavigationPropertyName!,\n customIntersection: customIntersection ? {\n referencingEntityNavigationPropertyName: customIntersection.ReferencingEntityNavigationPropertyName\n } : undefined\n });\n this._lookupManyHandlers[col.name] = handler;\n await handler.init();\n return handler.getExpand(col.metadata.LookupMany.Select);\n }));\n\n if (this._customColumns.length > 0) {\n const strategy: IDataverseCustomColumnsStrategy = this._customColumnsDataProvider!.getStrategy();\n expands.push(strategy.getExpand());\n }\n const suffixParts: string[] = [];\n if (select) suffixParts.push(`$select=${select}`);\n if (expands.length > 0) suffixParts.push(`$expand=${expands.join(',')}`);\n const querySuffix = suffixParts.length > 0 ? `&${suffixParts.join('&')}` : '';\n\n records = await this._getRawRecordsByIds({ ids, querySuffix });\n\n if (this._lookupManyColumns.length > 0 || this._customColumns.length > 0) {\n for (const record of records) {\n await this._harmonizeLookupManyData(record);\n await this._harmonizenizeCustomColumnsData(record);\n }\n }\n return records;\n }\n\n public getProjectRecord(): ISingleRecord | null {\n return this._projectRecord ?? null;\n }\n public getSourceRecord(): ISingleRecord | null {\n return this._sourceRecord ?? null;\n }\n\n private async _harmonizenizeCustomColumnsData(record: IRawRecord): Promise<void> {\n for (const col of this._customColumns) {\n const strategy: IDataverseCustomColumnsStrategy = this._customColumnsDataProvider!.getStrategy();\n const value = strategy.getValueFromRawRecord(record[this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute], record, col);\n record[col.name] = value;\n }\n }\n\n private async _harmonizeLookupManyData(record: IRawRecord): Promise<IRawRecord> {\n const nextLinkSuffix = '@odata.nextLink';\n for (const lookupManyCol of this._lookupManyColumns) {\n const referencedEntityNavigationPropertyName = lookupManyCol.metadata.LookupMany.ReferencedEntityNavigationPropertyName;\n record[lookupManyCol.name] = await this._convertLookupManyToEntityReference(record[referencedEntityNavigationPropertyName], lookupManyCol);\n delete record[referencedEntityNavigationPropertyName];\n delete record[`${referencedEntityNavigationPropertyName}${nextLinkSuffix}`];\n }\n return record;\n }\n\n private async _convertLookupManyToEntityReference(data: IRawRecord[], col: IColumn): Promise<ComponentFramework.EntityReference[]> {\n const relatedEntityMetadata = await window.Xrm.Utility.getEntityMetadata(col.metadata?.Targets[0]);\n const primaryIdAttribute: string = relatedEntityMetadata.PrimaryIdAttribute;\n const primaryNameAttribute: string = relatedEntityMetadata.PrimaryNameAttribute;\n const referencingEntityNavigationPropertyName = col.metadata?.LookupMany?.CustomIntersection?.ReferencingEntityNavigationPropertyName;\n const lookupManyHandler = this._getLookupManyHandlerForColumn(col.name);\n\n return data.map(record => {\n let data = record;\n if (referencingEntityNavigationPropertyName) {\n data = record[referencingEntityNavigationPropertyName];\n }\n const result = {\n id: {\n guid: data[primaryIdAttribute]\n },\n name: data[primaryNameAttribute],\n etn: relatedEntityMetadata.LogicalName,\n rawData: data\n }\n if (lookupManyHandler.isCustomIntersection()) {\n if (result.rawData) {\n result.rawData.__intersectionId = record[lookupManyHandler.getCustomIntersectionEntityMetadata().PrimaryIdAttribute];\n }\n }\n return result;\n });\n }\n\n private async _getRawRecordsByIds(params: { ids: string[], querySuffix?: string }): Promise<IRawRecord[]> {\n const maxIdsPerRequest = 800;\n const batches: string[][] = [];\n const { ids, querySuffix = '' } = params;\n\n let currentBatch: string[] = [];\n for (const [i, taskId] of Object.entries(ids)) {\n if (currentBatch.length < maxIdsPerRequest) {\n currentBatch.push(taskId);\n } else {\n batches.push(currentBatch);\n currentBatch = [taskId];\n }\n if (+i + 1 === ids.length) {\n batches.push(currentBatch);\n }\n }\n\n const batchedTasks: ComponentFramework.WebApi.Entity[][] = await Promise.all(batches.map(async (batchIds) => {\n const query = `?$filter=Microsoft.Dynamics.CRM.In(PropertyName='${this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute}', PropertyValues=[${batchIds.map((id) => `'${id}'`).join(',')}])${querySuffix}`;\n const { entities } = await window.Xrm.WebApi.retrieveMultipleRecords(\n this._entityName,\n query\n );\n return entities;\n }));\n return batchedTasks.flat();\n }\n\n public async onInitialize(provider: ITaskDataProvider): Promise<{ columns: IColumn[]; rawData: IRawRecord[]; metadata: any; }> {\n this._provider = provider;\n this._taskTree = provider.getRecordTree();\n this._fetchXml = this._getFetchXml();\n const virtualColumns = structuredClone(provider.getColumns().filter(col => col.isVirtual));\n this._fetchXmlDataProvider = new FetchXmlDataProvider({ fetchXml: this._fetchXml, loadAllRecords: true });\n this._fetchXmlDataProvider.setColumns(provider.getColumns());\n this._fetchXmlDataProvider.setLinking(provider.getLinking());\n await this._fetchXmlDataProvider.refresh();\n this._entityName = this._fetchXmlDataProvider.getEntityName();\n this._entitySetName = this._fetchXmlDataProvider.getMetadata().EntitySetName;\n const columns = this._fetchXmlDataProvider.getColumns();\n this._customColumns = this._getCustomColumns(columns);\n this._lookupManyColumns = this._getLookupManyColumns(columns);\n this._restoreVirtualColumnMetadata(virtualColumns, columns);\n this._injectLookupManyFilterOperators(columns);\n const metadata = this._fetchXmlDataProvider.getMetadata();\n const fetchXmlProviderData = this._fetchXmlDataProvider.getRawData();\n const primaryIdAttribute = this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute;\n const enrichedData = await this.onGetRawRecords(this._fetchXmlDataProvider.getSortedRecordIds(), primaryIdAttribute);\n const enrichedDataMap = new Map<string, IRawRecord>(\n enrichedData.map(record => [record[primaryIdAttribute] as string, record])\n );\n const finalRawData = fetchXmlProviderData.map((record) => {\n const id = record[primaryIdAttribute] as string;\n return {\n ...enrichedDataMap.get(id),\n ...record,\n }\n });\n\n if (this._projectReference) {\n this._projectMetadata = await window.Xrm.Utility.getEntityMetadata(this._projectReference.etn!);\n }\n return {\n rawData: finalRawData,\n columns,\n metadata\n }\n }\n\n private _getLookupManyColumns(columns: IColumn[]): ILookupManyColumn[] {\n return columns.filter(col => col.metadata?.LookupMany) as any;\n }\n\n private _getCustomColumns(columns: IColumn[]): IColumn[] {\n return columns.filter(col => this._customColumnsDataProvider?.isCustomColumn(col.name));\n }\n\n //fetch xml provider will override virtual column metadata by default, so we need to restore it after initialization.\n private _restoreVirtualColumnMetadata(virtualColumns: IColumn[], columns: IColumn[]) {\n columns.map((col, i) => {\n const virtualCol = virtualColumns.find(virtualCol => virtualCol.name === col.name);\n if (virtualCol) {\n columns[i] = virtualCol;\n }\n });\n }\n\n private _injectLookupManyFilterOperators(columns: IColumn[]) {\n columns.map(col => {\n if (col.metadata?.LookupMany) {\n col.metadata = {\n ...col.metadata,\n SupportedFilterConditionOperators: Operators.GetOperatorsForDataType(DataTypes.MultiSelectOptionSet).map(op => op.Value)\n }\n }\n })\n }\n\n private _getFieldMapping(): IFieldMapping {\n return this._provider.getNativeColumns() as IFieldMapping;\n }\n\n private _getFetchXml(): string {\n return LIQUID.parseAndRenderSync(this._fetchXml, {\n project: {\n id: this._projectReference?.id.guid,\n ...this._projectRecord?.getRawData()\n },\n currentRecord: {\n id: this._sourceRecord?.getNamedReference().id.guid,\n ...this._sourceRecord?.getRawData()\n }\n })\n }\n\n public async onGetAvailableColumns(options?: IAvailableColumnOptions): Promise<IColumn[]> {\n return this._fetchXmlDataProvider.getAvailableColumns(options);\n }\n public async onGetAvailableRelatedColumns(): Promise<IAvailableRelatedColumn[]> {\n return this._fetchXmlDataProvider.getAvailableRelatedColumns();\n }\n\n public async onCreateTask(parentTaskId?: string): Promise<IRawRecord | null> {\n const data: { [key: string]: any } = {};\n let pageInput: Xrm.Navigation.PageInputEntityRecord = {\n pageType: 'entityrecord',\n entityName: this._entityName,\n data: data,\n formId: this._createFormId\n };\n //prefill project\n if (this._projectReference) {\n const projectIdColumnName = this._getFieldMapping().projectId;\n data[`${projectIdColumnName}`] = this._projectReference.id.guid;\n data[`${projectIdColumnName}name`] = this._projectReference.name;\n data[`${projectIdColumnName}type`] = this._projectReference.etn;\n }\n //prefill parent task\n if (parentTaskId) {\n const parentIdColumnName = this._getFieldMapping().parentId;\n data[`${parentIdColumnName}`] = parentTaskId;\n data[`${parentIdColumnName}name`] = this._provider.getRecordsMap()[parentTaskId].getNamedReference().name;\n data[`${parentIdColumnName}type`] = this._entityName;\n }\n const node = this._taskTree.getNode(parentTaskId ?? null);\n let payload: { [key: string]: any } = {};\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ previousTaskId: undefined, nextTaskId: node.directChildren[0]?.getRecordId(), skipSave: true });\n\n if (this._projectReference) {\n payload[`${await this._getNavigationalPropertyName(this._projectReference.etn!, this._getFieldMapping().projectId!)}@odata.bind`] = `/${this._projectMetadata?.EntitySetName}(${this._projectReference.id.guid})`;\n }\n if (parentTaskId) {\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${parentTaskId})`;\n }\n if (this._isInlineCreateEnabled) {\n const result = await window.Xrm.WebApi.createRecord(this._entityName, payload);\n const rawRecord = (await this.onGetRawRecords([result.id]))[0];\n return rawRecord;\n }\n\n const { pageInput: resolvedPageInput, navigationOptions: resolvedNavigationOptions } = this._getFormParameters('create', {\n pageInput,\n navigationOptions: this._getFormNavigationOptions()\n });\n const navigateToResult = await Xrm.Navigation.navigateTo(resolvedPageInput, resolvedNavigationOptions);\n if (navigateToResult.savedEntityReference) {\n const entityReference = Sanitizer.Lookup.getEntityReference(navigateToResult.savedEntityReference[0]);\n await window.Xrm.WebApi.updateRecord(this._entityName, entityReference.id.guid, payload);\n const rawRecord = (await this.onGetRawRecords([entityReference.id.guid]))[0];\n return rawRecord;\n }\n else {\n return null;\n }\n }\n\n public async onDeleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null> {\n const allTaskIds: Set<string> = new Set(taskIds);\n let success = true;\n const notDeletableTaskIds: string[] = [];\n if (this._isCascadeDeleteEnabled) {\n for (const taskId of taskIds) {\n const children = this._taskTree.getNode(taskId)?.allChildren.map(c => c.getRecordId()) ?? [];\n children.map(id => allTaskIds.add(id));\n }\n }\n if (!this._isDeletingTasksWithChildrenEnabled) {\n for (const taskId of allTaskIds) {\n if (this._taskTree.hasChildren(taskId)) {\n success = false;\n allTaskIds.delete(taskId);\n notDeletableTaskIds.push(taskId);\n }\n }\n }\n const result = await this._fetchXmlDataProvider.deleteRecords([...allTaskIds]);\n return {\n success: result.success && success,\n deletedTaskIds: [...allTaskIds],\n errors: [...result.results.filter(result => !result.success).map(result => {\n return {\n id: result.recordId,\n error: result.errorMessage\n }\n }), ...notDeletableTaskIds.map(id => {\n return {\n id,\n //TODO: localize\n error: 'Cannot delete task with children.'\n }\n })]\n }\n }\n public onCreateTemplateFromTask(taskId: string): Promise<IRawRecord | null> {\n throw new Error(\"Method not implemented.\");\n }\n public onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null> {\n throw new Error(\"Method not implemented.\");\n }\n public async onOpenDatasetItems(entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean): Promise<IOpenDatasetItemsResult | null> {\n if (!isTaskEntity) {\n // Navigate to related entity (lookup target)\n const { pageInput, navigationOptions } = this._getFormParameters('open', {\n pageInput: {\n pageType: 'entityrecord',\n entityName: entityReferences[0].etn!,\n entityId: entityReferences[0].id.guid,\n },\n navigationOptions: this._getFormNavigationOptions()\n });\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n return null;\n }\n if (entityReferences.length === 1) {\n const rawRecord = await this._editSingleTask(entityReferences[0].id.guid);\n if (!rawRecord) return null;\n return { success: true, updatedRecords: [rawRecord] };\n }\n const result = await this._editMultipleTasks(entityReferences.map(ref => ref.id.guid));\n return result;\n }\n public async onMoveTask(movingTaskId: string, movingToTaskId: string, position: \"above\" | \"below\" | \"child\"): Promise<IRawRecord[] | null> {\n const movingToRecord = this._provider.getRecordsMap()[movingToTaskId];\n let payload: { [key: string]: any } = {};\n if (position === 'child') {\n //change parent\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${movingToTaskId})`;\n const firstChild = this._taskTree.getNode(movingToTaskId).directChildren\n .find(c => c.getRecordId() !== movingTaskId);\n if (firstChild) {\n //change stack rank to be before first child\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: undefined, nextTaskId: firstChild.getRecordId(), skipSave: true });\n }\n await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);\n const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];\n return [rawRecord];\n }\n else {\n const movingToRecordParent = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())?.parent;\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = movingToRecordParent ? `/${this._entitySetName}(${movingToRecordParent.getRecordId()})` : null;\n\n const movingToRecordNode = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())!;\n const siblings = this._taskTree.getNodeMap().get(movingToRecordParent?.getRecordId() ?? null as any)?.directChildren ?? [];\n\n let prevSiblingId: string | undefined;\n let nextSiblingId: string | undefined;\n if (position === 'above') {\n prevSiblingId = siblings[movingToRecordNode.index - 1]?.getRecordId();\n nextSiblingId = movingToRecord.getRecordId();\n } else {\n prevSiblingId = movingToRecord.getRecordId();\n nextSiblingId = siblings[movingToRecordNode.index + 1]?.getRecordId();\n }\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: prevSiblingId, nextTaskId: nextSiblingId, skipSave: true });\n await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);\n const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];\n return [rawRecord];\n }\n }\n\n /**\n * Saves a single dirty field on a task record.\n * Lookup-many fields are persisted through their dedicated {@link LookupManyHandler}; all other fields use the standard FetchXML provider save path.\n * TaskGrid uses auto-save, so exactly one dirty field is expected per call.\n */\n public async onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult> {\n const dirtyField = record.getFields().find(field => field.isDirty());\n const column = dirtyField?.getColumn();\n if (column?.metadata?.LookupMany) {\n const handler = this._getLookupManyHandlerForColumn(column.name);\n return handler.saveRecord(record, column.name);\n }\n else if (column?.name.endsWith(DatasetConstants.CUSTOM_COLUMN_NAME_SUFFIX)) {\n return this._customColumnsDataProvider!.saveValue(record.getRecordId(), column, dirtyField?.getValue());\n }\n else {\n return (<FetchXmlDataProvider>this._fetchXmlDataProvider).onRecordSave(record);\n }\n }\n\n /** Returns `true` when the task's `stateCode` attribute equals `0` (active). */\n public onIsRecordActive(recordId: string): boolean {\n const record = this._provider.getRecordsMap()[recordId];\n return record.getValue(this._provider.getNativeColumns().stateCode) == 0;\n }\n\n\n /** Returns the root task ID used to scope the displayed hierarchy. */\n public onGetRootTaskId?(): string | undefined {\n return this._rootTaskId;\n }\n\n private async _getNavigationalPropertyName(referencedEntityName: string, referencingAttribute: string): Promise<string> {\n const metadata: any = await window.Xrm.Utility.getEntityMetadata(this._entityName);\n const relationship = metadata.ManyToOneRelationships.getAll().find((rel: any) =>\n rel.ReferencedEntity === referencedEntityName &&\n rel.ReferencingAttribute === referencingAttribute\n );\n if (!relationship) {\n throw new Error(`Could not find many-to-one relationship targeting ${referencedEntityName} on ${metadata.LogicalName}`);\n }\n return relationship.ReferencingEntityNavigationPropertyName;\n }\n\n private _getFormNavigationOptions(): Xrm.Navigation.NavigationOptions {\n return {\n target: 2,\n width: { value: 80, unit: '%' },\n position: 1,\n };\n }\n\n private _getLookupManyHandlerForColumn(colName: string): LookupManyHandler {\n const handler = this._lookupManyHandlers[colName];\n if (!handler) {\n throw new Error(`No LookupManyHandler found for column ${colName}`);\n }\n return handler;\n }\n\n private async _editSingleTask(recordId: string): Promise<IRawRecord | null> {\n const { pageInput, navigationOptions } = this._getFormParameters('edit', {\n pageInput: {\n pageType: 'entityrecord',\n entityName: this._entityName,\n entityId: recordId,\n formId: this._editFormId,\n data: {\n isEditingEnabled: this._isEditingEnabled\n }\n },\n navigationOptions: this._getFormNavigationOptions()\n })\n\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n const result = await this.onGetRawRecords([recordId]);\n return result[0];\n }\n\n private async _editMultipleTasks(recordIds: string[]): Promise<IOpenDatasetItemsResult | null> {\n const { pageInput, navigationOptions } = this._getFormParameters('bulkEdit', {\n //@ts-ignore - not documented, passing of record id array is possible in Power Apps - https://butenko.pro/2021/10/14/howto-open-bulk-editing-of-records-using-xrm-navigation-navigateto/\n pageInput: {\n //@ts-ignore - typings\n pageType: 'bulkedit',\n entityName: this._entityName,\n entityIds: recordIds,\n formId: this._bulkEditFormId\n },\n navigationOptions: {\n target: 2,\n position: 2,\n }\n });\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n const rawRecords = await this.onGetRawRecords(recordIds);\n return { success: true, updatedRecords: rawRecords };\n }\n\n private async _updateStackRank(params: { recordId?: string, previousTaskId?: string, nextTaskId?: string; skipSave?: boolean }): Promise<string> {\n const stackRankCol = this._getFieldMapping().stackRank;\n const rawDataMap = this._provider.getRawDataMap();\n\n const prevRankStr = params.previousTaskId ? (rawDataMap[params.previousTaskId]?.[stackRankCol] as string) : undefined;\n const nextRankStr = params.nextTaskId ? (rawDataMap[params.nextTaskId]?.[stackRankCol] as string) : undefined;\n\n let newRank: string;\n if (prevRankStr && nextRankStr) {\n newRank = LexoRank.parse(prevRankStr).between(LexoRank.parse(nextRankStr)).format();\n } else if (nextRankStr) {\n newRank = LexoRank.parse(nextRankStr).genPrev().format();\n } else if (prevRankStr) {\n newRank = LexoRank.parse(prevRankStr).genNext().format();\n } else {\n newRank = LexoRank.middle().format();\n }\n if (!params.skipSave && params.recordId) {\n await window.Xrm.WebApi.updateRecord(this._entityName, params.recordId, {\n [stackRankCol]: newRank\n });\n }\n return newRank;\n }\n\n}"],"names":[],"mappings":";;;;;AAqEA,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAE5B;;;;;;;;AAQG;MACU,qBAAqB,CAAA;;IA2B9B,WAAY,CAAA,MAAoC,EAAE,IAAuB,EAAA;QATjE,IAAkB,CAAA,kBAAA,GAAwB,EAAE,CAAC;QAC7C,IAAc,CAAA,cAAA,GAAc,EAAE,CAAC;QAG/B,IAAmB,CAAA,mBAAA,GAA6C,EAAE,CAAC;AAMvE,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,yBAAyB,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AAC7C,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACxD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,mCAAmC,GAAG,MAAM,CAAC,kCAAkC,IAAI,KAAK,CAAC;QAC9F,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,sBAAsB,IAAI,KAAK,CAAC;AACtE,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,EAAE,mBAAmB,KAAK,CAAC,SAAS,EAAE,iBAAiB,KAAK,iBAAiB,CAAC,CAAC;AACpH,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;KAC5C;AAEM,IAAA,MAAM,eAAe,CAAC,GAAa,EAAE,MAAe,EAAA;QACvD,IAAI,OAAO,GAAiB,EAAE,CAAC;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAM,GAAG,KAAG;YACtE,MAAM,sCAAsC,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,sCAAsC,CAAC;YAC9G,MAAM,kBAAkB,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;AACtE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC;gBACxE,UAAU,EAAE,IAAI,CAAC,WAAW;AAC5B,gBAAA,sBAAsB,EAAE,sCAAuC;AAC/D,gBAAA,kBAAkB,EAAE,kBAAkB,GAAG;oBACrC,uCAAuC,EAAE,kBAAkB,CAAC,uCAAuC;iBACtG,GAAG,SAAS;AAChB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AAC7C,YAAA,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;AACrB,YAAA,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC5D,CAAC,CAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,MAAM,QAAQ,GAAoC,IAAI,CAAC,0BAA2B,CAAC,WAAW,EAAE,CAAC;YACjG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;AACtC,SAAA;QACD,MAAM,WAAW,GAAa,EAAE,CAAC;AACjC,QAAA,IAAI,MAAM;AAAE,YAAA,WAAW,CAAC,IAAI,CAAC,WAAW,MAAM,CAAA,CAAE,CAAC,CAAC;AAClD,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,WAAW,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;AAE9E,QAAA,OAAO,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACtE,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,gBAAA,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC5C,gBAAA,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACtD,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;IAEM,gBAAgB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;KACtC;IACM,eAAe,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;KACrC;IAEO,MAAM,+BAA+B,CAAC,MAAkB,EAAA;AAC5D,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YACnC,MAAM,QAAQ,GAAoC,IAAI,CAAC,0BAA2B,CAAC,WAAW,EAAE,CAAC;YACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/H,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC5B,SAAA;KACJ;IAEO,MAAM,wBAAwB,CAAC,MAAkB,EAAA;QACrD,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC,QAAA,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACjD,MAAM,sCAAsC,GAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,sCAAsC,CAAC;AACxH,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,sCAAsC,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3I,YAAA,OAAO,MAAM,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,CAAG,EAAA,sCAAsC,GAAG,cAAc,CAAA,CAAE,CAAC,CAAC;AAC/E,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AAEO,IAAA,MAAM,mCAAmC,CAAC,IAAkB,EAAE,GAAY,EAAA;QAC9E,MAAM,qBAAqB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,QAAA,MAAM,kBAAkB,GAAW,qBAAqB,CAAC,kBAAkB,CAAC;AAC5E,QAAA,MAAM,oBAAoB,GAAW,qBAAqB,CAAC,oBAAoB,CAAC;QAChF,MAAM,uCAAuC,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,uCAAuC,CAAC;QACtI,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAExE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,IAAG;YACrB,IAAI,IAAI,GAAG,MAAM,CAAC;AAClB,YAAA,IAAI,uCAAuC,EAAE;AACzC,gBAAA,IAAI,GAAG,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAC1D,aAAA;AACD,YAAA,MAAM,MAAM,GAAG;AACX,gBAAA,EAAE,EAAE;AACA,oBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACjC,iBAAA;AACD,gBAAA,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC;gBAChC,GAAG,EAAE,qBAAqB,CAAC,WAAW;AACtC,gBAAA,OAAO,EAAE,IAAI;aAChB,CAAA;AACD,YAAA,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,EAAE;gBAC1C,IAAI,MAAM,CAAC,OAAO,EAAE;AAChB,oBAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,mCAAmC,EAAE,CAAC,kBAAkB,CAAC,CAAC;AACxH,iBAAA;AACJ,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;IAEO,MAAM,mBAAmB,CAAC,MAA+C,EAAA;QAC7E,MAAM,gBAAgB,GAAG,GAAG,CAAC;QAC7B,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;QAEzC,IAAI,YAAY,GAAa,EAAE,CAAC;AAChC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC3C,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,gBAAgB,EAAE;AACxC,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3B,gBAAA,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,aAAA;YACD,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE;AACvB,gBAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9B,aAAA;AACJ,SAAA;AAED,QAAA,MAAM,YAAY,GAAyC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAI;AACxG,YAAA,MAAM,KAAK,GAAG,CAAoD,iDAAA,EAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAsB,mBAAA,EAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAK,EAAA,EAAA,WAAW,EAAE,CAAC;AAC/M,YAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAChE,IAAI,CAAC,WAAW,EAChB,KAAK,CACR,CAAC;AACF,YAAA,OAAO,QAAQ,CAAC;SACnB,CAAC,CAAC,CAAC;AACJ,QAAA,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;KAC9B;IAEM,MAAM,YAAY,CAAC,QAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,oBAAoB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;AAC7D,QAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC;AACvF,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACrH,MAAM,eAAe,GAAG,IAAI,GAAG,CAC3B,YAAY,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAW,EAAE,MAAM,CAAC,CAAC,CAC7E,CAAC;QACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACrD,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAW,CAAC;YAChD,OAAO;AACH,gBAAA,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,gBAAA,GAAG,MAAM;aACZ,CAAA;AACL,SAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAI,CAAC,CAAC;AACnG,SAAA;QACD,OAAO;AACH,YAAA,OAAO,EAAE,YAAY;YACrB,OAAO;YACP,QAAQ;SACX,CAAA;KACJ;AAEO,IAAA,qBAAqB,CAAC,OAAkB,EAAA;AAC5C,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAQ,CAAC;KACjE;AAEO,IAAA,iBAAiB,CAAC,OAAkB,EAAA;AACxC,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3F;;IAGO,6BAA6B,CAAC,cAAyB,EAAE,OAAkB,EAAA;QAC/E,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACnB,YAAA,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;AACnF,YAAA,IAAI,UAAU,EAAE;AACZ,gBAAA,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC3B,aAAA;AACL,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,gCAAgC,CAAC,OAAkB,EAAA;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAG;AACd,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;gBAC1B,GAAG,CAAC,QAAQ,GAAG;oBACX,GAAG,GAAG,CAAC,QAAQ;AACf,oBAAA,iCAAiC,EAAE,SAAS,CAAC,uBAAuB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC;iBAC3H,CAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAA;KACL;IAEO,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAmB,CAAC;KAC7D;IAEO,YAAY,GAAA;AAChB,QAAA,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7C,YAAA,OAAO,EAAE;AACL,gBAAA,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI;AACnC,gBAAA,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACvC,aAAA;AACD,YAAA,aAAa,EAAE;gBACX,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,IAAI;AACnD,gBAAA,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE;AACtC,aAAA;AACJ,SAAA,CAAC,CAAA;KACL;IAEM,MAAM,qBAAqB,CAAC,OAAiC,EAAA;QAChE,OAAO,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;KAClE;AACM,IAAA,MAAM,4BAA4B,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,CAAC;KAClE;IAEM,MAAM,YAAY,CAAC,YAAqB,EAAA;QAC3C,MAAM,IAAI,GAA2B,EAAE,CAAC;AACxC,QAAA,IAAI,SAAS,GAAyC;AAClD,YAAA,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,IAAI,CAAC,WAAW;AAC5B,YAAA,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI,CAAC,aAAa;SAC7B,CAAC;;QAEF,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC;AAC9D,YAAA,IAAI,CAAC,CAAA,EAAG,mBAAmB,CAAA,CAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC;YAChE,IAAI,CAAC,CAAG,EAAA,mBAAmB,CAAM,IAAA,CAAA,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACjE,IAAI,CAAC,CAAG,EAAA,mBAAmB,CAAM,IAAA,CAAA,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACnE,SAAA;;AAED,QAAA,IAAI,YAAY,EAAE;YACd,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;AAC5D,YAAA,IAAI,CAAC,CAAG,EAAA,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;YAC7C,IAAI,CAAC,GAAG,kBAAkB,CAAA,IAAA,CAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;YAC1G,IAAI,CAAC,GAAG,kBAAkB,CAAA,IAAA,CAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AACxD,SAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAC1D,IAAI,OAAO,GAA2B,EAAE,CAAC;AACzC,QAAA,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAE,CAAA,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhL,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,OAAO,CAAC,CAAG,EAAA,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAU,CAAC,CAAA,WAAA,CAAa,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAI,CAAA,EAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC;AACrN,SAAA;AACD,QAAA,IAAI,YAAY,EAAE;AACd,YAAA,OAAO,CAAC,CAAA,EAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAa,WAAA,CAAA,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAG,CAAC;AACrK,SAAA;QACD,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC/E,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AAED,QAAA,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YACrH,SAAS;AACT,YAAA,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AACtD,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;QACvG,IAAI,gBAAgB,CAAC,oBAAoB,EAAE;AACvC,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzF,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AACI,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ;IAEM,MAAM,aAAa,CAAC,OAAiB,EAAA;AACxC,QAAA,MAAM,UAAU,GAAgB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,mBAAmB,GAAa,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC7F,gBAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE;AAC3C,YAAA,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;gBAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;oBACpC,OAAO,GAAG,KAAK,CAAC;AAChB,oBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1B,oBAAA,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QAC/E,OAAO;AACH,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;AAClC,YAAA,cAAc,EAAE,CAAC,GAAG,UAAU,CAAC;YAC/B,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,IAAG;oBACtE,OAAO;wBACH,EAAE,EAAE,MAAM,CAAC,QAAQ;wBACnB,KAAK,EAAE,MAAM,CAAC,YAAY;qBAC7B,CAAA;iBACJ,CAAC,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,EAAE,IAAG;oBAChC,OAAO;wBACH,EAAE;;AAEF,wBAAA,KAAK,EAAE,mCAAmC;qBAC7C,CAAA;AACL,iBAAC,CAAC,CAAC;SACN,CAAA;KACJ;AACM,IAAA,wBAAwB,CAAC,MAAc,EAAA;AAC1C,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC9C;IACM,yBAAyB,CAAC,UAAkB,EAAE,YAAqB,EAAA;AACtE,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC9C;AACM,IAAA,MAAM,kBAAkB,CAAC,gBAAsD,EAAE,YAAqB,EAAA;QACzG,IAAI,CAAC,YAAY,EAAE;;YAEf,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACrE,gBAAA,SAAS,EAAE;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAI;oBACpC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;AACxC,iBAAA;AACD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AACtD,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACrE,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO,IAAI,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACzD,SAAA;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,QAAA,OAAO,MAAM,CAAC;KACjB;AACM,IAAA,MAAM,UAAU,CAAC,YAAoB,EAAE,cAAsB,EAAE,QAAqC,EAAA;QACvG,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,OAAO,GAA2B,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,OAAO,EAAE;;AAEtB,YAAA,OAAO,CAAC,CAAA,EAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAa,WAAA,CAAA,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,CAAG,CAAC;YACpK,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,cAAc;AACnE,iBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,CAAC;AACjD,YAAA,IAAI,UAAU,EAAE;;AAEZ,gBAAA,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAE,CAAA,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9L,aAAA;AACD,YAAA,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC9E,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,SAAS,CAAC,CAAC;AACtB,SAAA;AACI,aAAA;AACD,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC;AACnG,YAAA,OAAO,CAAC,CAAG,EAAA,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA,WAAA,CAAa,CAAC,GAAG,oBAAoB,GAAG,CAAI,CAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,oBAAoB,CAAC,WAAW,EAAE,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC;AAEtN,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAE,CAAC;YAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,EAAE,IAAI,IAAW,CAAC,EAAE,cAAc,IAAI,EAAE,CAAC;AAE3H,YAAA,IAAI,aAAiC,CAAC;AACtC,YAAA,IAAI,aAAiC,CAAC;YACtC,IAAI,QAAQ,KAAK,OAAO,EAAE;AACtB,gBAAA,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;AACtE,gBAAA,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;AAChD,aAAA;AAAM,iBAAA;AACH,gBAAA,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;AAC7C,gBAAA,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;AACzE,aAAA;AACD,YAAA,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAA,CAAE,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACpL,YAAA,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC9E,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,SAAS,CAAC,CAAC;AACtB,SAAA;KACJ;AAED;;;;AAIG;IACI,MAAM,YAAY,CAAC,MAAe,EAAA;AACrC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACrE,QAAA,MAAM,MAAM,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC;AACvC,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAClD,SAAA;aACI,IAAI,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;AACxE,YAAA,OAAO,IAAI,CAAC,0BAA2B,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3G,SAAA;AACI,aAAA;YACD,OAA8B,IAAI,CAAC,qBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAClF,SAAA;KACJ;;AAGM,IAAA,gBAAgB,CAAC,QAAgB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;AACxD,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC5E;;IAIM,eAAe,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAEO,IAAA,MAAM,4BAA4B,CAAC,oBAA4B,EAAE,oBAA4B,EAAA;AACjG,QAAA,MAAM,QAAQ,GAAQ,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnF,MAAM,YAAY,GAAG,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAQ,KACxE,GAAG,CAAC,gBAAgB,KAAK,oBAAoB;AAC7C,YAAA,GAAG,CAAC,oBAAoB,KAAK,oBAAoB,CACpD,CAAC;QACF,IAAI,CAAC,YAAY,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,CAAqD,kDAAA,EAAA,oBAAoB,CAAO,IAAA,EAAA,QAAQ,CAAC,WAAW,CAAE,CAAA,CAAC,CAAC;AAC3H,SAAA;QACD,OAAO,YAAY,CAAC,uCAAuC,CAAC;KAC/D;IAEO,yBAAyB,GAAA;QAC7B,OAAO;AACH,YAAA,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AAC/B,YAAA,QAAQ,EAAE,CAAC;SACd,CAAC;KACL;AAEO,IAAA,8BAA8B,CAAC,OAAe,EAAA;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAA,CAAE,CAAC,CAAC;AACvE,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;IAEO,MAAM,eAAe,CAAC,QAAgB,EAAA;QAC1C,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACrE,YAAA,SAAS,EAAE;AACP,gBAAA,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,IAAI,CAAC,WAAW;AAC5B,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,gBAAA,IAAI,EAAE;oBACF,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;AAC3C,iBAAA;AACJ,aAAA;AACD,YAAA,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AACtD,SAAA,CAAC,CAAA;AAEF,QAAA,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;KACpB;IAEO,MAAM,kBAAkB,CAAC,SAAmB,EAAA;QAChD,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;;AAEzE,YAAA,SAAS,EAAE;;AAEP,gBAAA,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,IAAI,CAAC,WAAW;AAC5B,gBAAA,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,IAAI,CAAC,eAAe;AAC/B,aAAA;AACD,YAAA,iBAAiB,EAAE;AACf,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,QAAQ,EAAE,CAAC;AACd,aAAA;AACJ,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;KACxD;IAEO,MAAM,gBAAgB,CAAC,MAA+F,EAAA;QAC1H,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAElD,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,GAAI,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,YAAY,CAAY,GAAG,SAAS,CAAC;QACtH,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,GAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAY,GAAG,SAAS,CAAC;AAE9G,QAAA,IAAI,OAAe,CAAC;QACpB,IAAI,WAAW,IAAI,WAAW,EAAE;YAC5B,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACvF,SAAA;AAAM,aAAA,IAAI,WAAW,EAAE;AACpB,YAAA,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AAC5D,SAAA;AAAM,aAAA,IAAI,WAAW,EAAE;AACpB,YAAA,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AAC5D,SAAA;AAAM,aAAA;YACH,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;AACxC,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrC,YAAA,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACpE,CAAC,YAAY,GAAG,OAAO;AAC1B,aAAA,CAAC,CAAC;AACN,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AAEJ;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DataverseTaskStrategy } from './DataverseTaskStrategy.js';
|
|
2
|
+
export { DataverseTaskGridDescriptor } from './DataverseTaskGridDescriptor.js';
|
|
3
|
+
export { DataverseGridCustomizerStrategy } from './DataverseGridCustomizerStrategy.js';
|
|
4
|
+
export { DataverseSavedQueryStrategy } from './DataverseSavedQueryStrategy.js';
|
|
5
|
+
export { ATTRIBUTE_DEFINITION_ENTITY_NAME, ATTRIBUTE_VALUE_ENTITY_NAME, DataverseCustomColumnsStrategy } from './DataverseCustomColumnsStrategy.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|