@talxis/base-controls 1.2605.2-alpha → 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.
Files changed (113) hide show
  1. package/dist/components/Grid/cells/cell/Cell.js +2 -6
  2. package/dist/components/Grid/cells/cell/Cell.js.map +1 -1
  3. package/dist/components/Grid/column-headers/column-header/ColumnHeader.js +1 -1
  4. package/dist/components/Grid/column-headers/column-header/ColumnHeader.js.map +1 -1
  5. package/dist/components/Grid/grid/ag-grid/AgGridModel.js +1 -1
  6. package/dist/components/Grid/grid/ag-grid/AgGridModel.js.map +1 -1
  7. package/dist/components/Lookup/components/TargetSelector.js +1 -1
  8. package/dist/components/Lookup/components/TargetSelector.js.map +1 -1
  9. package/dist/components/Lookup/hooks/useLookup.d.ts +4 -0
  10. package/dist/components/Lookup/translations.d.ts +4 -0
  11. package/dist/components/Lookup/translations.js +4 -0
  12. package/dist/components/Lookup/translations.js.map +1 -1
  13. package/dist/components/TaskGrid/TaskGrid.js +2 -2
  14. package/dist/components/TaskGrid/TaskGrid.js.map +1 -1
  15. package/dist/components/TaskGrid/TaskGridDatasetControl.d.ts +2 -0
  16. package/dist/components/TaskGrid/TaskGridDatasetControl.js +42 -28
  17. package/dist/components/TaskGrid/TaskGridDatasetControl.js.map +1 -1
  18. package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js +3 -0
  19. package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js.map +1 -1
  20. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js +6 -3
  21. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js.map +1 -1
  22. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js +2 -4
  23. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js.map +1 -1
  24. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.d.ts +0 -6
  25. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.js +0 -6
  26. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/styles.js.map +1 -1
  27. package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js +10 -5
  28. package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js.map +1 -1
  29. package/dist/components/TaskGrid/components/grid/group-cell/styles.d.ts +3 -0
  30. package/dist/components/TaskGrid/components/grid/group-cell/styles.js +3 -0
  31. package/dist/components/TaskGrid/components/grid/group-cell/styles.js.map +1 -1
  32. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.d.ts +1 -1
  33. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js +3 -1
  34. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js.map +1 -1
  35. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.d.ts +1 -1
  36. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js +1 -1
  37. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js.map +1 -1
  38. package/dist/components/TaskGrid/components/grid/lookup-many/components/components.d.ts +11 -0
  39. package/dist/components/TaskGrid/components/grid/lookup-many/components/components.js +17 -0
  40. package/dist/components/TaskGrid/components/grid/lookup-many/components/components.js.map +1 -0
  41. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.d.ts +1 -10
  42. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js +1 -14
  43. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js.map +1 -1
  44. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.d.ts +3 -0
  45. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.js +10 -0
  46. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/Menu.js.map +1 -0
  47. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.d.ts +1 -0
  48. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.js +2 -0
  49. package/dist/components/TaskGrid/components/grid/lookup-many/components/menu/index.js.map +1 -0
  50. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.d.ts +5 -1
  51. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js +3 -2
  52. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -1
  53. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js +1 -1
  54. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js.map +1 -1
  55. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.d.ts +2 -0
  56. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.js +15 -0
  57. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/components.js.map +1 -0
  58. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.d.ts +1 -2
  59. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js +1 -12
  60. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js.map +1 -1
  61. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.d.ts +3 -0
  62. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.js +12 -0
  63. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
  64. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.d.ts +1 -0
  65. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.js +2 -0
  66. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/index.js.map +1 -0
  67. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.d.ts +9 -0
  68. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.js +18 -0
  69. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-container/styles.js.map +1 -0
  70. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js +1 -1
  71. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js.map +1 -1
  72. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.d.ts +1 -1
  73. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js +3 -2
  74. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js.map +1 -1
  75. package/dist/components/TaskGrid/components/header/Header.d.ts +1 -1
  76. package/dist/components/TaskGrid/components/header/Header.js +58 -44
  77. package/dist/components/TaskGrid/components/header/Header.js.map +1 -1
  78. package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.d.ts +12 -6
  79. package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.js +23 -20
  80. package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.js.map +1 -1
  81. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.d.ts +3 -3
  82. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js +4 -5
  83. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js.map +1 -1
  84. package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.js +15 -15
  85. package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.js.map +1 -1
  86. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.d.ts +27 -25
  87. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js +68 -29
  88. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js.map +1 -1
  89. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.d.ts +19 -17
  90. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js +119 -74
  91. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js.map +1 -1
  92. package/dist/components/TaskGrid/extensions/dataverse/index.js +1 -1
  93. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.d.ts +18 -2
  94. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js +80 -17
  95. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js.map +1 -1
  96. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js +10 -4
  97. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js.map +1 -1
  98. package/dist/components/TaskGrid/interfaces.d.ts +36 -22
  99. package/dist/components/TaskGrid/providers/custom-columns/CustomColumnsDataProvider.d.ts +7 -1
  100. package/dist/components/TaskGrid/providers/custom-columns/CustomColumnsDataProvider.js +3 -0
  101. package/dist/components/TaskGrid/providers/custom-columns/CustomColumnsDataProvider.js.map +1 -1
  102. package/dist/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.d.ts +1 -1
  103. package/dist/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.js +9 -26
  104. package/dist/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.js.map +1 -1
  105. package/dist/components/TaskGrid/providers/task/TaskDataProvider.d.ts +13 -20
  106. package/dist/components/TaskGrid/providers/task/TaskDataProvider.js +30 -22
  107. package/dist/components/TaskGrid/providers/task/TaskDataProvider.js.map +1 -1
  108. package/dist/components/TaskGrid/providers/task/record-tree/RecordTree.d.ts +8 -0
  109. package/dist/components/TaskGrid/providers/task/record-tree/RecordTree.js.map +1 -1
  110. package/dist/index.d.ts +68 -42
  111. package/dist/utils/dataset/adapters/VirtualDatasetAdapter.js.map +1 -1
  112. package/package.json +4 -4
  113. package/dist/components/TaskGrid/extensions/LexoRank.d.ts +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"SavedQueryDataProvider.js","sources":["../../../../../src/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.ts"],"sourcesContent":["import { DataTypes, EventEmitter, IColumn, IEventEmitter, IFetchXmlDataProviderColumn } from \"@talxis/client-libraries\";\nimport { ITaskDataProvider } from \"../task\";\nimport { ICustomColumnsDataProvider } from \"../custom-columns/CustomColumnsDataProvider\";\nimport { INativeColumns } from \"../../interfaces\";\nimport { ErrorHelper, ILocalizationService } from \"../../../../utils\";\nimport { ITaskGridLabels } from \"../../labels\";\n\n\nexport interface ICreateUserQueryParams {\n name: string;\n provider: ITaskDataProvider;\n description?: string;\n}\n\nexport interface IUpdateUserQueryParams {\n queryId: string;\n queryMetadata: ISavedQueryMetadata;\n}\n\nexport interface ISavedQueryDataProviderEvents {\n onBeforeUserQueriesDeleted: (queryIds: string[]) => void;\n onAfterUserQueriesDeleted: (result: IDeletedUserQueriesResult) => void;\n onBeforeUserQueryUpdated: (queryId: string) => void;\n onAfterUserQueryUpdated: (result: string | null) => void;\n onBeforeUserQueryCreated: (queryName: string) => void;\n onAfterUserQueryCreated: (result: string | null) => void;\n onError: (error: any, message: string) => void;\n}\n\nexport type IDeletedUserQueriesResult = { success: true; deletedQueryIds: string[] } | { success: false; deletedQueryIds: string[]; errors: { queryId: string; error: any }[] };\n\n\nexport interface ISavedQuery extends ISavedQueryMetadata {\n id: string;\n name: string;\n}\n\nexport interface ISavedQueryMetadata {\n columns: IColumn[]\n sorting?: ComponentFramework.PropertyHelper.DataSetApi.SortStatus[];\n filtering?: ComponentFramework.PropertyHelper.DataSetApi.FilterExpression;\n linking?: ComponentFramework.PropertyHelper.DataSetApi.LinkEntityExposedExpression[];\n isFlatListEnabled?: boolean;\n searchQuery?: string | undefined;\n quickFindColumns?: string[];\n}\n\nexport const PATH_COLUMN_NAME = 'path__virtual';\nconst REQUIRED_COLUMNS = ['subject', 'parentId', 'stackRank', 'stateCode'];\n\n/** Strategy interface for loading and persisting system and user-defined saved views (queries). */\nexport interface ISavedQueryStrategy {\n /** Returns the built-in (non-deletable) views. At least one system query must be returned. */\n onGetSystemQueries: () => Promise<ISavedQuery[]>;\n /** Returns views saved by the current user. */\n onGetUserQueries: () => Promise<ISavedQuery[]>;\n /** Deletes the specified user views. Returns a per-query success/failure result. */\n onDeleteUserQueries: (queryIds: string[]) => Promise<IDeletedUserQueriesResult>;\n /** @returns The updated query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onUpdateUserQuery: (currentQuery: ISavedQuery) => Promise<string | null>;\n /** @returns The created query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateUserQuery: (newQuery: { name: string; description?: string }, currentQuery: ISavedQuery) => Promise<string | null>;\n}\n\n/** Manages system and user-defined saved views and exposes view lifecycle operations. */\nexport interface ISavedQueryDataProvider {\n /** EventEmitter for saved-query lifecycle events (create, update, delete, errors). */\n queryEvents: IEventEmitter<ISavedQueryDataProviderEvents>;\n /** Returns the full list of non-deletable system views. */\n getSystemQueries: () => ISavedQuery[];\n /** Returns the full list of user-created views. */\n getUserQueries: () => ISavedQuery[];\n /** Returns the currently active saved query. Throws if `refresh` has not been called yet. */\n getCurrentQuery: () => ISavedQuery;\n /** Looks up a query by id across system and user queries. Throws if not found. */\n getSavedQuery(id: string): ISavedQuery;\n /** @returns The created query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createUserQuery: (params: ICreateUserQueryParams) => Promise<string | null>;\n /** Returns `true` when the given query id belongs to a user view (as opposed to a system view). */\n isUserQuery: (queryId: string) => boolean;\n /** @returns The updated query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n updateUserQuery: (provider: ITaskDataProvider) => Promise<string | null>;\n /** Deletes the specified user views. Returns a per-query success/failure result. */\n deleteUserQueries: (queryIds: string[]) => Promise<IDeletedUserQueriesResult>;\n /** Fetches system and user queries from the strategy and sets the initial active query. */\n refresh: () => Promise<void>;\n\n destroy: () => void;\n}\n\ninterface ISavedQueryDataProviderParameters {\n nativeColumns: INativeColumns;\n localizationService: ILocalizationService<ITaskGridLabels>;\n customColumnsDataProvider?: ICustomColumnsDataProvider;\n preferredQuery?: Partial<ISavedQuery> & { id: string };\n}\n\nexport class SavedQueryDataProvider implements ISavedQueryDataProvider {\n private _strategy: ISavedQueryStrategy\n private _systemQueries: ISavedQuery[] = [];\n private _currentQuery?: ISavedQuery;\n private _userQueries: ISavedQuery[] = [];\n private _customColumnsDataProvider?: ICustomColumnsDataProvider;\n private _nativeColumns: INativeColumns;\n private _localizationService: ILocalizationService<ITaskGridLabels>;\n private _systemQueriesColumnsMap: Map<string, IColumn> = new Map();\n private _preferredQuery?: Partial<ISavedQuery> & { id: string };\n public queryEvents = new EventEmitter<ISavedQueryDataProviderEvents>();\n\n constructor(strategy: ISavedQueryStrategy, parameters: ISavedQueryDataProviderParameters) {\n this._strategy = strategy;\n this._preferredQuery = parameters.preferredQuery;\n this._nativeColumns = parameters.nativeColumns;\n this._customColumnsDataProvider = parameters.customColumnsDataProvider;\n this._localizationService = parameters.localizationService;\n }\n\n public getSystemQueries(): ISavedQuery[] {\n return this._systemQueries;\n }\n\n public getUserQueries(): ISavedQuery[] {\n return this._userQueries;\n }\n\n public getCurrentQuery(): ISavedQuery {\n if (!this._currentQuery) {\n throw new Error('Current query is not set. Make sure to call refresh() and wait for it to complete before accessing the current query.');\n }\n return this._currentQuery;\n }\n\n public isUserQuery(queryId: string): boolean {\n return this._userQueries.some(q => q.id === queryId);\n }\n\n public getSavedQuery(id: string): ISavedQuery {\n const query = [...this._systemQueries, ...this._userQueries].find(q => q.id === id);\n if (!query) {\n throw new Error(`Query with id ${id} not found. Make sure to call refresh() and wait for it to complete before accessing the saved query.`);\n }\n return query;\n }\n\n public async updateUserQuery(provider: ITaskDataProvider): Promise<string | null> {\n this.queryEvents.dispatchEvent('onBeforeUserQueryUpdated', this.getCurrentQuery().id);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onUpdateUserQuery({\n ...this.getCurrentQuery(),\n ...this._getMetadataForSavedQuery(provider)\n\n });\n this.queryEvents.dispatchEvent('onAfterUserQueryUpdated', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createUserQuery(params: ICreateUserQueryParams): Promise<string | null> {\n const { name, description, provider } = params;\n this.queryEvents.dispatchEvent('onBeforeUserQueryCreated', name);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onCreateUserQuery({\n name: name,\n description: description,\n }, {\n ...this.getCurrentQuery(),\n ...this._getMetadataForSavedQuery(provider)\n })\n this.queryEvents.dispatchEvent('onAfterUserQueryCreated', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async deleteUserQueries(queryIds: string[]): Promise<IDeletedUserQueriesResult> {\n this.queryEvents.dispatchEvent('onBeforeUserQueriesDeleted', queryIds);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onDeleteUserQueries(queryIds);\n this.queryEvents.dispatchEvent('onAfterUserQueriesDeleted', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async destroy() {\n this.queryEvents.clearEventListeners();\n }\n\n public async refresh() {\n const systemQueries = await this._strategy.onGetSystemQueries();\n const userQueries = await this._strategy.onGetUserQueries();\n if (systemQueries.length === 0) {\n throw new Error('At least one system query is required');\n }\n this._includePathColumn(systemQueries[0].columns);\n const allQueries = [...systemQueries, ...userQueries];\n this._systemQueries = systemQueries\n this._userQueries = userQueries;\n this._systemQueriesColumnsMap = new Map(systemQueries.flatMap(query => query.columns.map(col => [col.name, col])));\n\n const preferredQueryInAllQueries = allQueries.find(q => q.id === this._preferredQuery?.id);\n this._currentQuery = preferredQueryInAllQueries ?? userQueries[0] ?? systemQueries[0];\n //preferred query might have some required columns missing\n this._currentQuery = this._processQueries([{\n ...this._currentQuery,\n ...(preferredQueryInAllQueries ? this._preferredQuery : {}),\n }])[0];\n }\n\n private _processQueries(queries: ISavedQuery[]) {\n return queries.map(query => {\n this._includeRequiredColumns(query.columns);\n this._harmonizeColumns(query.columns);\n return {\n ...query,\n ...this._parseSavedQueryMetadata(query)\n }\n })\n }\n\n private _includeRequiredColumns(columns: IColumn[]) {\n const allQueries = [...this.getSystemQueries(), ...this.getUserQueries()];\n const allQueryColumns = [...new Map(allQueries.flatMap(query => query.columns.map(col => [col.name, col]))).values()];\n for (const requiredColumnName of REQUIRED_COLUMNS) {\n const mappedRequiredColumnName = this._nativeColumns[requiredColumnName as keyof INativeColumns];\n if (!columns.find(col => col.name === mappedRequiredColumnName)) {\n const columnFromQueries = allQueryColumns.find(col => col.name === mappedRequiredColumnName);\n if (!columnFromQueries) {\n throw new Error(`Required column ${mappedRequiredColumnName} is missing from both current query and all available queries`);\n }\n columns.push({\n ...columnFromQueries,\n isHidden: true\n });\n }\n }\n this._includePathColumn(columns);\n }\n\n private _harmonizeColumns(columns: IColumn[]) {\n for (const column of columns) {\n switch (column.name) {\n case this._nativeColumns.subject: {\n column.isHidden = false;\n break;\n }\n case this._nativeColumns.path: {\n column.metadata = {\n ...column.metadata,\n IsValidForUpdate: false\n }\n break;\n }\n }\n }\n }\n\n private _includePathColumn(columns: IColumn[]) {\n if (!columns.find(col => col.name === PATH_COLUMN_NAME)) {\n columns.push({\n name: PATH_COLUMN_NAME,\n dataType: DataTypes.Multiple,\n displayName: this._localizationService.getLocalizedString('path'),\n isVirtual: true,\n visualSizeFactor: 300,\n isHidden: true\n })\n }\n return columns;\n }\n\n private _getMetadataForSavedQuery(provider: ITaskDataProvider): ISavedQueryMetadata {\n return {\n sorting: provider.getSorting(),\n filtering: provider.getFiltering() ?? undefined,\n linking: provider.getLinking(),\n searchQuery: provider.getSearchQuery(),\n isFlatListEnabled: provider.isFlatListEnabled(),\n quickFindColumns: provider.getQuickFindColumns().map(col => col.name),\n columns: [\n ...provider.getColumns().map((col: any) => {\n const newCol = {\n name: col.name,\n isHidden: col.isHidden,\n dataType: col.dataType,\n order: col.order,\n visualSizeFactor: col.visualSizeFactor,\n metadata: {}\n }\n this._addPropToMetadataQueryCol(newCol, 'isVirtual', col.isVirtual);\n this._addPropToMetadataQueryCol(newCol, 'autoHeight', col.autoHeight);\n return newCol;\n })\n ]\n }\n }\n\n private _addPropToMetadataQueryCol(col: IFetchXmlDataProviderColumn, propName: keyof IColumn, propValue: any) {\n if (propValue != undefined) {\n (col as any)[propName] = propValue;\n }\n }\n\n private _isCustomColumnResolvable(name: string, customColumnsMap: Map<string, IColumn>): boolean {\n return !this._customColumnsDataProvider!.isCustomColumn(name) ||\n !!customColumnsMap.get(name);\n }\n\n\n private _parseSavedQueryMetadata(metadata: ISavedQueryMetadata): ISavedQueryMetadata {\n const parsed = metadata;\n\n // Enrich partial column definitions with full definitions from system queries\n let columns = parsed.columns.map(col => {\n const systemCol = this._systemQueriesColumnsMap.get(col.name);\n if (!systemCol && col.isVirtual) {\n throw new Error(`Virtual column ${col.name} is missing from system queries. Make sure all virtual columns are included in the system queries returned by the strategy's onGetSystemQueries method.`);\n }\n return systemCol ? { ...systemCol, ...col, metadata: { ...systemCol.metadata, ...col.metadata } } : col;\n });\n\n if (!this._customColumnsDataProvider) {\n return { ...parsed, columns };\n }\n\n const customColumnsMap = new Map(this._customColumnsDataProvider.getColumns().map(col => [col.name, col]));\n columns = columns.filter(col => this._isCustomColumnResolvable(col.name, customColumnsMap));\n columns = columns.map(col => {\n const customCol = customColumnsMap.get(col.name);\n return customCol ? { ...customCol, ...col, metadata: { ...customCol.metadata, ...col.metadata } } : col;\n });\n\n return {\n ...parsed,\n sorting: parsed.sorting?.filter(sort => this._isCustomColumnResolvable(sort.name, customColumnsMap)),\n columns: columns,\n filtering: parsed.filtering ? {\n ...parsed.filtering,\n conditions: parsed.filtering.conditions.filter(condition => this._isCustomColumnResolvable(condition.attributeName, customColumnsMap))\n } : undefined\n };\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SavedQueryDataProvider.js","sources":["../../../../../src/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.ts"],"sourcesContent":["import { DataTypes, EventEmitter, IColumn, IEventEmitter, IFetchXmlDataProviderColumn } from \"@talxis/client-libraries\";\nimport { ITaskDataProvider } from \"../task\";\nimport { ICustomColumnsDataProvider } from \"../custom-columns/CustomColumnsDataProvider\";\nimport { INativeColumns } from \"../../interfaces\";\nimport { ErrorHelper, ILocalizationService } from \"../../../../utils\";\nimport { ITaskGridLabels } from \"../../labels\";\n\n\nexport interface ICreateUserQueryParams {\n name: string;\n provider: ITaskDataProvider;\n description?: string;\n}\n\nexport interface IUpdateUserQueryParams {\n queryId: string;\n queryMetadata: ISavedQueryMetadata;\n}\n\nexport interface ISavedQueryDataProviderEvents {\n onBeforeUserQueriesDeleted: (queryIds: string[]) => void;\n onAfterUserQueriesDeleted: (result: IDeletedUserQueriesResult) => void;\n onBeforeUserQueryUpdated: (queryId: string) => void;\n onAfterUserQueryUpdated: (result: string | null) => void;\n onBeforeUserQueryCreated: (queryName: string) => void;\n onAfterUserQueryCreated: (result: string | null) => void;\n onError: (error: any, message: string) => void;\n}\n\nexport type IDeletedUserQueriesResult = { success: true; deletedQueryIds: string[] } | { success: false; deletedQueryIds: string[]; errors: { queryId: string; error: any }[] };\n\n\nexport interface ISavedQuery extends ISavedQueryMetadata {\n id: string;\n name: string;\n}\n\nexport interface ISavedQueryMetadata {\n columns: IColumn[]\n sorting?: ComponentFramework.PropertyHelper.DataSetApi.SortStatus[];\n filtering?: ComponentFramework.PropertyHelper.DataSetApi.FilterExpression;\n linking?: ComponentFramework.PropertyHelper.DataSetApi.LinkEntityExposedExpression[];\n isFlatListEnabled?: boolean;\n searchQuery?: string | undefined;\n quickFindColumns?: string[];\n}\n\nexport const PATH_COLUMN_NAME = 'path__virtual';\nconst REQUIRED_COLUMNS = ['subject', 'parentId', 'stackRank', 'stateCode'];\n\n/** Strategy interface for loading and persisting system and user-defined saved views (queries). */\nexport interface ISavedQueryStrategy {\n /** Returns the built-in (non-deletable) views. At least one system query must be returned. */\n onGetSystemQueries: () => Promise<ISavedQuery[]>;\n /** Returns views saved by the current user. */\n onGetUserQueries: () => Promise<ISavedQuery[]>;\n /** Deletes the specified user views. Returns a per-query success/failure result. */\n onDeleteUserQueries: (queryIds: string[]) => Promise<IDeletedUserQueriesResult>;\n /** @returns The updated query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onUpdateUserQuery: (currentQuery: ISavedQuery) => Promise<string | null>;\n /** @returns The created query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateUserQuery: (newQuery: { name: string; description?: string }, currentQuery: ISavedQuery) => Promise<string | null>;\n}\n\n/** Manages system and user-defined saved views and exposes view lifecycle operations. */\nexport interface ISavedQueryDataProvider {\n /** EventEmitter for saved-query lifecycle events (create, update, delete, errors). */\n queryEvents: IEventEmitter<ISavedQueryDataProviderEvents>;\n /** Returns the full list of non-deletable system views. */\n getSystemQueries: () => ISavedQuery[];\n /** Returns the full list of user-created views. */\n getUserQueries: () => ISavedQuery[];\n /** Returns the currently active saved query. Throws if `refresh` has not been called yet. */\n getCurrentQuery: () => ISavedQuery;\n /** Looks up a query by id across system and user queries. Throws if not found. */\n getSavedQuery(id: string): ISavedQuery;\n /** @returns The created query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createUserQuery: (params: ICreateUserQueryParams) => Promise<string | null>;\n /** Returns `true` when the given query id belongs to a user view (as opposed to a system view). */\n isUserQuery: (queryId: string) => boolean;\n /** @returns The updated query id, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n updateUserQuery: (provider: ITaskDataProvider) => Promise<string | null>;\n /** Deletes the specified user views. Returns a per-query success/failure result. */\n deleteUserQueries: (queryIds: string[]) => Promise<IDeletedUserQueriesResult>;\n /** Fetches system and user queries from the strategy and sets the initial active query. */\n refresh: () => Promise<void>;\n\n /** Disposes event listeners and releases all resources held by the provider. */\n destroy: () => void;\n}\n\ninterface ISavedQueryDataProviderParameters {\n nativeColumns: INativeColumns;\n localizationService: ILocalizationService<ITaskGridLabels>;\n customColumnsDataProvider?: ICustomColumnsDataProvider;\n preferredQuery?: Partial<ISavedQuery> & { id: string };\n}\n\nexport class SavedQueryDataProvider implements ISavedQueryDataProvider {\n private _strategy: ISavedQueryStrategy\n private _systemQueries: ISavedQuery[] = [];\n private _currentQuery?: ISavedQuery;\n private _userQueries: ISavedQuery[] = [];\n private _customColumnsDataProvider?: ICustomColumnsDataProvider;\n private _nativeColumns: INativeColumns;\n private _localizationService: ILocalizationService<ITaskGridLabels>;\n private _systemQueriesColumnsMap: Map<string, IColumn> = new Map();\n private _preferredQuery?: Partial<ISavedQuery> & { id: string };\n public queryEvents = new EventEmitter<ISavedQueryDataProviderEvents>();\n\n constructor(strategy: ISavedQueryStrategy, parameters: ISavedQueryDataProviderParameters) {\n this._strategy = strategy;\n this._preferredQuery = parameters.preferredQuery;\n this._nativeColumns = parameters.nativeColumns;\n this._customColumnsDataProvider = parameters.customColumnsDataProvider;\n this._localizationService = parameters.localizationService;\n }\n\n public getSystemQueries(): ISavedQuery[] {\n return this._systemQueries;\n }\n\n public getUserQueries(): ISavedQuery[] {\n return this._userQueries;\n }\n\n public getCurrentQuery(): ISavedQuery {\n if (!this._currentQuery) {\n throw new Error('Current query is not set. Make sure to call refresh() and wait for it to complete before accessing the current query.');\n }\n return this._currentQuery;\n }\n\n public isUserQuery(queryId: string): boolean {\n return this._userQueries.some(q => q.id === queryId);\n }\n\n public getSavedQuery(id: string): ISavedQuery {\n const query = [...this._systemQueries, ...this._userQueries].find(q => q.id === id);\n if (!query) {\n throw new Error(`Query with id ${id} not found. Make sure to call refresh() and wait for it to complete before accessing the saved query.`);\n }\n return query;\n }\n\n public async updateUserQuery(provider: ITaskDataProvider): Promise<string | null> {\n this.queryEvents.dispatchEvent('onBeforeUserQueryUpdated', this.getCurrentQuery().id);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onUpdateUserQuery({\n ...this.getCurrentQuery(),\n ...this._getMetadataForSavedQuery(provider)\n\n });\n this.queryEvents.dispatchEvent('onAfterUserQueryUpdated', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createUserQuery(params: ICreateUserQueryParams): Promise<string | null> {\n const { name, description, provider } = params;\n this.queryEvents.dispatchEvent('onBeforeUserQueryCreated', name);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onCreateUserQuery({\n name: name,\n description: description,\n }, {\n ...this.getCurrentQuery(),\n ...this._getMetadataForSavedQuery(provider)\n })\n this.queryEvents.dispatchEvent('onAfterUserQueryCreated', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async deleteUserQueries(queryIds: string[]): Promise<IDeletedUserQueriesResult> {\n this.queryEvents.dispatchEvent('onBeforeUserQueriesDeleted', queryIds);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onDeleteUserQueries(queryIds);\n this.queryEvents.dispatchEvent('onAfterUserQueriesDeleted', result);\n return result;\n },\n onError: (error, message) => this.queryEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async destroy() {\n this.queryEvents.clearEventListeners();\n }\n\n public async refresh() {\n const systemQueries = await this._strategy.onGetSystemQueries();\n const userQueries = await this._strategy.onGetUserQueries();\n if (systemQueries.length === 0) {\n throw new Error('At least one system query is required');\n }\n this._includePathColumn(systemQueries[0].columns);\n const allQueries = [...systemQueries, ...userQueries];\n this._systemQueries = systemQueries\n this._userQueries = userQueries;\n\n const systemQueryColumnEntries = systemQueries.flatMap(\n query => query.columns.map(col => [col.name, col] as [string, IColumn])\n );\n const customColumnEntries = this._customColumnsDataProvider\n ? this._customColumnsDataProvider.getColumns().map(col => [col.name, col] as [string, IColumn])\n : [];\n\n this._systemQueriesColumnsMap = new Map<string, IColumn>([\n ...systemQueryColumnEntries,\n ...customColumnEntries\n ]);\n\n const preferredQueryInAllQueries = allQueries.find(q => q.id === this._preferredQuery?.id);\n this._currentQuery = preferredQueryInAllQueries ?? userQueries[0] ?? systemQueries[0];\n //preferred query might have some required columns missing\n this._currentQuery = this._processQueries([{\n ...this._currentQuery,\n ...(preferredQueryInAllQueries ? this._preferredQuery : {}),\n }])[0];\n }\n\n private _processQueries(queries: ISavedQuery[]) {\n return queries.map(query => {\n this._includeRequiredColumns(query.columns);\n this._harmonizeColumns(query.columns);\n return {\n ...query,\n ...this._parseSavedQueryMetadata(query)\n }\n })\n }\n\n private _includeRequiredColumns(columns: IColumn[]) {\n const allQueries = [...this.getSystemQueries(), ...this.getUserQueries()];\n const allQueryColumns = [...new Map(allQueries.flatMap(query => query.columns.map(col => [col.name, col]))).values()];\n for (const requiredColumnName of REQUIRED_COLUMNS) {\n const mappedRequiredColumnName = this._nativeColumns[requiredColumnName as keyof INativeColumns];\n if (!columns.find(col => col.name === mappedRequiredColumnName)) {\n const columnFromQueries = allQueryColumns.find(col => col.name === mappedRequiredColumnName);\n if (!columnFromQueries) {\n throw new Error(`Required column ${mappedRequiredColumnName} is missing from both current query and all available queries`);\n }\n columns.push({\n ...columnFromQueries,\n isHidden: true\n });\n }\n }\n this._includePathColumn(columns);\n }\n\n private _harmonizeColumns(columns: IColumn[]) {\n for (const column of columns) {\n switch (column.name) {\n case this._nativeColumns.subject: {\n column.isHidden = false;\n break;\n }\n case this._nativeColumns.path: {\n column.metadata = {\n ...column.metadata,\n IsValidForUpdate: false\n }\n break;\n }\n }\n }\n }\n\n private _includePathColumn(columns: IColumn[]) {\n if (!columns.find(col => col.name === PATH_COLUMN_NAME)) {\n columns.push({\n name: PATH_COLUMN_NAME,\n dataType: DataTypes.Multiple,\n displayName: this._localizationService.getLocalizedString('path'),\n isVirtual: true,\n visualSizeFactor: 300,\n isHidden: true\n })\n }\n return columns;\n }\n\n private _getMetadataForSavedQuery(provider: ITaskDataProvider): ISavedQueryMetadata {\n return {\n sorting: provider.getSorting(),\n filtering: provider.getFiltering() ?? undefined,\n linking: provider.getLinking(),\n searchQuery: provider.getSearchQuery(),\n isFlatListEnabled: provider.isFlatListEnabled(),\n quickFindColumns: provider.getQuickFindColumns().map(col => col.name),\n columns: [\n ...provider.getColumns().map((col: any) => {\n const newCol = {\n name: col.name,\n isHidden: col.isHidden,\n dataType: col.dataType,\n order: col.order,\n visualSizeFactor: col.visualSizeFactor,\n metadata: {}\n }\n this._addPropToMetadataQueryCol(newCol, 'isVirtual', col.isVirtual);\n this._addPropToMetadataQueryCol(newCol, 'autoHeight', col.autoHeight);\n return newCol;\n })\n ]\n }\n }\n\n private _addPropToMetadataQueryCol(col: IFetchXmlDataProviderColumn, propName: keyof IColumn, propValue: any) {\n if (propValue != undefined) {\n (col as any)[propName] = propValue;\n }\n }\n\n\n private _parseSavedQueryMetadata(metadata: ISavedQueryMetadata): ISavedQueryMetadata {\n const parsed = metadata;\n\n // Enrich partial column definitions with full definitions from system queries\n let columns = parsed.columns.map(col => {\n const systemCol = this._systemQueriesColumnsMap.get(col.name);\n return systemCol ? { ...systemCol, ...col, metadata: { ...systemCol.metadata, ...col.metadata } } : col;\n });\n\n return { ...parsed, columns };\n }\n}"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { ILocalizationService } from "../../../../utils";
5
5
  import { ITaskGridLabels } from "../../labels";
6
6
  import { INativeColumns } from "../../interfaces";
7
7
  import { ISavedQueryDataProvider } from "../saved-query";
8
+ import { ICustomColumnsDataProvider } from "../custom-columns";
8
9
  export interface IFailedRecord {
9
10
  id: string;
10
11
  error: any;
@@ -17,7 +18,7 @@ export type IDeleteTasksResult = {
17
18
  deletedTaskIds: string[];
18
19
  errors: IFailedRecord[];
19
20
  };
20
- export type IEditTasksResult = {
21
+ export type IOpenDatasetItemsResult = {
21
22
  success: true;
22
23
  updatedRecords: IRawRecord[];
23
24
  } | {
@@ -30,6 +31,7 @@ export interface ITaskDataProviderParameters {
30
31
  localizationService: ILocalizationService<ITaskGridLabels>;
31
32
  strategy: ITaskDataProviderStrategy;
32
33
  savedQueryDataProvider: ISavedQueryDataProvider;
34
+ customColumnsDataProvider?: ICustomColumnsDataProvider;
33
35
  onIsFlatListEnabled: () => boolean;
34
36
  }
35
37
  /** Strategy interface that handles all data access and mutation operations for tasks. */
@@ -48,8 +50,6 @@ export interface ITaskDataProviderStrategy {
48
50
  onGetAvailableColumns: (options?: IAvailableColumnOptions) => Promise<IColumn[]>;
49
51
  /** Returns linked-entity columns that can be used for filtering and sorting. */
50
52
  onGetAvailableRelatedColumns: () => Promise<IAvailableRelatedColumn[]>;
51
- /** Returns the attribute names that are searched when the user types in the quick-find input. */
52
- onGetQuickFindColumns: () => string[];
53
53
  /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */
54
54
  onCreateTask(parentTaskId?: string): Promise<IRawRecord | null>;
55
55
  /**
@@ -63,21 +63,16 @@ export interface ITaskDataProviderStrategy {
63
63
  /** @returns The created task raw records, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */
64
64
  onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null>;
65
65
  /**
66
- * @returns Result indicating which tasks were updated and which failed, or `null` if the operation was cancelled by the user.
67
- * `success: true` means all tasks were updated. `success: false` means some or all failed.
68
- * Throws on unexpected failure.
66
+ * Opens one or more dataset items. When `isTaskEntity` is `true` the references point to task records;
67
+ * when `false` they point to a related entity (e.g. a lookup target).
69
68
  */
70
- onEditTasks(taskIds: string[]): Promise<IEditTasksResult | null>;
69
+ onOpenDatasetItems(entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean): Promise<IOpenDatasetItemsResult | null>;
71
70
  /** Moves a task to a new position relative to another task. Returns the updated raw records, or `null` on cancellation. */
72
71
  onMoveTask(movingTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child'): Promise<IRawRecord[] | null>;
73
72
  /** Persists inline cell edits for the given record. */
74
73
  onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult>;
75
74
  /** Returns whether the given task record is currently active (non-completed). */
76
75
  onIsRecordActive(recordId: string): boolean;
77
- /** Opens the record detail view. Called when a user clicks a non-subject cell. */
78
- onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: {
79
- columnName?: string;
80
- }): Promise<void>;
81
76
  /** When provided, the task tree is scoped to the subtree of the returned task id. */
82
77
  onGetRootTaskId?: () => string | undefined;
83
78
  }
@@ -90,12 +85,10 @@ export interface ITaskDataProviderEventListener {
90
85
  onAfterTasksCreated: (records: IRawRecord[] | null, parentId?: string) => void;
91
86
  onBeforeTaskMoved: () => void;
92
87
  onAfterTaskMoved: (movingFromTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child') => void;
93
- onBeforeTasksEdited: (taskIds: string[]) => void;
94
88
  onTaskDataUpdated: (data: IRawRecord[]) => void;
95
- onAfterTasksEdited: (result: IEditTasksResult | null) => void;
96
89
  onRecordTreeUpdated: (updatedParentIds: (string | undefined)[]) => void;
97
- onBeforeDatasetItemOpened: (entityReference: ComponentFramework.EntityReference) => void;
98
- onAfterDatasetItemOpened: (entityReference: ComponentFramework.EntityReference) => void;
90
+ onBeforeDatasetItemsOpened: (entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean) => void;
91
+ onAfterDatasetItemsOpened: (entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean, result: IOpenDatasetItemsResult | null) => void;
99
92
  onError: (error: any, message: string) => void;
100
93
  }
101
94
  /** Extended data provider interface for task records. Adds task-specific operations on top of `IDataProvider`. */
@@ -115,11 +108,10 @@ export interface ITaskDataProvider extends IDataProvider {
115
108
  /** Applies updated raw record data in-place and rebuilds the tree if hierarchy changed. */
116
109
  updateTaskData(newData: IRawRecord[]): void;
117
110
  /**
118
- * @returns Result indicating which tasks were updated and which failed, or `null` if the operation was cancelled by the user.
119
- * `success: true` means all tasks were updated. `success: false` means some or all failed — `updatedRecords` still contains the records that succeeded.
120
- * Throws on unexpected failure.
111
+ * Opens one or more task records by id. Builds entity references from the current records map
112
+ * and delegates to `strategy.onOpenDatasetItems` with `isTaskEntity: true`.
121
113
  */
122
- editTasks(taskIds: string[]): Promise<IEditTasksResult | null>;
114
+ openTaskItems(taskIds: string[]): Promise<IOpenDatasetItemsResult | null>;
123
115
  /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */
124
116
  createTask(parentTaskId?: string): Promise<IRawRecord | null>;
125
117
  /**
@@ -147,6 +139,7 @@ export declare class TaskDataProvider extends MemoryDataProvider implements ITas
147
139
  private _taskTree;
148
140
  private _strategy;
149
141
  private _savedQueryDataProvider;
142
+ private _customColumnsDataProvider?;
150
143
  private _onFlatListEnabled;
151
144
  readonly taskEvents: EventEmitter<ITaskDataProviderEventListener>;
152
145
  constructor(parameters: ITaskDataProviderParameters);
@@ -175,7 +168,7 @@ export declare class TaskDataProvider extends MemoryDataProvider implements ITas
175
168
  getSorting(): ComponentFramework.PropertyHelper.DataSetApi.SortStatus[];
176
169
  getSortedRecordIds(): string[];
177
170
  deleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;
178
- editTasks(taskIds: string[]): Promise<IEditTasksResult | null>;
171
+ openTaskItems(taskIds: string[]): Promise<IOpenDatasetItemsResult | null>;
179
172
  isRecordActive(recordId: string): boolean;
180
173
  destroy(): Promise<void>;
181
174
  getQuickFindColumns(): IColumn[];
@@ -17,6 +17,7 @@ class TaskDataProvider extends MemoryDataProvider {
17
17
  });
18
18
  this._localizationService = parameters.localizationService;
19
19
  this._strategy = parameters.strategy;
20
+ this._customColumnsDataProvider = parameters.customColumnsDataProvider;
20
21
  this._onFlatListEnabled = parameters.onIsFlatListEnabled;
21
22
  }
22
23
  getStrategy() {
@@ -38,7 +39,10 @@ class TaskDataProvider extends MemoryDataProvider {
38
39
  return this._strategy.onGetRawRecords(ids);
39
40
  }
40
41
  async onGetAvailableColumns(options) {
41
- return this._getColumnsWithUnusedVirtualColumns(await this._strategy.onGetAvailableColumns(options));
42
+ return [
43
+ ...this._getColumnsWithUnusedVirtualColumns(await this._strategy.onGetAvailableColumns(options)),
44
+ ...(this._customColumnsDataProvider ? this._customColumnsDataProvider.getColumns() : [])
45
+ ];
42
46
  }
43
47
  _getColumnsWithUnusedVirtualColumns(columns) {
44
48
  columns = [...columns];
@@ -150,23 +154,17 @@ class TaskDataProvider extends MemoryDataProvider {
150
154
  });
151
155
  }
152
156
  async onOpenDatasetItem(entityReference, context) {
153
- //!context => double click on row, open edit form
154
- //context.columnName === subject => click on subject cell, open edit form
155
- const shouldInvokeEdit = !context || context?.columnName === this.getNativeColumns().subject;
156
- if (shouldInvokeEdit) {
157
- this.editTasks([entityReference.id.guid]);
158
- }
159
- //lookup opening
160
- else {
161
- this.taskEvents.dispatchEvent('onBeforeDatasetItemOpened', entityReference);
162
- ErrorHelper.executeWithErrorHandling({
163
- operation: async () => {
164
- await this._strategy.onOpenDatasetItem(entityReference, context);
165
- this.taskEvents.dispatchEvent('onAfterDatasetItemOpened', entityReference);
166
- },
167
- onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)
168
- });
169
- }
157
+ const isTaskEntity = !context || context?.columnName === this.getNativeColumns().subject;
158
+ this.taskEvents.dispatchEvent('onBeforeDatasetItemsOpened', [entityReference], isTaskEntity);
159
+ ErrorHelper.executeWithErrorHandling({
160
+ operation: async () => {
161
+ const result = await this._strategy.onOpenDatasetItems([entityReference], isTaskEntity);
162
+ if (result)
163
+ this.updateTaskData(result.updatedRecords);
164
+ this.taskEvents.dispatchEvent('onAfterDatasetItemsOpened', [entityReference], isTaskEntity, result);
165
+ },
166
+ onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)
167
+ });
170
168
  }
171
169
  getSorting() {
172
170
  const sorting = super.getSorting();
@@ -201,14 +199,22 @@ class TaskDataProvider extends MemoryDataProvider {
201
199
  onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)
202
200
  });
203
201
  }
204
- async editTasks(taskIds) {
202
+ async openTaskItems(taskIds) {
203
+ const entityReferences = taskIds.map(id => {
204
+ const record = this.getRecordsMap()[id];
205
+ return {
206
+ id: { guid: id },
207
+ etn: this.getEntityName(),
208
+ name: record?.getFormattedValue(this.getNativeColumns().subject) ?? undefined
209
+ };
210
+ });
205
211
  return ErrorHelper.executeWithErrorHandling({
206
212
  operation: async () => {
207
- this.taskEvents.dispatchEvent('onBeforeTasksEdited', taskIds);
208
- const result = await this._strategy.onEditTasks(taskIds);
213
+ this.taskEvents.dispatchEvent('onBeforeDatasetItemsOpened', entityReferences, true);
214
+ const result = await this._strategy.onOpenDatasetItems(entityReferences, true);
209
215
  if (result !== null)
210
216
  this.updateTaskData(result.updatedRecords);
211
- this.taskEvents.dispatchEvent('onAfterTasksEdited', result);
217
+ this.taskEvents.dispatchEvent('onAfterDatasetItemsOpened', entityReferences, true, result);
212
218
  return result;
213
219
  },
214
220
  onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)
@@ -263,6 +269,8 @@ class TaskDataProvider extends MemoryDataProvider {
263
269
  async refresh() {
264
270
  if (!this._hasDataBeenLoaded) {
265
271
  await this._loadDataFromStrategy();
272
+ //we need to artificially wait in order for any sync outside stuff to finish (like loading grid to register events)
273
+ await new Promise(resolve => setTimeout(resolve, 0));
266
274
  this._hasDataBeenLoaded = true;
267
275
  }
268
276
  await super.refresh();
@@ -1 +1 @@
1
- {"version":3,"file":"TaskDataProvider.js","sources":["../../../../../src/components/TaskGrid/providers/task/TaskDataProvider.ts"],"sourcesContent":["import { EventEmitter, GetDataEvent, IAvailableColumnOptions, IAvailableRelatedColumn, IColumn, ICommand, IDataProvider, IDataProviderEventListeners, IEventBubbleOptions, IEventEmitter, IRawRecord, IRecord, IRecordSaveOperationResult, IRetrievedData, IRetrieveRecordCommandOptions, MemoryDataProvider, Operators, Type } from \"@talxis/client-libraries\";\nimport { IRecordTree, RecordTree } from \"./record-tree/RecordTree\";\nimport { ErrorHelper } from \"../../../../utils/error-handling\";\nimport { ILocalizationService } from \"../../../../utils\";\nimport { ITaskGridLabels } from \"../../labels\";\nimport { INativeColumns } from \"../../interfaces\";\nimport { ISavedQueryDataProvider} from \"../saved-query\";\n\nexport interface IFailedRecord {\n id: string;\n error: any;\n}\n\nexport type IDeleteTasksResult =\n | { success: true; deletedTaskIds: string[] }\n | { success: false; deletedTaskIds: string[]; errors: IFailedRecord[] };\n\nexport type IEditTasksResult =\n | { success: true; updatedRecords: IRawRecord[] }\n | { success: false; updatedRecords: IRawRecord[]; errors: IFailedRecord[] };\n\n\nexport interface ITaskDataProviderParameters {\n nativeColumns: INativeColumns;\n localizationService: ILocalizationService<ITaskGridLabels>;\n strategy: ITaskDataProviderStrategy;\n savedQueryDataProvider: ISavedQueryDataProvider;\n onIsFlatListEnabled: () => boolean;\n}\n\n/** Strategy interface that handles all data access and mutation operations for tasks. */\nexport interface ITaskDataProviderStrategy {\n /**\n * Called when the provider needs to retrieve latest data for specific tasks to synchronize the grid with the server.\n */\n onGetRawRecords: (ids: string[]) => Promise<IRawRecord[]>;\n /** Called once on first load. Must return the initial columns, raw task records, and entity metadata. */\n onInitialize: (provider: ITaskDataProvider) => Promise<{ columns: IColumn[]; rawData: IRawRecord[]; metadata: any }>\n /** Returns all columns available for display in the grid (both native and custom). */\n onGetAvailableColumns: (options?: IAvailableColumnOptions) => Promise<IColumn[]>;\n /** Returns linked-entity columns that can be used for filtering and sorting. */\n onGetAvailableRelatedColumns: () => Promise<IAvailableRelatedColumn[]>;\n /** Returns the attribute names that are searched when the user types in the quick-find input. */\n onGetQuickFindColumns: () => string[];\n /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTask(parentTaskId?: string): Promise<IRawRecord | null>;\n /**\n * @returns Result indicating which tasks were deleted and which failed.\n * `success: true` means all tasks were deleted. `success: false` means some or all failed.\n * Throws on unexpected failure.\n */\n onDeleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;\n /** @returns The created template raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTemplateFromTask(taskId: string): Promise<IRawRecord | null>;\n /** @returns The created task raw records, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null>;\n /**\n * @returns Result indicating which tasks were updated and which failed, or `null` if the operation was cancelled by the user.\n * `success: true` means all tasks were updated. `success: false` means some or all failed.\n * Throws on unexpected failure.\n */\n onEditTasks(taskIds: string[]): Promise<IEditTasksResult | null>;\n /** Moves a task to a new position relative to another task. Returns the updated raw records, or `null` on cancellation. */\n onMoveTask(movingTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child'): Promise<IRawRecord[] | null>;\n /** Persists inline cell edits for the given record. */\n onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult>;\n /** Returns whether the given task record is currently active (non-completed). */\n onIsRecordActive(recordId: string): boolean;\n /** Opens the record detail view. Called when a user clicks a non-subject cell. */\n onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: { columnName?: string }): Promise<void>;\n /** When provided, the task tree is scoped to the subtree of the returned task id. */\n onGetRootTaskId?: () => string | undefined\n}\n\nexport interface ITaskDataProviderEventListener {\n onBeforeTemplateCreated: (taskId: string) => void;\n onAfterTemplateCreated: (record: IRawRecord | null) => void;\n onBeforeTasksDeleted: (taskIds: string[]) => void;\n onAfterTasksDeleted: (result: IDeleteTasksResult | null) => void;\n onBeforeTasksCreated: (parentId?: string) => void;\n onAfterTasksCreated: (records: IRawRecord[] | null, parentId?: string) => void;\n onBeforeTaskMoved: () => void;\n onAfterTaskMoved: (movingFromTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child') => void;\n onBeforeTasksEdited: (taskIds: string[]) => void;\n onTaskDataUpdated: (data: IRawRecord[]) => void;\n onAfterTasksEdited: (result: IEditTasksResult | null) => void;\n onRecordTreeUpdated: (updatedParentIds: (string | undefined)[]) => void;\n onBeforeDatasetItemOpened: (entityReference: ComponentFramework.EntityReference) => void;\n onAfterDatasetItemOpened: (entityReference: ComponentFramework.EntityReference) => void;\n onError: (error: any, message: string) => void;\n}\n\n/** Extended data provider interface for task records. Adds task-specific operations on top of `IDataProvider`. */\nexport interface ITaskDataProvider extends IDataProvider {\n /** EventEmitter for task lifecycle events (create, delete, edit, move, template, error). */\n taskEvents: IEventEmitter<ITaskDataProviderEventListener>;\n /** Returns the native column name mapping. */\n getNativeColumns(): INativeColumns;\n /** Returns all records regardless of current tree filtering or paging. */\n getAllRecords(): IRecord[];\n /** Returns the underlying strategy cast to the given type. */\n getStrategy<T extends ITaskDataProviderStrategy>(): T;\n /** Fetches raw task records by id via the strategy. Pass an empty array to fetch all. */\n fetchRawRecords(ids: string[]): Promise<IRawRecord[]>;\n /** Returns the current hierarchical record tree built from loaded task data. */\n getRecordTree(): IRecordTree;\n /** Applies updated raw record data in-place and rebuilds the tree if hierarchy changed. */\n updateTaskData(newData: IRawRecord[]): void;\n /**\n * @returns Result indicating which tasks were updated and which failed, or `null` if the operation was cancelled by the user.\n * `success: true` means all tasks were updated. `success: false` means some or all failed — `updatedRecords` still contains the records that succeeded.\n * Throws on unexpected failure.\n */\n editTasks(taskIds: string[]): Promise<IEditTasksResult | null>;\n /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTask(parentTaskId?: string): Promise<IRawRecord | null>;\n /**\n * @returns Result indicating which tasks were deleted and which failed.\n * `success: true` means all tasks were deleted. `success: false` means some or all failed — `deletedTaskIds` still contains the ids that succeeded.\n * Throws on unexpected failure before any deletes could be attempted.\n */\n deleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;\n /** @returns The created template raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTemplateFromTask(taskId: string): Promise<IRawRecord | null>;\n /** @returns The created task raw records, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTasksFromTemplate(templateId: string, parentId?: string): Promise<IRawRecord[] | null>;\n /** Returns `true` when the grid is displaying a flat list instead of a tree hierarchy. */\n isFlatListEnabled(): boolean;\n /** Returns `true` when task creation is allowed (from `ITaskDataProviderStrategy.onIsTaskAddingEnabled`). */\n /** Returns the root task id when the tree is scoped to a subtree, or `null` for a full tree. */\n getRootTaskId: () => string | null;\n /** Moves a task to a position relative to another task. Returns the updated raw records, or `null` on cancellation. */\n moveTask(movingTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child'): Promise<IRawRecord[] | null>;\n}\n\nexport class TaskDataProvider extends MemoryDataProvider implements ITaskDataProvider {\n private _nativeColumns: INativeColumns;\n private _localizationService: ILocalizationService<ITaskGridLabels>;\n private _hasDataBeenLoaded: boolean = false;\n private _taskTree: IRecordTree;\n private _strategy: ITaskDataProviderStrategy;\n private _savedQueryDataProvider: ISavedQueryDataProvider;\n private _onFlatListEnabled: () => boolean;\n public readonly taskEvents: EventEmitter<ITaskDataProviderEventListener> = new EventEmitter<ITaskDataProviderEventListener>();\n\n constructor(parameters: ITaskDataProviderParameters) {\n super({\n dataSource: [],\n metadata: { PrimaryIdAttribute: 'id' }\n });\n this._savedQueryDataProvider = parameters.savedQueryDataProvider;\n this._nativeColumns = parameters.nativeColumns;\n this._taskTree = new RecordTree({\n taskDataProvider: this\n })\n this._localizationService = parameters.localizationService;\n this._strategy = parameters.strategy;\n this._onFlatListEnabled = parameters.onIsFlatListEnabled;\n }\n\n public getStrategy<T extends ITaskDataProviderStrategy>(): T {\n return this._strategy as T;\n }\n\n public getRootTaskId(): string | null {\n return this._strategy.onGetRootTaskId?.() ?? null;\n }\n\n public getRecordTree(): IRecordTree {\n return this._taskTree;\n }\n\n public isFlatListEnabled(): boolean {\n return this._onFlatListEnabled();\n }\n\n public getNativeColumns(): INativeColumns {\n return this._nativeColumns;\n }\n\n public async fetchRawRecords(ids: string[]) {\n return this._strategy.onGetRawRecords(ids);\n }\n\n public async onGetAvailableColumns(options?: { entityName?: string }): Promise<IColumn[]> {\n return this._getColumnsWithUnusedVirtualColumns(await this._strategy.onGetAvailableColumns(options));\n }\n\n private _getColumnsWithUnusedVirtualColumns(columns: IColumn[]): IColumn[] {\n columns = [...columns];\n const columnsMap = new Map(columns.map(col => [col.name, col]));\n const virtualColumns = new Map(this._savedQueryDataProvider.getSystemQueries().flatMap(query => query.columns).filter(column => column.isVirtual).map(col => [col.name, col]));\n for (const virtualColumn of [...virtualColumns.values()]) {\n if (!columnsMap.has(virtualColumn.name)) {\n columns.push({\n ...virtualColumn,\n isHidden: false\n });\n }\n }\n return columns;\n }\n\n public onGetAvailableRelatedColumns(): Promise<IAvailableRelatedColumn[]> {\n return this._strategy.onGetAvailableRelatedColumns();\n }\n\n public async retrieveRecordCommand(options?: IRetrieveRecordCommandOptions): Promise<ICommand[]> {\n return [];\n }\n\n public onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult> {\n return this._strategy.onRecordSave(record);\n }\n\n public updateTaskData(newData: IRawRecord[]) {\n const affectedParentIds: (string | undefined)[] = [];\n let recordTreeChanged = false;\n\n for (const updatedData of newData) {\n const recordId = updatedData[this.getMetadata().PrimaryIdAttribute];\n if (!recordId) {\n throw new Error(`Updated data is missing record id. Data: ${JSON.stringify(updatedData)}`);\n }\n const record = this.getRecordsMap()[recordId];\n const originalParentId = record.getValue(this.getNativeColumns().parentId)?.[0]?.id?.guid;\n const originalStackRank = record.getValue(this.getNativeColumns().stackRank);\n record.setRawData(updatedData);\n const newParentId = record.getValue(this.getNativeColumns().parentId)?.[0]?.id?.guid;\n const newStackRank = record.getValue(this.getNativeColumns().stackRank);\n if (originalParentId !== newParentId) {\n recordTreeChanged = true;\n affectedParentIds.push(recordId, originalParentId, newParentId);\n } else if (originalStackRank !== newStackRank) {\n recordTreeChanged = true;\n }\n }\n if (recordTreeChanged) {\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', affectedParentIds);\n }\n this.taskEvents.dispatchEvent('onTaskDataUpdated', newData);\n }\n\n\n public getGroupedRecordDataProvider(groupedRecordId: string): IDataProvider | null {\n const provider = new MemoryDataProvider({\n dataSource: [],\n metadata: { PrimaryIdAttribute: 'id' }\n })\n provider.getErrorMessage = () => this.getErrorMessage();\n return provider;\n }\n\n public async moveTask(movingFromTaskId: string, movingToTaskId: string, position: \"above\" | \"below\" | \"child\"): Promise<IRawRecord[] | null> {\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n this.taskEvents.dispatchEvent('onBeforeTaskMoved');\n const result = await this._strategy.onMoveTask(movingFromTaskId, movingToTaskId, position);\n if (result !== null) this.updateTaskData(result);\n this.taskEvents.dispatchEvent('onAfterTaskMoved', movingFromTaskId, movingToTaskId, position);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createTask(parentId?: string): Promise<IRawRecord | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksCreated', parentId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecord = await this._strategy.onCreateTask(parentId);\n if (rawRecord) this._createTasks([rawRecord], parentId);\n this.taskEvents.dispatchEvent('onAfterTasksCreated', rawRecord ? [rawRecord] : null, parentId);\n return rawRecord;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public async createTasksFromTemplate(templateId: string, parentId?: string): Promise<IRawRecord[] | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksCreated', parentId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecords = await this._strategy.onCreateTasksFromTemplate(templateId, parentId);\n if (rawRecords) this._createTasks(rawRecords, parentId);\n this.taskEvents.dispatchEvent('onAfterTasksCreated', rawRecords, parentId);\n return rawRecords;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createTemplateFromTask(taskId: string): Promise<IRawRecord | null> {\n this.taskEvents.dispatchEvent('onBeforeTemplateCreated', taskId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecord = await this._strategy.onCreateTemplateFromTask(taskId);\n this.taskEvents.dispatchEvent('onAfterTemplateCreated', rawRecord);\n return rawRecord;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public async onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: { columnName?: string }): Promise<void> {\n //!context => double click on row, open edit form\n //context.columnName === subject => click on subject cell, open edit form\n const shouldInvokeEdit = !context || context?.columnName === this.getNativeColumns().subject;\n if(shouldInvokeEdit) {\n this.editTasks([entityReference.id.guid]);\n }\n //lookup opening\n else {\n this.taskEvents.dispatchEvent('onBeforeDatasetItemOpened', entityReference);\n ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n await this._strategy.onOpenDatasetItem(entityReference, context);\n this.taskEvents.dispatchEvent('onAfterDatasetItemOpened', entityReference);\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n }\n\n public getSorting(): ComponentFramework.PropertyHelper.DataSetApi.SortStatus[] {\n const sorting = super.getSorting();\n if (sorting.length === 0) {\n return [{\n name: this._nativeColumns.stackRank,\n sortDirection: 0\n }];\n }\n else {\n return sorting;\n }\n }\n\n public getSortedRecordIds(): string[] {\n return this._taskTree.getSortedIds();\n }\n\n public async deleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksDeleted', taskIds);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onDeleteTasks(taskIds);\n if (result !== null) {\n const deletedTaskIds = result.deletedTaskIds;\n await this.deleteRecords(deletedTaskIds);\n this.setSelectedRecordIds(this.getSelectedRecordIds().filter(id => !deletedTaskIds.includes(id)));\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', deletedTaskIds);\n }\n this.taskEvents.dispatchEvent('onAfterTasksDeleted', result);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async editTasks(taskIds: string[]): Promise<IEditTasksResult | null> {\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n this.taskEvents.dispatchEvent('onBeforeTasksEdited', taskIds);\n const result = await this._strategy.onEditTasks(taskIds);\n if (result !== null) this.updateTaskData(result.updatedRecords);\n this.taskEvents.dispatchEvent('onAfterTasksEdited', result);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public isRecordActive(recordId: string): boolean {\n return this._strategy.onIsRecordActive(recordId);\n }\n\n public async destroy(): Promise<void> {\n super.destroy();\n this.taskEvents.clearEventListeners();\n }\n\n public getQuickFindColumns(): IColumn[] {\n const quickFindColumnNames = this._savedQueryDataProvider.getCurrentQuery().quickFindColumns ?? [];\n const existingQuickFindColumns = quickFindColumnNames.map(columnName => this.getColumnsMap()[columnName]).filter(col => col) as IColumn[];\n return existingQuickFindColumns;\n }\n\n public createGroupedRecordDataProvider(group: IRecord): IDataProvider {\n const children = this._taskTree.getNodeMap().get(group.getRecordId())?.directChildren ?? [];\n return {\n ...this,\n getRecords: () => children,\n isError: () => this.isError(),\n refresh: () => children\n } as IDataProvider;\n }\n\n public getPaging() {\n const paging = super.getPaging();\n paging.totalResultCount = this._taskTree.getTotalCount()\n paging.pageSize = this._taskTree.getTotalCount();\n return paging;\n }\n\n public getRecords(): IRecord[] {\n const records = super.getRecords();\n if (records.length === 0 || this._taskTree.getNodeMap().size === 0) {\n return [];\n }\n return this._taskTree.getNodeMap().get(null as any)?.directChildren ?? [];\n }\n\n public getAllRecords(): IRecord[] {\n return super.getRecords();\n }\n\n public createNewDataProvider(eventBubbleOptions?: IEventBubbleOptions): IDataProvider {\n return new TaskDataProvider({\n localizationService: this._localizationService,\n nativeColumns: this._nativeColumns,\n strategy: this._strategy,\n savedQueryDataProvider: this._savedQueryDataProvider,\n onIsFlatListEnabled: () => this._onFlatListEnabled(),\n });\n }\n public async refresh(): Promise<IRecord[]> {\n if (!this._hasDataBeenLoaded) {\n await this._loadDataFromStrategy();\n this._hasDataBeenLoaded = true;\n }\n await super.refresh();\n return this.getAllRecords();\n }\n\n public dispatchEvent<K extends keyof IDataProviderEventListeners>(event: K, ...args: Parameters<IDataProviderEventListeners[K]>): boolean {\n if (event === 'onNewDataLoaded') {\n this._taskTree.build();\n }\n return super.dispatchEvent(event, ...args);\n }\n\n public getDataSync(pageNumber: number, pageSize: number, previousPageNumber: number, event: GetDataEvent): IRetrievedData {\n return {\n data: this.getDataSource(),\n hasNextPage: false,\n totalRecordCount: this.getDataSource().length\n }\n }\n\n private async _loadDataFromStrategy() {\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const { columns, rawData, metadata } = await this._strategy.onInitialize(this);\n this.setDataSource(rawData);\n this.setMetadata(metadata);\n this.setColumns(columns);\n this.getPaging().setPageSize(rawData.length);\n this.setEntityName(metadata.LogicalName);\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n private _createTasks(rawRecords: IRawRecord[], parentId?: string) {\n const records: IRecord[] = [];\n for (const rawRecord of rawRecords) {\n const record = this.newRecord({\n rawData: rawRecord,\n recordId: rawRecord[this.getMetadata().PrimaryIdAttribute],\n position: 'start',\n },);\n const stackRankAttributeName = this.getNativeColumns().stackRank;\n if (record.getValue(stackRankAttributeName) == null) {\n console.warn(`Record with id ${record.getRecordId()} is missing stack rank value. Setting it to 0.`, record);\n record.setValue(stackRankAttributeName, 0);\n const newRawData = record.toRawData()\n record.setRawData(newRawData);\n }\n records.push(record);\n }\n if (records.length > 0) {\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', [parentId]);\n }\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskDataProvider.js","sources":["../../../../../src/components/TaskGrid/providers/task/TaskDataProvider.ts"],"sourcesContent":["import { EventEmitter, GetDataEvent, IAvailableColumnOptions, IAvailableRelatedColumn, IColumn, ICommand, IDataProvider, IDataProviderEventListeners, IEventBubbleOptions, IEventEmitter, IRawRecord, IRecord, IRecordSaveOperationResult, IRetrievedData, IRetrieveRecordCommandOptions, MemoryDataProvider, Operators, Type } from \"@talxis/client-libraries\";\nimport { IRecordTree, RecordTree } from \"./record-tree/RecordTree\";\nimport { ErrorHelper } from \"../../../../utils/error-handling\";\nimport { ILocalizationService } from \"../../../../utils\";\nimport { ITaskGridLabels } from \"../../labels\";\nimport { INativeColumns } from \"../../interfaces\";\nimport { ISavedQueryDataProvider} from \"../saved-query\";\nimport { ICustomColumnsDataProvider } from \"../custom-columns\";\n\nexport interface IFailedRecord {\n id: string;\n error: any;\n}\n\nexport type IDeleteTasksResult =\n | { success: true; deletedTaskIds: string[] }\n | { success: false; deletedTaskIds: string[]; errors: IFailedRecord[] };\n\nexport type IOpenDatasetItemsResult =\n | { success: true; updatedRecords: IRawRecord[] }\n | { success: false; updatedRecords: IRawRecord[]; errors: IFailedRecord[] };\n\n\nexport interface ITaskDataProviderParameters {\n nativeColumns: INativeColumns;\n localizationService: ILocalizationService<ITaskGridLabels>;\n strategy: ITaskDataProviderStrategy;\n savedQueryDataProvider: ISavedQueryDataProvider;\n customColumnsDataProvider?: ICustomColumnsDataProvider;\n onIsFlatListEnabled: () => boolean;\n}\n\n/** Strategy interface that handles all data access and mutation operations for tasks. */\nexport interface ITaskDataProviderStrategy {\n /**\n * Called when the provider needs to retrieve latest data for specific tasks to synchronize the grid with the server.\n */\n onGetRawRecords: (ids: string[]) => Promise<IRawRecord[]>;\n /** Called once on first load. Must return the initial columns, raw task records, and entity metadata. */\n onInitialize: (provider: ITaskDataProvider) => Promise<{ columns: IColumn[]; rawData: IRawRecord[]; metadata: any }>\n /** Returns all columns available for display in the grid (both native and custom). */\n onGetAvailableColumns: (options?: IAvailableColumnOptions) => Promise<IColumn[]>;\n /** Returns linked-entity columns that can be used for filtering and sorting. */\n onGetAvailableRelatedColumns: () => Promise<IAvailableRelatedColumn[]>;\n /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTask(parentTaskId?: string): Promise<IRawRecord | null>;\n /**\n * @returns Result indicating which tasks were deleted and which failed.\n * `success: true` means all tasks were deleted. `success: false` means some or all failed.\n * Throws on unexpected failure.\n */\n onDeleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;\n /** @returns The created template raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTemplateFromTask(taskId: string): Promise<IRawRecord | null>;\n /** @returns The created task raw records, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null>;\n /**\n * Opens one or more dataset items. When `isTaskEntity` is `true` the references point to task records;\n * when `false` they point to a related entity (e.g. a lookup target).\n */\n onOpenDatasetItems(entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean): Promise<IOpenDatasetItemsResult | null>;\n /** Moves a task to a new position relative to another task. Returns the updated raw records, or `null` on cancellation. */\n onMoveTask(movingTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child'): Promise<IRawRecord[] | null>;\n /** Persists inline cell edits for the given record. */\n onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult>;\n /** Returns whether the given task record is currently active (non-completed). */\n onIsRecordActive(recordId: string): boolean;\n /** When provided, the task tree is scoped to the subtree of the returned task id. */\n onGetRootTaskId?: () => string | undefined\n}\n\nexport interface ITaskDataProviderEventListener {\n onBeforeTemplateCreated: (taskId: string) => void;\n onAfterTemplateCreated: (record: IRawRecord | null) => void;\n onBeforeTasksDeleted: (taskIds: string[]) => void;\n onAfterTasksDeleted: (result: IDeleteTasksResult | null) => void;\n onBeforeTasksCreated: (parentId?: string) => void;\n onAfterTasksCreated: (records: IRawRecord[] | null, parentId?: string) => void;\n onBeforeTaskMoved: () => void;\n onAfterTaskMoved: (movingFromTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child') => void;\n onTaskDataUpdated: (data: IRawRecord[]) => void;\n onRecordTreeUpdated: (updatedParentIds: (string | undefined)[]) => void;\n onBeforeDatasetItemsOpened: (entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean) => void;\n onAfterDatasetItemsOpened: (entityReferences: ComponentFramework.EntityReference[], isTaskEntity: boolean, result: IOpenDatasetItemsResult | null) => void;\n onError: (error: any, message: string) => void;\n}\n\n/** Extended data provider interface for task records. Adds task-specific operations on top of `IDataProvider`. */\nexport interface ITaskDataProvider extends IDataProvider {\n /** EventEmitter for task lifecycle events (create, delete, edit, move, template, error). */\n taskEvents: IEventEmitter<ITaskDataProviderEventListener>;\n /** Returns the native column name mapping. */\n getNativeColumns(): INativeColumns;\n /** Returns all records regardless of current tree filtering or paging. */\n getAllRecords(): IRecord[];\n /** Returns the underlying strategy cast to the given type. */\n getStrategy<T extends ITaskDataProviderStrategy>(): T;\n /** Fetches raw task records by id via the strategy. Pass an empty array to fetch all. */\n fetchRawRecords(ids: string[]): Promise<IRawRecord[]>;\n /** Returns the current hierarchical record tree built from loaded task data. */\n getRecordTree(): IRecordTree;\n /** Applies updated raw record data in-place and rebuilds the tree if hierarchy changed. */\n updateTaskData(newData: IRawRecord[]): void;\n /**\n * Opens one or more task records by id. Builds entity references from the current records map\n * and delegates to `strategy.onOpenDatasetItems` with `isTaskEntity: true`.\n */\n openTaskItems(taskIds: string[]): Promise<IOpenDatasetItemsResult | null>;\n /** @returns The created task raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTask(parentTaskId?: string): Promise<IRawRecord | null>;\n /**\n * @returns Result indicating which tasks were deleted and which failed.\n * `success: true` means all tasks were deleted. `success: false` means some or all failed — `deletedTaskIds` still contains the ids that succeeded.\n * Throws on unexpected failure before any deletes could be attempted.\n */\n deleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;\n /** @returns The created template raw record, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTemplateFromTask(taskId: string): Promise<IRawRecord | null>;\n /** @returns The created task raw records, or `null` if the operation was cancelled by the user. Throws on unexpected failure. */\n createTasksFromTemplate(templateId: string, parentId?: string): Promise<IRawRecord[] | null>;\n /** Returns `true` when the grid is displaying a flat list instead of a tree hierarchy. */\n isFlatListEnabled(): boolean;\n /** Returns `true` when task creation is allowed (from `ITaskDataProviderStrategy.onIsTaskAddingEnabled`). */\n /** Returns the root task id when the tree is scoped to a subtree, or `null` for a full tree. */\n getRootTaskId: () => string | null;\n /** Moves a task to a position relative to another task. Returns the updated raw records, or `null` on cancellation. */\n moveTask(movingTaskId: string, movingToTaskId: string, position: 'above' | 'below' | 'child'): Promise<IRawRecord[] | null>;\n}\n\nexport class TaskDataProvider extends MemoryDataProvider implements ITaskDataProvider {\n private _nativeColumns: INativeColumns;\n private _localizationService: ILocalizationService<ITaskGridLabels>;\n private _hasDataBeenLoaded: boolean = false;\n private _taskTree: IRecordTree;\n private _strategy: ITaskDataProviderStrategy;\n private _savedQueryDataProvider: ISavedQueryDataProvider;\n private _customColumnsDataProvider?: ICustomColumnsDataProvider;\n private _onFlatListEnabled: () => boolean;\n public readonly taskEvents: EventEmitter<ITaskDataProviderEventListener> = new EventEmitter<ITaskDataProviderEventListener>();\n\n constructor(parameters: ITaskDataProviderParameters) {\n super({\n dataSource: [],\n metadata: { PrimaryIdAttribute: 'id' }\n });\n this._savedQueryDataProvider = parameters.savedQueryDataProvider;\n this._nativeColumns = parameters.nativeColumns;\n this._taskTree = new RecordTree({\n taskDataProvider: this\n })\n this._localizationService = parameters.localizationService;\n this._strategy = parameters.strategy;\n this._customColumnsDataProvider = parameters.customColumnsDataProvider;\n this._onFlatListEnabled = parameters.onIsFlatListEnabled;\n }\n\n public getStrategy<T extends ITaskDataProviderStrategy>(): T {\n return this._strategy as T;\n }\n\n public getRootTaskId(): string | null {\n return this._strategy.onGetRootTaskId?.() ?? null;\n }\n\n public getRecordTree(): IRecordTree {\n return this._taskTree;\n }\n\n public isFlatListEnabled(): boolean {\n return this._onFlatListEnabled();\n }\n\n public getNativeColumns(): INativeColumns {\n return this._nativeColumns;\n }\n\n public async fetchRawRecords(ids: string[]) {\n return this._strategy.onGetRawRecords(ids);\n }\n\n public async onGetAvailableColumns(options?: { entityName?: string }): Promise<IColumn[]> {\n return [\n ...this._getColumnsWithUnusedVirtualColumns(await this._strategy.onGetAvailableColumns(options)),\n ...(this._customColumnsDataProvider ? this._customColumnsDataProvider.getColumns() : [])\n ];\n }\n\n private _getColumnsWithUnusedVirtualColumns(columns: IColumn[]): IColumn[] {\n columns = [...columns];\n const columnsMap = new Map(columns.map(col => [col.name, col]));\n const virtualColumns = new Map(this._savedQueryDataProvider.getSystemQueries().flatMap(query => query.columns).filter(column => column.isVirtual).map(col => [col.name, col]));\n for (const virtualColumn of [...virtualColumns.values()]) {\n if (!columnsMap.has(virtualColumn.name)) {\n columns.push({\n ...virtualColumn,\n isHidden: false\n });\n }\n }\n return columns;\n }\n\n public onGetAvailableRelatedColumns(): Promise<IAvailableRelatedColumn[]> {\n return this._strategy.onGetAvailableRelatedColumns();\n }\n\n public async retrieveRecordCommand(options?: IRetrieveRecordCommandOptions): Promise<ICommand[]> {\n return [];\n }\n\n public onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult> {\n return this._strategy.onRecordSave(record);\n }\n\n public updateTaskData(newData: IRawRecord[]) {\n const affectedParentIds: (string | undefined)[] = [];\n let recordTreeChanged = false;\n\n for (const updatedData of newData) {\n const recordId = updatedData[this.getMetadata().PrimaryIdAttribute];\n if (!recordId) {\n throw new Error(`Updated data is missing record id. Data: ${JSON.stringify(updatedData)}`);\n }\n const record = this.getRecordsMap()[recordId];\n const originalParentId = record.getValue(this.getNativeColumns().parentId)?.[0]?.id?.guid;\n const originalStackRank = record.getValue(this.getNativeColumns().stackRank);\n record.setRawData(updatedData);\n const newParentId = record.getValue(this.getNativeColumns().parentId)?.[0]?.id?.guid;\n const newStackRank = record.getValue(this.getNativeColumns().stackRank);\n if (originalParentId !== newParentId) {\n recordTreeChanged = true;\n affectedParentIds.push(recordId, originalParentId, newParentId);\n } else if (originalStackRank !== newStackRank) {\n recordTreeChanged = true;\n }\n }\n if (recordTreeChanged) {\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', affectedParentIds);\n }\n this.taskEvents.dispatchEvent('onTaskDataUpdated', newData);\n }\n\n\n public getGroupedRecordDataProvider(groupedRecordId: string): IDataProvider | null {\n const provider = new MemoryDataProvider({\n dataSource: [],\n metadata: { PrimaryIdAttribute: 'id' }\n })\n provider.getErrorMessage = () => this.getErrorMessage();\n return provider;\n }\n\n public async moveTask(movingFromTaskId: string, movingToTaskId: string, position: \"above\" | \"below\" | \"child\"): Promise<IRawRecord[] | null> {\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n this.taskEvents.dispatchEvent('onBeforeTaskMoved');\n const result = await this._strategy.onMoveTask(movingFromTaskId, movingToTaskId, position);\n if (result !== null) this.updateTaskData(result);\n this.taskEvents.dispatchEvent('onAfterTaskMoved', movingFromTaskId, movingToTaskId, position);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createTask(parentId?: string): Promise<IRawRecord | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksCreated', parentId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecord = await this._strategy.onCreateTask(parentId);\n if (rawRecord) this._createTasks([rawRecord], parentId);\n this.taskEvents.dispatchEvent('onAfterTasksCreated', rawRecord ? [rawRecord] : null, parentId);\n return rawRecord;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public async createTasksFromTemplate(templateId: string, parentId?: string): Promise<IRawRecord[] | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksCreated', parentId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecords = await this._strategy.onCreateTasksFromTemplate(templateId, parentId);\n if (rawRecords) this._createTasks(rawRecords, parentId);\n this.taskEvents.dispatchEvent('onAfterTasksCreated', rawRecords, parentId);\n return rawRecords;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async createTemplateFromTask(taskId: string): Promise<IRawRecord | null> {\n this.taskEvents.dispatchEvent('onBeforeTemplateCreated', taskId);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const rawRecord = await this._strategy.onCreateTemplateFromTask(taskId);\n this.taskEvents.dispatchEvent('onAfterTemplateCreated', rawRecord);\n return rawRecord;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public async onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: { columnName?: string }): Promise<void> {\n const isTaskEntity = !context || context?.columnName === this.getNativeColumns().subject;\n this.taskEvents.dispatchEvent('onBeforeDatasetItemsOpened', [entityReference], isTaskEntity);\n ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onOpenDatasetItems([entityReference], isTaskEntity);\n if(result) this.updateTaskData(result.updatedRecords);\n this.taskEvents.dispatchEvent('onAfterDatasetItemsOpened', [entityReference], isTaskEntity, result);\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public getSorting(): ComponentFramework.PropertyHelper.DataSetApi.SortStatus[] {\n const sorting = super.getSorting();\n if (sorting.length === 0) {\n return [{\n name: this._nativeColumns.stackRank,\n sortDirection: 0\n }];\n }\n else {\n return sorting;\n }\n }\n\n public getSortedRecordIds(): string[] {\n return this._taskTree.getSortedIds();\n }\n\n public async deleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null> {\n this.taskEvents.dispatchEvent('onBeforeTasksDeleted', taskIds);\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const result = await this._strategy.onDeleteTasks(taskIds);\n if (result !== null) {\n const deletedTaskIds = result.deletedTaskIds;\n await this.deleteRecords(deletedTaskIds);\n this.setSelectedRecordIds(this.getSelectedRecordIds().filter(id => !deletedTaskIds.includes(id)));\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', deletedTaskIds);\n }\n this.taskEvents.dispatchEvent('onAfterTasksDeleted', result);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n public async openTaskItems(taskIds: string[]): Promise<IOpenDatasetItemsResult | null> {\n const entityReferences = taskIds.map(id => {\n const record = this.getRecordsMap()[id];\n return {\n id: { guid: id },\n etn: this.getEntityName(),\n name: record?.getFormattedValue(this.getNativeColumns().subject) ?? undefined\n } as ComponentFramework.EntityReference;\n });\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n this.taskEvents.dispatchEvent('onBeforeDatasetItemsOpened', entityReferences, true);\n const result = await this._strategy.onOpenDatasetItems(entityReferences, true);\n if (result !== null) this.updateTaskData(result.updatedRecords);\n this.taskEvents.dispatchEvent('onAfterDatasetItemsOpened', entityReferences, true, result);\n return result;\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n });\n }\n\n public isRecordActive(recordId: string): boolean {\n return this._strategy.onIsRecordActive(recordId);\n }\n\n public async destroy(): Promise<void> {\n super.destroy();\n this.taskEvents.clearEventListeners();\n }\n\n public getQuickFindColumns(): IColumn[] {\n const quickFindColumnNames = this._savedQueryDataProvider.getCurrentQuery().quickFindColumns ?? [];\n const existingQuickFindColumns = quickFindColumnNames.map(columnName => this.getColumnsMap()[columnName]).filter(col => col) as IColumn[];\n return existingQuickFindColumns;\n }\n\n public createGroupedRecordDataProvider(group: IRecord): IDataProvider {\n const children = this._taskTree.getNodeMap().get(group.getRecordId())?.directChildren ?? [];\n return {\n ...this,\n getRecords: () => children,\n isError: () => this.isError(),\n refresh: () => children\n } as IDataProvider;\n }\n\n public getPaging() {\n const paging = super.getPaging();\n paging.totalResultCount = this._taskTree.getTotalCount()\n paging.pageSize = this._taskTree.getTotalCount();\n return paging;\n }\n\n public getRecords(): IRecord[] {\n const records = super.getRecords();\n if (records.length === 0 || this._taskTree.getNodeMap().size === 0) {\n return [];\n }\n return this._taskTree.getNodeMap().get(null as any)?.directChildren ?? [];\n }\n\n public getAllRecords(): IRecord[] {\n return super.getRecords();\n }\n\n public createNewDataProvider(eventBubbleOptions?: IEventBubbleOptions): IDataProvider {\n return new TaskDataProvider({\n localizationService: this._localizationService,\n nativeColumns: this._nativeColumns,\n strategy: this._strategy,\n savedQueryDataProvider: this._savedQueryDataProvider,\n onIsFlatListEnabled: () => this._onFlatListEnabled(),\n });\n }\n public async refresh(): Promise<IRecord[]> {\n if (!this._hasDataBeenLoaded) {\n await this._loadDataFromStrategy();\n //we need to artificially wait in order for any sync outside stuff to finish (like loading grid to register events)\n await new Promise(resolve => setTimeout(resolve, 0));\n this._hasDataBeenLoaded = true;\n }\n await super.refresh();\n return this.getAllRecords();\n }\n\n public dispatchEvent<K extends keyof IDataProviderEventListeners>(event: K, ...args: Parameters<IDataProviderEventListeners[K]>): boolean {\n if (event === 'onNewDataLoaded') {\n this._taskTree.build();\n }\n return super.dispatchEvent(event, ...args);\n }\n\n public getDataSync(pageNumber: number, pageSize: number, previousPageNumber: number, event: GetDataEvent): IRetrievedData {\n return {\n data: this.getDataSource(),\n hasNextPage: false,\n totalRecordCount: this.getDataSource().length\n }\n }\n\n private async _loadDataFromStrategy() {\n return ErrorHelper.executeWithErrorHandling({\n operation: async () => {\n const { columns, rawData, metadata } = await this._strategy.onInitialize(this);\n this.setDataSource(rawData);\n this.setMetadata(metadata);\n this.setColumns(columns);\n this.getPaging().setPageSize(rawData.length);\n this.setEntityName(metadata.LogicalName);\n },\n onError: (error, message) => this.taskEvents.dispatchEvent('onError', error, message)\n })\n }\n\n private _createTasks(rawRecords: IRawRecord[], parentId?: string) {\n const records: IRecord[] = [];\n for (const rawRecord of rawRecords) {\n const record = this.newRecord({\n rawData: rawRecord,\n recordId: rawRecord[this.getMetadata().PrimaryIdAttribute],\n position: 'start',\n },);\n const stackRankAttributeName = this.getNativeColumns().stackRank;\n if (record.getValue(stackRankAttributeName) == null) {\n console.warn(`Record with id ${record.getRecordId()} is missing stack rank value. Setting it to 0.`, record);\n record.setValue(stackRankAttributeName, 0);\n const newRawData = record.toRawData()\n record.setRawData(newRawData);\n }\n records.push(record);\n }\n if (records.length > 0) {\n this._taskTree.build();\n this.taskEvents.dispatchEvent('onRecordTreeUpdated', [parentId]);\n }\n }\n}"],"names":[],"mappings":"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"}
@@ -12,15 +12,23 @@ interface IRecordTreeParameters {
12
12
  taskDataProvider: ITaskDataProvider;
13
13
  }
14
14
  export interface IRecordTree {
15
+ /** Builds (or rebuilds) the node map from the current provider records. Returns the resulting map keyed by record id. */
15
16
  build(): Map<string, ITreeNode>;
17
+ /** Returns the current node map keyed by record id without triggering a rebuild. */
16
18
  getNodeMap(): Map<string, ITreeNode>;
19
+ /** Returns the tree node for the given record id. Pass `null` to get the virtual root node. */
17
20
  getNode(recordId: string | null): ITreeNode;
21
+ /** Returns the total number of unique records in the tree. */
18
22
  getTotalCount(): number;
23
+ /** Returns `true` when the tree is in flat-list mode (no parent-child hierarchy). */
19
24
  isFlat(): boolean;
25
+ /** Returns `true` when the record with the given id has at least one direct child. */
20
26
  hasChildren(recordId: string): boolean;
27
+ /** Returns a map of records that match the current search/filter, keyed by record id. */
21
28
  getMatchingRecords(): {
22
29
  [recordId: string]: IRecord;
23
30
  };
31
+ /** Returns record ids in their computed display order (depth-first, stack-rank sorted). */
24
32
  getSortedIds(): string[];
25
33
  }
26
34
  export declare class RecordTree implements IRecordTree {