@talxis/base-controls 1.2604.2 → 1.2605.2-alpha

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 (248) hide show
  1. package/dist/components/DatasetControl/EditColumns/OptionText/OptionText.js +1 -2
  2. package/dist/components/DatasetControl/EditColumns/OptionText/OptionText.js.map +1 -1
  3. package/dist/components/Lookup/Lookup.js +4 -1
  4. package/dist/components/Lookup/Lookup.js.map +1 -1
  5. package/dist/components/Lookup/hooks/useLookup.d.ts +4 -0
  6. package/dist/components/Lookup/translations.d.ts +4 -0
  7. package/dist/components/Lookup/translations.js +4 -0
  8. package/dist/components/Lookup/translations.js.map +1 -1
  9. package/dist/components/TaskGrid/TaskGrid.js +3 -4
  10. package/dist/components/TaskGrid/TaskGrid.js.map +1 -1
  11. package/dist/components/TaskGrid/TaskGridDatasetControl.d.ts +16 -5
  12. package/dist/components/TaskGrid/TaskGridDatasetControl.js +32 -13
  13. package/dist/components/TaskGrid/TaskGridDatasetControl.js.map +1 -1
  14. package/dist/components/TaskGrid/TaskGridDatasetControlFactory.d.ts +3 -2
  15. package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js +7 -5
  16. package/dist/components/TaskGrid/TaskGridDatasetControlFactory.js.map +1 -1
  17. package/dist/components/TaskGrid/components/grid/cell-renderers/add-task-button/AddTaskButton.js +3 -8
  18. package/dist/components/TaskGrid/components/grid/cell-renderers/add-task-button/AddTaskButton.js.map +1 -1
  19. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.d.ts +7 -0
  20. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js +99 -0
  21. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js.map +1 -0
  22. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/index.d.ts +1 -0
  23. package/dist/components/TaskGrid/components/grid/cell-renderers/lookup-many/index.js +2 -0
  24. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.d.ts +1 -0
  25. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js +2 -1
  26. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/PercentComplete.js.map +1 -1
  27. package/dist/components/TaskGrid/components/grid/cell-renderers/percent-complete/index.js +1 -1
  28. package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.d.ts +2 -7
  29. package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js +44 -18
  30. package/dist/components/TaskGrid/components/grid/grid-customizer/GridCustomizer.js.map +1 -1
  31. package/dist/components/TaskGrid/components/grid/grid-drag-handler/GridDragHandler.js.map +1 -1
  32. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.d.ts +13 -0
  33. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js +82 -0
  34. package/dist/components/TaskGrid/components/grid/lookup-many/LookupMany.js.map +1 -0
  35. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.d.ts +5 -0
  36. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.js +12 -0
  37. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/ColorfulLookupMany.js.map +1 -0
  38. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.d.ts +2 -0
  39. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js +13 -0
  40. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/index.js.map +1 -0
  41. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.d.ts +3 -0
  42. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.js +17 -0
  43. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
  44. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/index.d.ts +1 -0
  45. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/multi-value-container/index.js +2 -0
  46. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.d.ts +3 -0
  47. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.js +17 -0
  48. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/Option.js.map +1 -0
  49. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/index.d.ts +1 -0
  50. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/index.js +2 -0
  51. package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → components/grid/lookup-many/colorful-lookup-many/components/option}/index.js.map +1 -1
  52. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.d.ts +14 -0
  53. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.js +21 -0
  54. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/components/option/styles.js.map +1 -0
  55. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.d.ts +4 -0
  56. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.js +9 -0
  57. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/context.js.map +1 -0
  58. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/index.d.ts +1 -0
  59. package/dist/components/TaskGrid/components/grid/lookup-many/colorful-lookup-many/index.js +2 -0
  60. package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → components/grid/lookup-many/colorful-lookup-many}/index.js.map +1 -1
  61. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.d.ts +10 -0
  62. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js +15 -0
  63. package/dist/components/TaskGrid/components/grid/lookup-many/components/index.js.map +1 -0
  64. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.d.ts +3 -0
  65. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js +15 -0
  66. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/MultiValueContainer.js.map +1 -0
  67. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.d.ts +1 -0
  68. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.js +2 -0
  69. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/index.js.map +1 -0
  70. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.d.ts +18 -0
  71. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.js +24 -0
  72. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-container/styles.js.map +1 -0
  73. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.d.ts +3 -0
  74. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.js +21 -0
  75. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/MultiValueLabel.js.map +1 -0
  76. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.d.ts +1 -0
  77. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.js +2 -0
  78. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/index.js.map +1 -0
  79. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.d.ts +15 -0
  80. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.js +22 -0
  81. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-label/styles.js.map +1 -0
  82. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.d.ts +3 -0
  83. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.js +18 -0
  84. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/MultiValueRemove.js.map +1 -0
  85. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.d.ts +22 -0
  86. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.js +28 -0
  87. package/dist/components/TaskGrid/components/grid/lookup-many/components/multi-value-remove/styles.js.map +1 -0
  88. package/dist/components/TaskGrid/components/grid/lookup-many/context.d.ts +4 -0
  89. package/dist/components/TaskGrid/components/grid/lookup-many/context.js +9 -0
  90. package/dist/components/TaskGrid/components/grid/lookup-many/context.js.map +1 -0
  91. package/dist/components/TaskGrid/components/grid/lookup-many/index.d.ts +4 -0
  92. package/dist/components/TaskGrid/components/grid/lookup-many/index.js +5 -0
  93. package/dist/components/TaskGrid/components/grid/lookup-many/index.js.map +1 -0
  94. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.d.ts +5 -0
  95. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js +12 -0
  96. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/PeopleLookupMany.js.map +1 -0
  97. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.d.ts +2 -0
  98. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js +13 -0
  99. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/index.js.map +1 -0
  100. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.d.ts +3 -0
  101. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js +17 -0
  102. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/MultiValueLabel.js.map +1 -0
  103. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.d.ts +1 -0
  104. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.js +2 -0
  105. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/index.js.map +1 -0
  106. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.d.ts +5 -0
  107. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.js +6 -0
  108. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/multi-value-label/styles.js.map +1 -0
  109. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.d.ts +3 -0
  110. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.js +16 -0
  111. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/Option.js.map +1 -0
  112. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.d.ts +1 -0
  113. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.js +2 -0
  114. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/index.js.map +1 -0
  115. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.d.ts +10 -0
  116. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.js +11 -0
  117. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/components/option/styles.js.map +1 -0
  118. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.d.ts +4 -0
  119. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.js +9 -0
  120. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/context.js.map +1 -0
  121. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.d.ts +1 -0
  122. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.js +2 -0
  123. package/dist/components/TaskGrid/components/grid/lookup-many/people-lookup-many/index.js.map +1 -0
  124. package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.d.ts +1 -0
  125. package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.js +27 -14
  126. package/dist/components/TaskGrid/components/grid/multi-record-selector/MultiRecordSelector.js.map +1 -1
  127. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.d.ts +3 -0
  128. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.js +13 -0
  129. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/MultiValueContainer.js.map +1 -0
  130. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.d.ts +18 -0
  131. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.js +24 -0
  132. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-container/styles.js.map +1 -0
  133. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.d.ts +3 -0
  134. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js +19 -0
  135. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/MultiValueLabel.js.map +1 -0
  136. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.d.ts +12 -0
  137. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.js +19 -0
  138. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-label/styles.js.map +1 -0
  139. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.d.ts +3 -0
  140. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.js +16 -0
  141. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/MultiValueRemove.js.map +1 -0
  142. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.d.ts +22 -0
  143. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.js +28 -0
  144. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/multi-value-remove/styles.js.map +1 -0
  145. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/option/Option.d.ts +3 -0
  146. package/dist/components/TaskGrid/components/grid/multi-record-selector/components/option/styles.d.ts +16 -0
  147. package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.d.ts +3 -0
  148. package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.js +15 -0
  149. package/dist/components/TaskGrid/components/grid/multi-record-selector/styles.js.map +1 -0
  150. package/dist/components/TaskGrid/components/header/Header.js +5 -4
  151. package/dist/components/TaskGrid/components/header/Header.js.map +1 -1
  152. package/dist/components/TaskGrid/components/header/edit-columns/EditColumns.js.map +1 -1
  153. package/dist/components/TaskGrid/components/header/view-switcher/create-view-dialog/CreateViewDialog.js.map +1 -1
  154. package/dist/components/TaskGrid/components/header/view-switcher/view-manager/ViewManager.js.map +1 -1
  155. package/dist/components/TaskGrid/context.d.ts +5 -4
  156. package/dist/components/TaskGrid/context.js.map +1 -1
  157. package/dist/components/TaskGrid/extensions/LexoRank.d.ts +7 -0
  158. package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.d.ts +69 -0
  159. package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.js → extensions/dataverse/DataverseCustomColumnsStrategy.js} +35 -3
  160. package/dist/components/TaskGrid/extensions/dataverse/DataverseCustomColumnsStrategy.js.map +1 -0
  161. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.d.ts +20 -0
  162. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js +42 -0
  163. package/dist/components/TaskGrid/extensions/dataverse/DataverseGridCustomizerStrategy.js.map +1 -0
  164. package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.d.ts +49 -0
  165. package/dist/components/TaskGrid/{data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.js → extensions/dataverse/DataverseSavedQueryStrategy.js} +37 -15
  166. package/dist/components/TaskGrid/extensions/dataverse/DataverseSavedQueryStrategy.js.map +1 -0
  167. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.d.ts +100 -0
  168. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js +145 -0
  169. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskGridDescriptor.js.map +1 -0
  170. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.d.ts +122 -0
  171. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js +453 -0
  172. package/dist/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.js.map +1 -0
  173. package/dist/components/TaskGrid/extensions/dataverse/index.d.ts +5 -0
  174. package/dist/components/TaskGrid/extensions/dataverse/index.js +6 -0
  175. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.d.ts +49 -0
  176. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js +145 -0
  177. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.js.map +1 -0
  178. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.d.ts +11 -0
  179. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.js +16 -0
  180. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.js.map +1 -0
  181. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.d.ts +2 -0
  182. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js +29 -0
  183. package/dist/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.js.map +1 -0
  184. package/dist/components/TaskGrid/interfaces.d.ts +30 -12
  185. package/dist/components/TaskGrid/labels.d.ts +1 -15
  186. package/dist/components/TaskGrid/labels.js +2 -16
  187. package/dist/components/TaskGrid/labels.js.map +1 -1
  188. package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → providers/custom-columns}/CustomColumnsDataProvider.d.ts +5 -1
  189. package/dist/components/TaskGrid/providers/custom-columns/CustomColumnsDataProvider.js.map +1 -0
  190. package/dist/components/TaskGrid/providers/custom-columns/index.d.ts +1 -0
  191. package/dist/components/TaskGrid/providers/custom-columns/index.js +2 -0
  192. package/dist/components/TaskGrid/providers/custom-columns/index.js.map +1 -0
  193. package/dist/components/TaskGrid/providers/index.d.ts +3 -0
  194. package/dist/components/TaskGrid/providers/index.js +4 -0
  195. package/dist/components/TaskGrid/providers/index.js.map +1 -0
  196. package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → providers/saved-query}/SavedQueryDataProvider.d.ts +13 -8
  197. package/dist/components/TaskGrid/{data-providers/saved-query-data-provider → providers/saved-query}/SavedQueryDataProvider.js +87 -50
  198. package/dist/components/TaskGrid/providers/saved-query/SavedQueryDataProvider.js.map +1 -0
  199. package/dist/components/TaskGrid/providers/saved-query/index.d.ts +1 -0
  200. package/dist/components/TaskGrid/providers/saved-query/index.js +2 -0
  201. package/dist/components/TaskGrid/providers/saved-query/index.js.map +1 -0
  202. package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/TaskDataProvider.d.ts +15 -22
  203. package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/TaskDataProvider.js +35 -26
  204. package/dist/components/TaskGrid/providers/task/TaskDataProvider.js.map +1 -0
  205. package/dist/components/TaskGrid/providers/task/index.js.map +1 -0
  206. package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/RecordTree.js +2 -0
  207. package/dist/components/TaskGrid/providers/task/record-tree/RecordTree.js.map +1 -0
  208. package/dist/components/TaskGrid/providers/task/record-tree/index.js.map +1 -0
  209. package/dist/components/TaskGrid/providers/task/record-tree/patchDataBuilderPrepare.js.map +1 -0
  210. package/dist/index.d.ts +177 -165
  211. package/dist/index.js +1 -0
  212. package/dist/index.js.map +1 -1
  213. package/dist/utils/index.d.ts +1 -0
  214. package/dist/utils/index.js +1 -0
  215. package/dist/utils/index.js.map +1 -1
  216. package/dist/utils/localization/LocalizationService.d.ts +15 -0
  217. package/dist/utils/localization/LocalizationService.js +17 -0
  218. package/dist/utils/localization/LocalizationService.js.map +1 -0
  219. package/dist/utils/localization/index.d.ts +1 -0
  220. package/dist/utils/localization/index.js +2 -0
  221. package/dist/utils/localization/index.js.map +1 -0
  222. package/package.json +5 -4
  223. package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/CustomColumnsDataProvider.js.map +0 -1
  224. package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.d.ts +0 -33
  225. package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/TalxisCustomColumnsDataProviderStrategy.js.map +0 -1
  226. package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/index.d.ts +0 -2
  227. package/dist/components/TaskGrid/data-providers/custom-columns-data-provider/index.js +0 -3
  228. package/dist/components/TaskGrid/data-providers/index.d.ts +0 -3
  229. package/dist/components/TaskGrid/data-providers/index.js +0 -6
  230. package/dist/components/TaskGrid/data-providers/saved-query-data-provider/SavedQueryDataProvider.js.map +0 -1
  231. package/dist/components/TaskGrid/data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.d.ts +0 -21
  232. package/dist/components/TaskGrid/data-providers/saved-query-data-provider/TalxisSavedQueryDataProvider.js.map +0 -1
  233. package/dist/components/TaskGrid/data-providers/saved-query-data-provider/index.d.ts +0 -2
  234. package/dist/components/TaskGrid/data-providers/saved-query-data-provider/index.js +0 -3
  235. package/dist/components/TaskGrid/data-providers/task-data-provider/TaskDataProvider.js.map +0 -1
  236. package/dist/components/TaskGrid/data-providers/task-data-provider/record-tree/RecordTree.js.map +0 -1
  237. package/dist/components/TaskGrid/data-providers/task-data-provider/record-tree/patchDataBuilderPrepare.js.map +0 -1
  238. /package/dist/components/TaskGrid/{data-providers/task-data-provider → components/grid/cell-renderers/lookup-many}/index.js.map +0 -0
  239. /package/dist/components/TaskGrid/{data-providers/task-data-provider/record-tree → components/grid/lookup-many/colorful-lookup-many/components/multi-value-container}/index.js.map +0 -0
  240. /package/dist/components/TaskGrid/{data-providers → extensions/dataverse}/index.js.map +0 -0
  241. /package/dist/components/TaskGrid/{data-providers/custom-columns-data-provider → providers/custom-columns}/CustomColumnsDataProvider.js +0 -0
  242. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/index.d.ts +0 -0
  243. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/index.js +0 -0
  244. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/RecordTree.d.ts +0 -0
  245. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/index.d.ts +0 -0
  246. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/index.js +0 -0
  247. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/patchDataBuilderPrepare.d.ts +0 -0
  248. /package/dist/components/TaskGrid/{data-providers/task-data-provider → providers/task}/record-tree/patchDataBuilderPrepare.js +0 -0
@@ -0,0 +1,122 @@
1
+ /// <reference types="@types/powerapps-component-framework" />
2
+ /// <reference types="@types/xrm" />
3
+ import { IRecord, IRawRecord, IAvailableColumnOptions, IAvailableRelatedColumn, IRecordSaveOperationResult, IColumn } from "@talxis/client-libraries";
4
+ import { ITaskDataProviderStrategy, ITaskDataProvider, IDeleteTasksResult, IEditTasksResult } from "../../providers";
5
+ interface IFormParameters {
6
+ pageInput: Xrm.Navigation.PageInputEntityRecord;
7
+ navigationOptions: Xrm.Navigation.NavigationOptions;
8
+ }
9
+ /** Constructor parameters for {@link DataverseTaskStrategy}. */
10
+ export interface IDataverseTaskStrategyParams {
11
+ /** FetchXML used to load tasks. May contain Liquid template variables (e.g. `{{ projectId }}`). */
12
+ fetchXml: string;
13
+ /** When `true`, new tasks are created inline in the grid row without opening a form dialog. Defaults to `true`. */
14
+ isInlineCreateEnabled?: boolean;
15
+ /** When `false`, the edit form is opened in read-only mode. Defaults to `true`. */
16
+ isEditingEnabled?: boolean;
17
+ /** When `true`, deleting a task will also delete its child tasks. Defaults to `false`. */
18
+ isCascadeDeleteEnabled?: boolean;
19
+ /** When `true`, deleting tasks with children is enabled. Defaults to `false`. */
20
+ isDeletingTasksWithChildrenEnabled?: boolean;
21
+ /** Form ID to open when editing a single existing task. */
22
+ editFormId?: string;
23
+ /** Form ID to open when creating a new task via dialog (non-inline). */
24
+ createFormId?: string;
25
+ /** Form ID to open when bulk-editing multiple selected tasks. */
26
+ bulkEditFormId?: string;
27
+ /** Project record reference. When provided, new tasks are pre-linked to this project. */
28
+ projectReference?: ComponentFramework.EntityReference;
29
+ /** When set, the task hierarchy is rooted at this task ID. */
30
+ rootTaskId?: string;
31
+ /**
32
+ * Optional hook to intercept and override the `Xrm.Navigation.navigateTo` parameters for
33
+ * any form operation (`create`, `edit`, `bulkEdit`, `open`).
34
+ * Return the modified `pageInput` and `navigationOptions` to customize the dialog.
35
+ */
36
+ formStrategy?: {
37
+ onGetFormParameters?: (operation: 'create' | 'edit' | 'bulkEdit' | 'open', defaultParameters: IFormParameters) => IFormParameters;
38
+ };
39
+ }
40
+ /** Extends {@link ITaskDataProviderStrategy} with a Dataverse-specific accessor for the project reference. */
41
+ export interface IDataverseTaskStrategy extends ITaskDataProviderStrategy {
42
+ /** Returns the resolved project entity reference, or `null` if no project was provided at construction time. */
43
+ getProjectReference(): ComponentFramework.EntityReference | null;
44
+ }
45
+ /**
46
+ * Ready-to-use {@link ITaskDataProviderStrategy} implementation for the Dataverse / Talxis platform.
47
+ *
48
+ * Handles all task CRUD operations, drag-and-drop reordering (via LexoRank), template-based creation,
49
+ * and lookup-many column rendering — all backed by the Xrm WebApi and FetchXML.
50
+ *
51
+ * Normally instantiated automatically by {@link DataverseTaskGridDescriptor}. Construct directly only
52
+ * when you need to pass a custom `formStrategy` or override specific behaviour.
53
+ */
54
+ export declare class DataverseTaskStrategy implements IDataverseTaskStrategy {
55
+ private _fetchXml;
56
+ private _entitySetName;
57
+ private _entityName;
58
+ private _projectReference?;
59
+ private _projectMetadata?;
60
+ private _rootTaskId?;
61
+ private _taskTree;
62
+ private _provider;
63
+ private _editFormId?;
64
+ private _createFormId?;
65
+ private _bulkEditFormId?;
66
+ private _fetchXmlDataProvider;
67
+ private _isInlineCreateEnabled;
68
+ private _isEditingEnabled;
69
+ private _isDeletingTasksWithChildrenEnabled;
70
+ private _isCascadeDeleteEnabled;
71
+ private _lookupManyColumns;
72
+ private _lookupManyHandlers;
73
+ private _getFormParameters;
74
+ /** @param params — see {@link IDataverseTaskStrategyParams} for full documentation of each option. */
75
+ constructor(params: IDataverseTaskStrategyParams);
76
+ onGetRawRecords(ids: string[], select?: string): Promise<IRawRecord[]>;
77
+ /** Returns the project entity reference resolved during `onInitialize`, or `null` when none was provided. */
78
+ getProjectReference(): ComponentFramework.EntityReference | null;
79
+ private _harmonizeLookupManyData;
80
+ private _convertLookupManyToEntityReference;
81
+ private _getRawRecordsByIds;
82
+ onInitialize(provider: ITaskDataProvider): Promise<{
83
+ columns: IColumn[];
84
+ rawData: IRawRecord[];
85
+ metadata: any;
86
+ }>;
87
+ private _getLookupManyColumns;
88
+ private _restoreVirtualColumnMetadata;
89
+ private _injectLookupManyFilterOperators;
90
+ private _getFieldMapping;
91
+ private _getFetchXml;
92
+ onGetAvailableColumns(options?: IAvailableColumnOptions): Promise<IColumn[]>;
93
+ onGetAvailableRelatedColumns(): Promise<IAvailableRelatedColumn[]>;
94
+ onGetQuickFindColumns(): string[];
95
+ onCreateTask(parentTaskId?: string): Promise<IRawRecord | null>;
96
+ onDeleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null>;
97
+ onCreateTemplateFromTask(taskId: string): Promise<IRawRecord | null>;
98
+ onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null>;
99
+ onEditTasks(taskIds: string[]): Promise<IEditTasksResult | null>;
100
+ onMoveTask(movingTaskId: string, movingToTaskId: string, position: "above" | "below" | "child"): Promise<IRawRecord[] | null>;
101
+ /**
102
+ * Saves a single dirty field on a task record.
103
+ * Lookup-many fields are persisted through their dedicated {@link LookupManyHandler}; all other fields use the standard FetchXML provider save path.
104
+ * TaskGrid uses auto-save, so exactly one dirty field is expected per call.
105
+ */
106
+ onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult>;
107
+ /** Returns `true` when the task's `stateCode` attribute equals `0` (active). */
108
+ onIsRecordActive(recordId: string): boolean;
109
+ /** Opens the task record in a side dialog. When `context.columnName` is a lookup-many column, the dialog is focused on that column. */
110
+ onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: {
111
+ columnName?: string;
112
+ }): Promise<void>;
113
+ /** Returns the root task ID supplied at construction time, used to scope the displayed hierarchy. */
114
+ onGetRootTaskId?(): string | undefined;
115
+ private _getNavigationalPropertyName;
116
+ private _getFormNavigationOptions;
117
+ private _getLookupManyHandlerForColumn;
118
+ private _editSingleTask;
119
+ private _editMultipleTasks;
120
+ private _updateStackRank;
121
+ }
122
+ export {};
@@ -0,0 +1,453 @@
1
+ import { FetchXmlDataProvider, Operators, DataTypes, Sanitizer } from '@talxis/client-libraries';
2
+ import { LexoRank } from 'lexorank';
3
+ import { Liquid } from 'liquidjs';
4
+ import { LookupManyHandler, LOOKUP_MANY_COLUMN_NAME_SUFFIX } from './lookup-many/LookupManyHandler.js';
5
+
6
+ const LIQUID = new Liquid();
7
+ /**
8
+ * Ready-to-use {@link ITaskDataProviderStrategy} implementation for the Dataverse / Talxis platform.
9
+ *
10
+ * Handles all task CRUD operations, drag-and-drop reordering (via LexoRank), template-based creation,
11
+ * and lookup-many column rendering — all backed by the Xrm WebApi and FetchXML.
12
+ *
13
+ * Normally instantiated automatically by {@link DataverseTaskGridDescriptor}. Construct directly only
14
+ * when you need to pass a custom `formStrategy` or override specific behaviour.
15
+ */
16
+ class DataverseTaskStrategy {
17
+ /** @param params — see {@link IDataverseTaskStrategyParams} for full documentation of each option. */
18
+ constructor(params) {
19
+ this._lookupManyColumns = [];
20
+ this._lookupManyHandlers = {};
21
+ this._fetchXml = params.fetchXml;
22
+ this._projectReference = params.projectReference;
23
+ this._editFormId = params.editFormId;
24
+ this._rootTaskId = params.rootTaskId;
25
+ this._createFormId = params.createFormId;
26
+ this._bulkEditFormId = params.bulkEditFormId;
27
+ this._isInlineCreateEnabled = params.isInlineCreateEnabled ?? true;
28
+ this._isEditingEnabled = params.isEditingEnabled ?? true;
29
+ this._isDeletingTasksWithChildrenEnabled = params.isDeletingTasksWithChildrenEnabled ?? false;
30
+ this._isCascadeDeleteEnabled = params.isCascadeDeleteEnabled ?? false;
31
+ this._getFormParameters = params.formStrategy?.onGetFormParameters ?? ((operation, defaultParameters) => defaultParameters);
32
+ }
33
+ async onGetRawRecords(ids, select) {
34
+ let records = [];
35
+ const expands = await Promise.all(this._lookupManyColumns.map(async (col) => {
36
+ const referencedEntityNavigationPropertyName = col.navigationPropertyName;
37
+ const handler = this._lookupManyHandlers[col.name] ?? new LookupManyHandler({
38
+ entityName: this._entityName,
39
+ navigationPropertyName: referencedEntityNavigationPropertyName
40
+ });
41
+ this._lookupManyHandlers[col.name] = handler;
42
+ await handler.init();
43
+ return handler.getExpand();
44
+ }));
45
+ const parts = [];
46
+ if (select)
47
+ parts.push(`$select=${select}`);
48
+ if (expands.length > 0)
49
+ parts.push(`$expand=${expands.join(',')}`);
50
+ const query = `?$filter=Microsoft.Dynamics.CRM.In(PropertyName='${this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute}', PropertyValues=[${ids.map((id) => `'${id}'`).join(',')}])${parts.length > 0 ? `&${parts.join('&')}` : ''}`;
51
+ records = await this._getRawRecordsByIds({ ids, query });
52
+ if (this._lookupManyColumns.length > 0) {
53
+ await Promise.all(records.map(record => this._harmonizeLookupManyData(record)));
54
+ }
55
+ return records;
56
+ }
57
+ /** Returns the project entity reference resolved during `onInitialize`, or `null` when none was provided. */
58
+ getProjectReference() {
59
+ return this._projectReference ?? null;
60
+ }
61
+ async _harmonizeLookupManyData(record) {
62
+ const nextLinkSuffix = '@odata.nextLink';
63
+ for (const lookupManyCol of this._lookupManyColumns) {
64
+ const referencedEntityNavigationPropertyName = lookupManyCol.navigationPropertyName;
65
+ record[lookupManyCol.name] = await this._convertLookupManyToEntityReference(record[referencedEntityNavigationPropertyName], lookupManyCol);
66
+ delete record[referencedEntityNavigationPropertyName];
67
+ delete record[`${referencedEntityNavigationPropertyName}${nextLinkSuffix}`];
68
+ }
69
+ return record;
70
+ }
71
+ async _convertLookupManyToEntityReference(data, col) {
72
+ const metadata = await window.Xrm.Utility.getEntityMetadata(col.metadata?.Targets[0]);
73
+ return data.map(record => {
74
+ return {
75
+ id: {
76
+ guid: record[metadata.PrimaryIdAttribute]
77
+ },
78
+ name: record[metadata.PrimaryNameAttribute],
79
+ etn: metadata.LogicalName,
80
+ rawData: record
81
+ };
82
+ });
83
+ }
84
+ async _getRawRecordsByIds(params) {
85
+ const maxIdsPerRequest = 800;
86
+ const batches = [];
87
+ const { ids, query } = params;
88
+ let currentBatch = [];
89
+ for (const [i, taskId] of Object.entries(ids)) {
90
+ if (currentBatch.length <= maxIdsPerRequest) {
91
+ currentBatch.push(taskId);
92
+ }
93
+ else {
94
+ batches.push(currentBatch);
95
+ currentBatch = [taskId];
96
+ }
97
+ if (+i + 1 === ids.length) {
98
+ batches.push(currentBatch);
99
+ }
100
+ }
101
+ const batchedTasks = await Promise.all(batches.map(async (batchIds) => {
102
+ const { entities } = await window.Xrm.WebApi.retrieveMultipleRecords(this._entityName, query);
103
+ return entities;
104
+ }));
105
+ return batchedTasks.flat();
106
+ }
107
+ async onInitialize(provider) {
108
+ this._provider = provider;
109
+ this._taskTree = provider.getRecordTree();
110
+ this._fetchXml = this._getFetchXml();
111
+ const virtualColumns = structuredClone(provider.getColumns().filter(col => col.isVirtual));
112
+ this._fetchXmlDataProvider = new FetchXmlDataProvider({ fetchXml: this._fetchXml, loadAllRecords: true });
113
+ this._fetchXmlDataProvider.setColumns(provider.getColumns());
114
+ this._fetchXmlDataProvider.setLinking(provider.getLinking());
115
+ await this._fetchXmlDataProvider.refresh();
116
+ this._entityName = this._fetchXmlDataProvider.getEntityName();
117
+ this._entitySetName = this._fetchXmlDataProvider.getMetadata().EntitySetName;
118
+ this._lookupManyColumns = this._getLookupManyColumns();
119
+ const columns = this._fetchXmlDataProvider.getColumns();
120
+ this._restoreVirtualColumnMetadata(virtualColumns, columns);
121
+ this._injectLookupManyFilterOperators(columns);
122
+ const metadata = this._fetchXmlDataProvider.getMetadata();
123
+ const fetchXmlProviderData = this._fetchXmlDataProvider.getRawData();
124
+ const enrichedData = await this.onGetRawRecords(this._fetchXmlDataProvider.getSortedRecordIds(), this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute);
125
+ const finalRawData = fetchXmlProviderData.map((record, i) => {
126
+ return {
127
+ ...enrichedData[i],
128
+ ...record,
129
+ };
130
+ });
131
+ if (this._projectReference) {
132
+ this._projectMetadata = await window.Xrm.Utility.getEntityMetadata(this._projectReference.etn);
133
+ }
134
+ return {
135
+ rawData: finalRawData,
136
+ columns,
137
+ metadata
138
+ };
139
+ }
140
+ _getLookupManyColumns() {
141
+ return this._fetchXmlDataProvider.getColumns().filter(col => col.name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)).map(col => {
142
+ return {
143
+ ...col,
144
+ navigationPropertyName: col.name.replace(LOOKUP_MANY_COLUMN_NAME_SUFFIX, '')
145
+ };
146
+ });
147
+ }
148
+ //fetch xml provider will override virtual column metadata by default, so we need to restore it after initialization.
149
+ _restoreVirtualColumnMetadata(virtualColumns, columns) {
150
+ columns.map((col, i) => {
151
+ const virtualCol = virtualColumns.find(virtualCol => virtualCol.name === col.name);
152
+ if (virtualCol) {
153
+ columns[i] = virtualCol;
154
+ }
155
+ });
156
+ }
157
+ _injectLookupManyFilterOperators(columns) {
158
+ columns.map(col => {
159
+ if (col.name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)) {
160
+ col.metadata = {
161
+ ...col.metadata,
162
+ SupportedFilterConditionOperators: Operators.GetOperatorsForDataType(DataTypes.MultiSelectOptionSet).map(op => op.Value)
163
+ };
164
+ }
165
+ });
166
+ }
167
+ _getFieldMapping() {
168
+ return this._provider.getNativeColumns();
169
+ }
170
+ _getFetchXml() {
171
+ return LIQUID.parseAndRenderSync(this._fetchXml, {
172
+ projectId: this._projectReference?.id.guid,
173
+ });
174
+ }
175
+ async onGetAvailableColumns(options) {
176
+ return this._fetchXmlDataProvider.getAvailableColumns(options);
177
+ }
178
+ async onGetAvailableRelatedColumns() {
179
+ return this._fetchXmlDataProvider.getAvailableRelatedColumns();
180
+ }
181
+ onGetQuickFindColumns() {
182
+ return [];
183
+ }
184
+ async onCreateTask(parentTaskId) {
185
+ const data = {};
186
+ let pageInput = {
187
+ pageType: 'entityrecord',
188
+ entityName: this._entityName,
189
+ data: data,
190
+ formId: this._createFormId
191
+ };
192
+ //prefill project
193
+ if (this._projectReference) {
194
+ const projectIdColumnName = this._getFieldMapping().projectId;
195
+ data[`${projectIdColumnName}`] = this._projectReference.id.guid;
196
+ data[`${projectIdColumnName}name`] = this._projectReference.name;
197
+ data[`${projectIdColumnName}type`] = this._projectReference.etn;
198
+ }
199
+ //prefill parent task
200
+ if (parentTaskId) {
201
+ const parentIdColumnName = this._getFieldMapping().parentId;
202
+ data[`${parentIdColumnName}`] = parentTaskId;
203
+ data[`${parentIdColumnName}name`] = this._provider.getRecordsMap()[parentTaskId].getNamedReference().name;
204
+ data[`${parentIdColumnName}type`] = this._entityName;
205
+ }
206
+ const node = this._taskTree.getNode(parentTaskId ?? null);
207
+ let payload = {};
208
+ payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ previousTaskId: undefined, nextTaskId: node.directChildren[0]?.getRecordId(), skipSave: true });
209
+ if (this._projectReference) {
210
+ payload[`${await this._getNavigationalPropertyName(this._projectReference.etn, this._getFieldMapping().projectId)}@odata.bind`] = `/${this._projectMetadata?.EntitySetName}(${this._projectReference.id.guid})`;
211
+ }
212
+ if (parentTaskId) {
213
+ payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${parentTaskId})`;
214
+ }
215
+ if (this._isInlineCreateEnabled) {
216
+ const result = await window.Xrm.WebApi.createRecord(this._entityName, payload);
217
+ const rawRecord = (await this.onGetRawRecords([result.id]))[0];
218
+ return rawRecord;
219
+ }
220
+ const { pageInput: resolvedPageInput, navigationOptions: resolvedNavigationOptions } = this._getFormParameters('create', {
221
+ pageInput,
222
+ navigationOptions: this._getFormNavigationOptions()
223
+ });
224
+ const navigateToResult = await Xrm.Navigation.navigateTo(resolvedPageInput, resolvedNavigationOptions);
225
+ if (navigateToResult.savedEntityReference) {
226
+ const entityReference = Sanitizer.Lookup.getEntityReference(navigateToResult.savedEntityReference[0]);
227
+ await window.Xrm.WebApi.updateRecord(this._entityName, entityReference.id.guid, payload);
228
+ const rawRecord = (await this.onGetRawRecords([entityReference.id.guid]))[0];
229
+ return rawRecord;
230
+ }
231
+ else {
232
+ return null;
233
+ }
234
+ }
235
+ async onDeleteTasks(taskIds) {
236
+ const allTaskIds = new Set(taskIds);
237
+ let success = true;
238
+ const notDeletableTaskIds = [];
239
+ if (this._isCascadeDeleteEnabled) {
240
+ for (const taskId of taskIds) {
241
+ const children = this._taskTree.getNode(taskId)?.allChildren.map(c => c.getRecordId()) ?? [];
242
+ children.map(id => allTaskIds.add(id));
243
+ }
244
+ }
245
+ if (!this._isDeletingTasksWithChildrenEnabled) {
246
+ for (const taskId of allTaskIds) {
247
+ if (this._taskTree.hasChildren(taskId)) {
248
+ success = false;
249
+ allTaskIds.delete(taskId);
250
+ notDeletableTaskIds.push(taskId);
251
+ }
252
+ }
253
+ }
254
+ const result = await this._fetchXmlDataProvider.deleteRecords([...allTaskIds]);
255
+ return {
256
+ success: result.success && success,
257
+ deletedTaskIds: [...allTaskIds],
258
+ errors: [...result.results.filter(result => !result.success).map(result => {
259
+ return {
260
+ id: result.recordId,
261
+ error: result.errorMessage
262
+ };
263
+ }), ...notDeletableTaskIds.map(id => {
264
+ return {
265
+ id,
266
+ //TODO: localize
267
+ error: 'Cannot delete task with children.'
268
+ };
269
+ })]
270
+ };
271
+ }
272
+ onCreateTemplateFromTask(taskId) {
273
+ throw new Error("Method not implemented.");
274
+ }
275
+ onCreateTasksFromTemplate(templateId, parentTaskId) {
276
+ throw new Error("Method not implemented.");
277
+ }
278
+ async onEditTasks(taskIds) {
279
+ if (taskIds.length === 1) {
280
+ const result = await this._editSingleTask(taskIds[0]);
281
+ if (!result)
282
+ return null;
283
+ return {
284
+ success: true,
285
+ updatedRecords: [result]
286
+ };
287
+ }
288
+ return this._editMultipleTasks(taskIds);
289
+ }
290
+ async onMoveTask(movingTaskId, movingToTaskId, position) {
291
+ const movingToRecord = this._provider.getRecordsMap()[movingToTaskId];
292
+ let payload = {};
293
+ if (position === 'child') {
294
+ //change parent
295
+ payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${movingToTaskId})`;
296
+ const firstChild = this._taskTree.getNode(movingToTaskId).directChildren
297
+ .find(c => c.getRecordId() !== movingTaskId);
298
+ if (firstChild) {
299
+ //change stack rank to be before first child
300
+ payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: undefined, nextTaskId: firstChild.getRecordId(), skipSave: true });
301
+ }
302
+ await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);
303
+ const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];
304
+ return [rawRecord];
305
+ }
306
+ else {
307
+ const movingToRecordParent = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())?.parent;
308
+ payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = movingToRecordParent ? `/${this._entitySetName}(${movingToRecordParent.getRecordId()})` : null;
309
+ const movingToRecordNode = this._taskTree.getNodeMap().get(movingToRecord.getRecordId());
310
+ const siblings = this._taskTree.getNodeMap().get(movingToRecordParent?.getRecordId() ?? null)?.directChildren ?? [];
311
+ let prevSiblingId;
312
+ let nextSiblingId;
313
+ if (position === 'above') {
314
+ prevSiblingId = siblings[movingToRecordNode.index - 1]?.getRecordId();
315
+ nextSiblingId = movingToRecord.getRecordId();
316
+ }
317
+ else {
318
+ prevSiblingId = movingToRecord.getRecordId();
319
+ nextSiblingId = siblings[movingToRecordNode.index + 1]?.getRecordId();
320
+ }
321
+ payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: prevSiblingId, nextTaskId: nextSiblingId, skipSave: true });
322
+ await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);
323
+ const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];
324
+ return [rawRecord];
325
+ }
326
+ }
327
+ /**
328
+ * Saves a single dirty field on a task record.
329
+ * Lookup-many fields are persisted through their dedicated {@link LookupManyHandler}; all other fields use the standard FetchXML provider save path.
330
+ * TaskGrid uses auto-save, so exactly one dirty field is expected per call.
331
+ */
332
+ async onRecordSave(record) {
333
+ const dirtyField = record.getFields().find(field => field.isDirty());
334
+ if (dirtyField?.getColumn().name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)) {
335
+ const handler = this._getLookupManyHandlerForColumn(dirtyField.getColumn().name);
336
+ return handler.saveRecord(record, dirtyField.getColumn().name);
337
+ }
338
+ else {
339
+ return this._fetchXmlDataProvider.onRecordSave(record);
340
+ }
341
+ }
342
+ /** Returns `true` when the task's `stateCode` attribute equals `0` (active). */
343
+ onIsRecordActive(recordId) {
344
+ const record = this._provider.getRecordsMap()[recordId];
345
+ return record.getValue(this._provider.getNativeColumns().stateCode) == 0;
346
+ }
347
+ /** Opens the task record in a side dialog. When `context.columnName` is a lookup-many column, the dialog is focused on that column. */
348
+ async onOpenDatasetItem(entityReference, context) {
349
+ const { pageInput, navigationOptions } = this._getFormParameters('open', {
350
+ pageInput: {
351
+ pageType: 'entityrecord',
352
+ entityName: entityReference.etn,
353
+ entityId: entityReference.id.guid,
354
+ },
355
+ navigationOptions: this._getFormNavigationOptions()
356
+ });
357
+ await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
358
+ }
359
+ /** Returns the root task ID supplied at construction time, used to scope the displayed hierarchy. */
360
+ onGetRootTaskId() {
361
+ return this._rootTaskId;
362
+ }
363
+ async _getNavigationalPropertyName(referencedEntityName, referencingAttribute) {
364
+ const metadata = await window.Xrm.Utility.getEntityMetadata(this._entityName);
365
+ const relationship = metadata.ManyToOneRelationships.getAll().find((rel) => rel.ReferencedEntity === referencedEntityName &&
366
+ rel.ReferencingAttribute === referencingAttribute);
367
+ if (!relationship) {
368
+ throw new Error(`Could not find many-to-one relationship targeting ${referencedEntityName} on ${metadata.LogicalName}`);
369
+ }
370
+ return relationship.ReferencingEntityNavigationPropertyName;
371
+ }
372
+ _getFormNavigationOptions() {
373
+ return {
374
+ target: 2,
375
+ width: { value: 80, unit: '%' },
376
+ position: 1,
377
+ };
378
+ }
379
+ _getLookupManyHandlerForColumn(colName) {
380
+ const handler = this._lookupManyHandlers[colName];
381
+ if (!handler) {
382
+ throw new Error(`No LookupManyHandler found for column ${colName}`);
383
+ }
384
+ return handler;
385
+ }
386
+ async _editSingleTask(recordId) {
387
+ const { pageInput, navigationOptions } = this._getFormParameters('edit', {
388
+ pageInput: {
389
+ pageType: 'entityrecord',
390
+ entityName: this._entityName,
391
+ entityId: recordId,
392
+ formId: this._editFormId,
393
+ data: {
394
+ isEditingEnabled: this._isEditingEnabled
395
+ }
396
+ },
397
+ navigationOptions: this._getFormNavigationOptions()
398
+ });
399
+ await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
400
+ const result = await this.onGetRawRecords([recordId]);
401
+ return result[0];
402
+ }
403
+ async _editMultipleTasks(recordIds) {
404
+ const { pageInput, navigationOptions } = this._getFormParameters('bulkEdit', {
405
+ //@ts-ignore - not documented, passing of record id array is possible in Power Apps - https://butenko.pro/2021/10/14/howto-open-bulk-editing-of-records-using-xrm-navigation-navigateto/
406
+ pageInput: {
407
+ //@ts-ignore - typings
408
+ pageType: 'bulkedit',
409
+ entityName: this._entityName,
410
+ entityIds: recordIds,
411
+ formId: this._bulkEditFormId
412
+ },
413
+ navigationOptions: {
414
+ target: 2,
415
+ position: 2,
416
+ }
417
+ });
418
+ await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);
419
+ const rawRecords = await this.onGetRawRecords(recordIds);
420
+ return {
421
+ success: true,
422
+ updatedRecords: rawRecords
423
+ };
424
+ }
425
+ async _updateStackRank(params) {
426
+ const stackRankCol = this._getFieldMapping().stackRank;
427
+ const rawDataMap = this._provider.getRawDataMap();
428
+ const prevRankStr = params.previousTaskId ? rawDataMap[params.previousTaskId]?.[stackRankCol] : undefined;
429
+ const nextRankStr = params.nextTaskId ? rawDataMap[params.nextTaskId]?.[stackRankCol] : undefined;
430
+ let newRank;
431
+ if (prevRankStr && nextRankStr) {
432
+ newRank = LexoRank.parse(prevRankStr).between(LexoRank.parse(nextRankStr)).format();
433
+ }
434
+ else if (nextRankStr) {
435
+ newRank = LexoRank.parse(nextRankStr).genPrev().format();
436
+ }
437
+ else if (prevRankStr) {
438
+ newRank = LexoRank.parse(prevRankStr).genNext().format();
439
+ }
440
+ else {
441
+ newRank = LexoRank.middle().format();
442
+ }
443
+ if (!params.skipSave && params.recordId) {
444
+ await window.Xrm.WebApi.updateRecord(this._entityName, params.recordId, {
445
+ [stackRankCol]: newRank
446
+ });
447
+ }
448
+ return newRank;
449
+ }
450
+ }
451
+
452
+ export { DataverseTaskStrategy };
453
+ //# sourceMappingURL=DataverseTaskStrategy.js.map