@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 @@
1
+ {"version":3,"file":"DataverseTaskStrategy.js","sources":["../../../../../src/components/TaskGrid/extensions/dataverse/DataverseTaskStrategy.ts"],"sourcesContent":["import { IRecord, IFetchXmlDataProvider, IRawRecord, FetchXmlDataProvider, FetchXmlBuilder, IAvailableColumnOptions, IAvailableRelatedColumn, IRecordSaveOperationResult, IColumn, Sanitizer, Operators, DataTypes } from \"@talxis/client-libraries\";\nimport { ITaskDataProviderStrategy, ITaskDataProvider, IDeleteTasksResult, IEditTasksResult } from \"../../providers\";\nimport { IRecordTree } from \"../../providers/task/record-tree\";\nimport { LexoRank } from \"lexorank\";\nimport { Liquid } from \"liquidjs\";\nimport { IFieldMapping } from \"./DataverseTaskGridDescriptor\";\nimport { LOOKUP_MANY_COLUMN_NAME_SUFFIX, LookupManyHandler } from \"./lookup-many/LookupManyHandler\";\n\n\ninterface IFormParameters {\n pageInput: Xrm.Navigation.PageInputEntityRecord;\n navigationOptions: Xrm.Navigation.NavigationOptions;\n}\n\n/** Constructor parameters for {@link DataverseTaskStrategy}. */\nexport interface IDataverseTaskStrategyParams {\n /** FetchXML used to load tasks. May contain Liquid template variables (e.g. `{{ projectId }}`). */\n fetchXml: string;\n /** When `true`, new tasks are created inline in the grid row without opening a form dialog. Defaults to `true`. */\n isInlineCreateEnabled?: boolean;\n /** When `false`, the edit form is opened in read-only mode. Defaults to `true`. */\n isEditingEnabled?: boolean;\n /** When `true`, deleting a task will also delete its child tasks. Defaults to `false`. */\n isCascadeDeleteEnabled?: boolean;\n /** When `true`, deleting tasks with children is enabled. Defaults to `false`. */\n isDeletingTasksWithChildrenEnabled?: boolean;\n /** Form ID to open when editing a single existing task. */\n editFormId?: string;\n /** Form ID to open when creating a new task via dialog (non-inline). */\n createFormId?: string;\n /** Form ID to open when bulk-editing multiple selected tasks. */\n bulkEditFormId?: string;\n /** Project record reference. When provided, new tasks are pre-linked to this project. */\n projectReference?: ComponentFramework.EntityReference;\n /** When set, the task hierarchy is rooted at this task ID. */\n rootTaskId?: string;\n /**\n * Optional hook to intercept and override the `Xrm.Navigation.navigateTo` parameters for\n * any form operation (`create`, `edit`, `bulkEdit`, `open`).\n * Return the modified `pageInput` and `navigationOptions` to customize the dialog.\n */\n formStrategy?: {\n onGetFormParameters?: (operation: 'create' | 'edit' | 'bulkEdit' | 'open', defaultParameters: IFormParameters) => IFormParameters;\n }\n}\n\ninterface ILookupManyColumn extends IColumn {\n navigationPropertyName: string\n}\n\n/** Extends {@link ITaskDataProviderStrategy} with a Dataverse-specific accessor for the project reference. */\nexport interface IDataverseTaskStrategy extends ITaskDataProviderStrategy {\n /** Returns the resolved project entity reference, or `null` if no project was provided at construction time. */\n getProjectReference(): ComponentFramework.EntityReference | null;\n}\n\nconst LIQUID = new Liquid();\n\n/**\n * Ready-to-use {@link ITaskDataProviderStrategy} implementation for the Dataverse / Talxis platform.\n *\n * Handles all task CRUD operations, drag-and-drop reordering (via LexoRank), template-based creation,\n * and lookup-many column rendering — all backed by the Xrm WebApi and FetchXML.\n *\n * Normally instantiated automatically by {@link DataverseTaskGridDescriptor}. Construct directly only\n * when you need to pass a custom `formStrategy` or override specific behaviour.\n */\nexport class DataverseTaskStrategy implements IDataverseTaskStrategy {\n private _fetchXml: string;\n private _entitySetName!: string;\n private _entityName!: string;\n private _projectReference?: ComponentFramework.EntityReference;\n private _projectMetadata?: Xrm.Metadata.EntityMetadata;\n private _rootTaskId?: string;\n private _taskTree!: IRecordTree;\n private _provider!: ITaskDataProvider;\n private _editFormId?: string;\n private _createFormId?: string\n private _bulkEditFormId?: string;\n private _fetchXmlDataProvider!: IFetchXmlDataProvider;\n private _isInlineCreateEnabled: boolean;\n private _isEditingEnabled: boolean;\n private _isDeletingTasksWithChildrenEnabled: boolean;\n private _isCascadeDeleteEnabled: boolean;\n private _lookupManyColumns: ILookupManyColumn[] = [];\n private _lookupManyHandlers: { [colName: string]: LookupManyHandler } = {};\n private _getFormParameters: (operation: 'create' | 'edit' | 'bulkEdit' | 'open', defaultParameters: IFormParameters) => IFormParameters;\n\n\n /** @param params — see {@link IDataverseTaskStrategyParams} for full documentation of each option. */\n constructor(params: IDataverseTaskStrategyParams) {\n this._fetchXml = params.fetchXml;\n this._projectReference = params.projectReference;\n this._editFormId = params.editFormId;\n this._rootTaskId = params.rootTaskId;\n this._createFormId = params.createFormId;\n this._bulkEditFormId = params.bulkEditFormId;\n this._isInlineCreateEnabled = params.isInlineCreateEnabled ?? true;\n this._isEditingEnabled = params.isEditingEnabled ?? true;\n this._isDeletingTasksWithChildrenEnabled = params.isDeletingTasksWithChildrenEnabled ?? false;\n this._isCascadeDeleteEnabled = params.isCascadeDeleteEnabled ?? false;\n this._getFormParameters = params.formStrategy?.onGetFormParameters ?? ((operation, defaultParameters) => defaultParameters);\n }\n\n public async onGetRawRecords(ids: string[], select?: string): Promise<IRawRecord[]> {\n let records: IRawRecord[] = [];\n const expands = await Promise.all(this._lookupManyColumns.map(async col => {\n const referencedEntityNavigationPropertyName = col.navigationPropertyName;\n const handler = this._lookupManyHandlers[col.name] ?? new LookupManyHandler({\n entityName: this._entityName,\n navigationPropertyName: referencedEntityNavigationPropertyName\n });\n this._lookupManyHandlers[col.name] = handler;\n await handler.init();\n return handler.getExpand();\n }));\n\n const parts: string[] = [];\n if (select) parts.push(`$select=${select}`);\n if (expands.length > 0) parts.push(`$expand=${expands.join(',')}`);\n\n const query = `?$filter=Microsoft.Dynamics.CRM.In(PropertyName='${this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute}', PropertyValues=[${ids.map((id) => `'${id}'`).join(',')}])${parts.length > 0 ? `&${parts.join('&')}` : ''}`;\n records = await this._getRawRecordsByIds({ ids, query });\n\n if (this._lookupManyColumns.length > 0) {\n await Promise.all(records.map(record => this._harmonizeLookupManyData(record)));\n }\n return records;\n }\n\n /** Returns the project entity reference resolved during `onInitialize`, or `null` when none was provided. */\n public getProjectReference(): ComponentFramework.EntityReference | null {\n return this._projectReference ?? null;\n }\n\n private async _harmonizeLookupManyData(record: IRawRecord): Promise<IRawRecord> {\n const nextLinkSuffix = '@odata.nextLink';\n for (const lookupManyCol of this._lookupManyColumns) {\n const referencedEntityNavigationPropertyName = lookupManyCol.navigationPropertyName;\n record[lookupManyCol.name] = await this._convertLookupManyToEntityReference(record[referencedEntityNavigationPropertyName], lookupManyCol);\n delete record[referencedEntityNavigationPropertyName];\n delete record[`${referencedEntityNavigationPropertyName}${nextLinkSuffix}`];\n }\n return record;\n }\n\n private async _convertLookupManyToEntityReference(data: IRawRecord[], col: IColumn): Promise<ComponentFramework.EntityReference[]> {\n const metadata = await window.Xrm.Utility.getEntityMetadata(col.metadata?.Targets[0]);\n return data.map(record => {\n return {\n id: {\n guid: record[metadata.PrimaryIdAttribute]\n },\n name: record[metadata.PrimaryNameAttribute],\n etn: metadata.LogicalName,\n rawData: record\n }\n });\n }\n\n private async _getRawRecordsByIds(params: { ids: string[], query: string }): Promise<IRawRecord[]> {\n const maxIdsPerRequest = 800;\n const batches: string[][] = [];\n const { ids, query } = params;\n\n let currentBatch: string[] = [];\n for (const [i, taskId] of Object.entries(ids)) {\n if (currentBatch.length <= maxIdsPerRequest) {\n currentBatch.push(taskId);\n } else {\n batches.push(currentBatch);\n currentBatch = [taskId];\n }\n if (+i + 1 === ids.length) {\n batches.push(currentBatch);\n }\n }\n\n const batchedTasks: ComponentFramework.WebApi.Entity[][] = await Promise.all(batches.map(async (batchIds) => {\n const { entities } = await window.Xrm.WebApi.retrieveMultipleRecords(\n this._entityName,\n query\n );\n return entities;\n }));\n return batchedTasks.flat();\n }\n\n public async onInitialize(provider: ITaskDataProvider): Promise<{ columns: IColumn[]; rawData: IRawRecord[]; metadata: any; }> {\n this._provider = provider;\n this._taskTree = provider.getRecordTree();\n this._fetchXml = this._getFetchXml();\n const virtualColumns = structuredClone(provider.getColumns().filter(col => col.isVirtual));\n this._fetchXmlDataProvider = new FetchXmlDataProvider({ fetchXml: this._fetchXml, loadAllRecords: true });\n this._fetchXmlDataProvider.setColumns(provider.getColumns());\n this._fetchXmlDataProvider.setLinking(provider.getLinking());\n await this._fetchXmlDataProvider.refresh();\n this._entityName = this._fetchXmlDataProvider.getEntityName();\n this._entitySetName = this._fetchXmlDataProvider.getMetadata().EntitySetName;\n this._lookupManyColumns = this._getLookupManyColumns();\n const columns = this._fetchXmlDataProvider.getColumns();\n this._restoreVirtualColumnMetadata(virtualColumns, columns);\n this._injectLookupManyFilterOperators(columns);\n const metadata = this._fetchXmlDataProvider.getMetadata();\n const fetchXmlProviderData = this._fetchXmlDataProvider.getRawData();\n const enrichedData = await this.onGetRawRecords(this._fetchXmlDataProvider.getSortedRecordIds(), this._fetchXmlDataProvider.getMetadata().PrimaryIdAttribute);\n const finalRawData = fetchXmlProviderData.map((record, i) => {\n return {\n ...enrichedData[i],\n ...record,\n }\n });\n\n if (this._projectReference) {\n this._projectMetadata = await window.Xrm.Utility.getEntityMetadata(this._projectReference.etn!);\n }\n return {\n rawData: finalRawData,\n columns,\n metadata\n }\n }\n\n private _getLookupManyColumns(): ILookupManyColumn[] {\n return this._fetchXmlDataProvider.getColumns().filter(col => col.name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)).map(col => {\n return {\n ...col,\n navigationPropertyName: col.name.replace(LOOKUP_MANY_COLUMN_NAME_SUFFIX, '')\n }\n })\n }\n\n //fetch xml provider will override virtual column metadata by default, so we need to restore it after initialization.\n private _restoreVirtualColumnMetadata(virtualColumns: IColumn[], columns: IColumn[]) {\n columns.map((col, i) => {\n const virtualCol = virtualColumns.find(virtualCol => virtualCol.name === col.name);\n if (virtualCol) {\n columns[i] = virtualCol;\n }\n });\n }\n\n private _injectLookupManyFilterOperators(columns: IColumn[]) {\n columns.map(col => {\n if (col.name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)) {\n col.metadata = {\n ...col.metadata,\n SupportedFilterConditionOperators: Operators.GetOperatorsForDataType(DataTypes.MultiSelectOptionSet).map(op => op.Value)\n }\n }\n })\n }\n\n private _getFieldMapping(): IFieldMapping {\n return this._provider.getNativeColumns() as IFieldMapping;\n }\n\n private _getFetchXml(): string {\n return LIQUID.parseAndRenderSync(this._fetchXml, {\n projectId: this._projectReference?.id.guid,\n })\n }\n\n public async onGetAvailableColumns(options?: IAvailableColumnOptions): Promise<IColumn[]> {\n return this._fetchXmlDataProvider.getAvailableColumns(options);\n }\n public async onGetAvailableRelatedColumns(): Promise<IAvailableRelatedColumn[]> {\n return this._fetchXmlDataProvider.getAvailableRelatedColumns();\n }\n public onGetQuickFindColumns(): string[] {\n return [];\n }\n public async onCreateTask(parentTaskId?: string): Promise<IRawRecord | null> {\n const data: { [key: string]: any } = {};\n let pageInput: Xrm.Navigation.PageInputEntityRecord = {\n pageType: 'entityrecord',\n entityName: this._entityName,\n data: data,\n formId: this._createFormId\n };\n //prefill project\n if (this._projectReference) {\n const projectIdColumnName = this._getFieldMapping().projectId;\n data[`${projectIdColumnName}`] = this._projectReference.id.guid;\n data[`${projectIdColumnName}name`] = this._projectReference.name;\n data[`${projectIdColumnName}type`] = this._projectReference.etn;\n }\n //prefill parent task\n if (parentTaskId) {\n const parentIdColumnName = this._getFieldMapping().parentId;\n data[`${parentIdColumnName}`] = parentTaskId;\n data[`${parentIdColumnName}name`] = this._provider.getRecordsMap()[parentTaskId].getNamedReference().name;\n data[`${parentIdColumnName}type`] = this._entityName;\n }\n const node = this._taskTree.getNode(parentTaskId ?? null);\n let payload: { [key: string]: any } = {};\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ previousTaskId: undefined, nextTaskId: node.directChildren[0]?.getRecordId(), skipSave: true });\n\n if (this._projectReference) {\n payload[`${await this._getNavigationalPropertyName(this._projectReference.etn!, this._getFieldMapping().projectId!)}@odata.bind`] = `/${this._projectMetadata?.EntitySetName}(${this._projectReference.id.guid})`;\n }\n if (parentTaskId) {\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${parentTaskId})`;\n }\n if (this._isInlineCreateEnabled) {\n const result = await window.Xrm.WebApi.createRecord(this._entityName, payload);\n const rawRecord = (await this.onGetRawRecords([result.id]))[0];\n return rawRecord;\n }\n\n const { pageInput: resolvedPageInput, navigationOptions: resolvedNavigationOptions } = this._getFormParameters('create', {\n pageInput,\n navigationOptions: this._getFormNavigationOptions()\n });\n const navigateToResult = await Xrm.Navigation.navigateTo(resolvedPageInput, resolvedNavigationOptions);\n if (navigateToResult.savedEntityReference) {\n const entityReference = Sanitizer.Lookup.getEntityReference(navigateToResult.savedEntityReference[0]);\n await window.Xrm.WebApi.updateRecord(this._entityName, entityReference.id.guid, payload);\n const rawRecord = (await this.onGetRawRecords([entityReference.id.guid]))[0];\n return rawRecord;\n }\n else {\n return null;\n }\n }\n public async onDeleteTasks(taskIds: string[]): Promise<IDeleteTasksResult | null> {\n const allTaskIds: Set<string> = new Set(taskIds);\n let success = true;\n const notDeletableTaskIds: string[] = [];\n if (this._isCascadeDeleteEnabled) {\n for (const taskId of taskIds) {\n const children = this._taskTree.getNode(taskId)?.allChildren.map(c => c.getRecordId()) ?? [];\n children.map(id => allTaskIds.add(id));\n }\n }\n if (!this._isDeletingTasksWithChildrenEnabled) {\n for (const taskId of allTaskIds) {\n if (this._taskTree.hasChildren(taskId)) {\n success = false;\n allTaskIds.delete(taskId);\n notDeletableTaskIds.push(taskId);\n }\n }\n }\n const result = await this._fetchXmlDataProvider.deleteRecords([...allTaskIds]);\n return {\n success: result.success && success,\n deletedTaskIds: [...allTaskIds],\n errors: [...result.results.filter(result => !result.success).map(result => {\n return {\n id: result.recordId,\n error: result.errorMessage\n }\n }), ...notDeletableTaskIds.map(id => {\n return {\n id,\n //TODO: localize\n error: 'Cannot delete task with children.'\n }\n })]\n }\n }\n public onCreateTemplateFromTask(taskId: string): Promise<IRawRecord | null> {\n throw new Error(\"Method not implemented.\");\n }\n public onCreateTasksFromTemplate(templateId: string, parentTaskId?: string): Promise<IRawRecord[] | null> {\n throw new Error(\"Method not implemented.\");\n }\n public async onEditTasks(taskIds: string[]): Promise<IEditTasksResult | null> {\n if (taskIds.length === 1) {\n const result = await this._editSingleTask(taskIds[0]);\n if (!result) return null;\n return {\n success: true,\n updatedRecords: [result]\n }\n }\n return this._editMultipleTasks(taskIds);\n }\n public async onMoveTask(movingTaskId: string, movingToTaskId: string, position: \"above\" | \"below\" | \"child\"): Promise<IRawRecord[] | null> {\n const movingToRecord = this._provider.getRecordsMap()[movingToTaskId];\n let payload: { [key: string]: any } = {};\n if (position === 'child') {\n //change parent\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = `/${this._entitySetName}(${movingToTaskId})`;\n const firstChild = this._taskTree.getNode(movingToTaskId).directChildren\n .find(c => c.getRecordId() !== movingTaskId);\n if (firstChild) {\n //change stack rank to be before first child\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: undefined, nextTaskId: firstChild.getRecordId(), skipSave: true });\n }\n await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);\n const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];\n return [rawRecord];\n }\n else {\n const movingToRecordParent = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())?.parent;\n payload[`${await this._getNavigationalPropertyName(this._entityName, this._getFieldMapping().parentId)}@odata.bind`] = movingToRecordParent ? `/${this._entitySetName}(${movingToRecordParent.getRecordId()})` : null;\n\n const movingToRecordNode = this._taskTree.getNodeMap().get(movingToRecord.getRecordId())!;\n const siblings = this._taskTree.getNodeMap().get(movingToRecordParent?.getRecordId() ?? null as any)?.directChildren ?? [];\n\n let prevSiblingId: string | undefined;\n let nextSiblingId: string | undefined;\n if (position === 'above') {\n prevSiblingId = siblings[movingToRecordNode.index - 1]?.getRecordId();\n nextSiblingId = movingToRecord.getRecordId();\n } else {\n prevSiblingId = movingToRecord.getRecordId();\n nextSiblingId = siblings[movingToRecordNode.index + 1]?.getRecordId();\n }\n payload[`${this._getFieldMapping().stackRank}`] = await this._updateStackRank({ recordId: movingTaskId, previousTaskId: prevSiblingId, nextTaskId: nextSiblingId, skipSave: true });\n await window.Xrm.WebApi.updateRecord(this._entityName, movingTaskId, payload);\n const rawRecord = (await this.onGetRawRecords([movingTaskId]))[0];\n return [rawRecord];\n }\n }\n\n /**\n * Saves a single dirty field on a task record.\n * Lookup-many fields are persisted through their dedicated {@link LookupManyHandler}; all other fields use the standard FetchXML provider save path.\n * TaskGrid uses auto-save, so exactly one dirty field is expected per call.\n */\n public async onRecordSave(record: IRecord): Promise<IRecordSaveOperationResult> {\n const dirtyField = record.getFields().find(field => field.isDirty());\n if (dirtyField?.getColumn().name.endsWith(LOOKUP_MANY_COLUMN_NAME_SUFFIX)) {\n const handler = this._getLookupManyHandlerForColumn(dirtyField.getColumn().name);\n return handler.saveRecord(record, dirtyField.getColumn().name);\n }\n else {\n return (<FetchXmlDataProvider>this._fetchXmlDataProvider).onRecordSave(record);\n }\n }\n\n /** Returns `true` when the task's `stateCode` attribute equals `0` (active). */\n public onIsRecordActive(recordId: string): boolean {\n const record = this._provider.getRecordsMap()[recordId];\n return record.getValue(this._provider.getNativeColumns().stateCode) == 0;\n }\n\n /** Opens the task record in a side dialog. When `context.columnName` is a lookup-many column, the dialog is focused on that column. */\n public async onOpenDatasetItem(entityReference: ComponentFramework.EntityReference, context?: { columnName?: string }): Promise<void> {\n const { pageInput, navigationOptions } = this._getFormParameters('open', {\n pageInput: {\n pageType: 'entityrecord',\n entityName: entityReference.etn!,\n entityId: entityReference.id.guid,\n },\n navigationOptions: this._getFormNavigationOptions()\n });\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n }\n /** Returns the root task ID supplied at construction time, used to scope the displayed hierarchy. */\n public onGetRootTaskId?(): string | undefined {\n return this._rootTaskId;\n }\n\n private async _getNavigationalPropertyName(referencedEntityName: string, referencingAttribute: string): Promise<string> {\n const metadata: any = await window.Xrm.Utility.getEntityMetadata(this._entityName);\n const relationship = metadata.ManyToOneRelationships.getAll().find((rel: any) =>\n rel.ReferencedEntity === referencedEntityName &&\n rel.ReferencingAttribute === referencingAttribute\n );\n if (!relationship) {\n throw new Error(`Could not find many-to-one relationship targeting ${referencedEntityName} on ${metadata.LogicalName}`);\n }\n return relationship.ReferencingEntityNavigationPropertyName;\n }\n\n private _getFormNavigationOptions(): Xrm.Navigation.NavigationOptions {\n return {\n target: 2,\n width: { value: 80, unit: '%' },\n position: 1,\n };\n }\n\n private _getLookupManyHandlerForColumn(colName: string): LookupManyHandler {\n const handler = this._lookupManyHandlers[colName];\n if (!handler) {\n throw new Error(`No LookupManyHandler found for column ${colName}`);\n }\n return handler;\n }\n\n private async _editSingleTask(recordId: string): Promise<IRawRecord | null> {\n const { pageInput, navigationOptions } = this._getFormParameters('edit', {\n pageInput: {\n pageType: 'entityrecord',\n entityName: this._entityName,\n entityId: recordId,\n formId: this._editFormId,\n data: {\n isEditingEnabled: this._isEditingEnabled\n }\n },\n navigationOptions: this._getFormNavigationOptions()\n })\n\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n const result = await this.onGetRawRecords([recordId]);\n return result[0];\n }\n\n private async _editMultipleTasks(recordIds: string[]): Promise<IEditTasksResult | null> {\n const { pageInput, navigationOptions } = this._getFormParameters('bulkEdit', {\n //@ts-ignore - not documented, passing of record id array is possible in Power Apps - https://butenko.pro/2021/10/14/howto-open-bulk-editing-of-records-using-xrm-navigation-navigateto/\n pageInput: {\n //@ts-ignore - typings\n pageType: 'bulkedit',\n entityName: this._entityName,\n entityIds: recordIds,\n formId: this._bulkEditFormId\n },\n navigationOptions: {\n target: 2,\n position: 2,\n }\n });\n await window.Xrm.Navigation.navigateTo(pageInput, navigationOptions);\n const rawRecords = await this.onGetRawRecords(recordIds);\n return {\n success: true,\n updatedRecords: rawRecords\n };\n }\n\n private async _updateStackRank(params: { recordId?: string, previousTaskId?: string, nextTaskId?: string; skipSave?: boolean }): Promise<string> {\n const stackRankCol = this._getFieldMapping().stackRank;\n const rawDataMap = this._provider.getRawDataMap();\n\n const prevRankStr = params.previousTaskId ? (rawDataMap[params.previousTaskId]?.[stackRankCol] as string) : undefined;\n const nextRankStr = params.nextTaskId ? (rawDataMap[params.nextTaskId]?.[stackRankCol] as string) : undefined;\n\n let newRank: string;\n if (prevRankStr && nextRankStr) {\n newRank = LexoRank.parse(prevRankStr).between(LexoRank.parse(nextRankStr)).format();\n } else if (nextRankStr) {\n newRank = LexoRank.parse(nextRankStr).genPrev().format();\n } else if (prevRankStr) {\n newRank = LexoRank.parse(prevRankStr).genNext().format();\n } else {\n newRank = LexoRank.middle().format();\n }\n if (!params.skipSave && params.recordId) {\n await window.Xrm.WebApi.updateRecord(this._entityName, params.recordId, {\n [stackRankCol]: newRank\n });\n }\n return newRank;\n }\n\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './DataverseTaskStrategy';
2
+ export * from './DataverseTaskGridDescriptor';
3
+ export * from './DataverseGridCustomizerStrategy';
4
+ export * from './DataverseSavedQueryStrategy';
5
+ export * from './DataverseCustomColumnsStrategy';
@@ -0,0 +1,6 @@
1
+ export { DataverseTaskStrategy } from './DataverseTaskStrategy.js';
2
+ export { DataverseTaskGridDescriptor } from './DataverseTaskGridDescriptor.js';
3
+ export { DataverseGridCustomizerStrategy } from './DataverseGridCustomizerStrategy.js';
4
+ export { DataverseSavedQueryStrategy } from './DataverseSavedQueryStrategy.js';
5
+ export { ATTRIBUTE_DEFINITION_ENTITY_NAME, ATTRIBUTE_VALUE_ENTITY_NAME, CUSTOM_COLUMNS_REFERENED_ENTITY_NAVIGATION_NAME, DataverseCustomColumnsStrategy } from './DataverseCustomColumnsStrategy.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,49 @@
1
+ import { IRecord, IRecordSaveOperationResult } from "@talxis/client-libraries";
2
+ /** Suffix used for lookup-many task grid stub columns. */
3
+ export declare const LOOKUP_MANY_COLUMN_NAME_SUFFIX = "_stub";
4
+ /** Constructor parameters required to resolve relationship metadata. */
5
+ interface IManyToManyTestParams {
6
+ /** Parent entity navigation property name that identifies the relationship. */
7
+ navigationPropertyName: string;
8
+ /** Logical name of the source entity for association operations. */
9
+ entityName: string;
10
+ }
11
+ /** Contract for a lookup-many relationship handler. */
12
+ export interface ILookupManyHandler {
13
+ /** Loads relationship metadata and prepares the handler for usage. */
14
+ init(): Promise<void>;
15
+ /** Returns OData expand segment for the configured relationship. */
16
+ getExpand(select?: string): string;
17
+ /** Saves lookup-many association changes for a record. */
18
+ saveRecord(record: IRecord, lookupManyColName: string): Promise<IRecordSaveOperationResult>;
19
+ }
20
+ /**
21
+ * Handles metadata resolution and associate/disassociate operations
22
+ * for lookup-many fields in task grid records.
23
+ */
24
+ export declare class LookupManyHandler implements ILookupManyHandler {
25
+ private _relationship?;
26
+ private _initialized;
27
+ private _entityName;
28
+ private _navigationPropertyName;
29
+ constructor(params: IManyToManyTestParams);
30
+ /** Initializes the handler and caches relationship metadata. */
31
+ init(): Promise<void>;
32
+ /**
33
+ * Builds an OData expand clause for the configured relationship.
34
+ * @param select Optional comma-separated projection for expanded records.
35
+ */
36
+ getExpand(select?: string): string;
37
+ /**
38
+ * Persists association changes by comparing current values with original values.
39
+ * @param record Record being saved.
40
+ * @param lookupManyColName Logical column name for the lookup-many field.
41
+ */
42
+ saveRecord(record: IRecord, lookupManyColName: string): Promise<IRecordSaveOperationResult>;
43
+ private _getRelationship;
44
+ private _fetchRelationship;
45
+ private _executeAssociation;
46
+ private _buildBaseRequest;
47
+ private _getRelatedEntityName;
48
+ }
49
+ export {};
@@ -0,0 +1,145 @@
1
+ /** Supported Dataverse relationship kinds used by the handler. */
2
+ var RelationshipType;
3
+ (function (RelationshipType) {
4
+ RelationshipType[RelationshipType["OneToMany"] = 0] = "OneToMany";
5
+ RelationshipType[RelationshipType["ManyToMany"] = 1] = "ManyToMany";
6
+ })(RelationshipType || (RelationshipType = {}));
7
+ /** Suffix used for lookup-many task grid stub columns. */
8
+ const LOOKUP_MANY_COLUMN_NAME_SUFFIX = '_stub';
9
+ /**
10
+ * Handles metadata resolution and associate/disassociate operations
11
+ * for lookup-many fields in task grid records.
12
+ */
13
+ class LookupManyHandler {
14
+ constructor(params) {
15
+ this._initialized = false;
16
+ this._navigationPropertyName = params.navigationPropertyName;
17
+ this._entityName = params.entityName;
18
+ }
19
+ /** Initializes the handler and caches relationship metadata. */
20
+ async init() {
21
+ if (this._initialized)
22
+ return;
23
+ this._relationship = await this._fetchRelationship();
24
+ this._initialized = true;
25
+ }
26
+ /**
27
+ * Builds an OData expand clause for the configured relationship.
28
+ * @param select Optional comma-separated projection for expanded records.
29
+ */
30
+ getExpand(select) {
31
+ const relationship = this._getRelationship();
32
+ //@ts-ignore - typings
33
+ if (relationship.RelationshipType === RelationshipType.OneToMany) {
34
+ return `${relationship.ReferencedEntityNavigationPropertyName}${select ? `($select=${select})` : ''}`;
35
+ }
36
+ else {
37
+ const rel = relationship;
38
+ return `${rel.Entity1NavigationPropertyName}${select ? `($select=${select})` : ''}`;
39
+ }
40
+ }
41
+ /**
42
+ * Persists association changes by comparing current values with original values.
43
+ * @param record Record being saved.
44
+ * @param lookupManyColName Logical column name for the lookup-many field.
45
+ */
46
+ async saveRecord(record, lookupManyColName) {
47
+ const recordId = record.getRecordId();
48
+ const newValue = record.getValue(lookupManyColName) ?? [];
49
+ //@ts-ignore - typings
50
+ const previousValue = record.getField(lookupManyColName)._originalValue ?? [];
51
+ const toAdd = newValue.filter((newValue) => !previousValue.some((origValue) => origValue.id.guid === newValue.id.guid));
52
+ const toRemove = previousValue.filter((origValue) => !newValue.some((newValue) => newValue.id.guid === origValue.id.guid));
53
+ if (toAdd.length === 0 && toRemove.length === 0) {
54
+ return {
55
+ success: true,
56
+ recordId: recordId,
57
+ fields: [],
58
+ };
59
+ }
60
+ const deleteResult = await this._executeAssociation('Disassociate', recordId, toRemove.map(a => a.id.guid));
61
+ const addResult = await this._executeAssociation('Associate', recordId, toAdd.map(a => a.id.guid));
62
+ const success = (deleteResult?.success ?? true) && (addResult?.success ?? true);
63
+ const errors = [...(deleteResult?.errors ?? []), ...(addResult?.errors ?? [])];
64
+ return {
65
+ success,
66
+ recordId: recordId,
67
+ fields: [lookupManyColName],
68
+ errors
69
+ };
70
+ }
71
+ _getRelationship() {
72
+ if (!this._relationship) {
73
+ throw new Error('Relationship not loaded. Have you called init()?');
74
+ }
75
+ return this._relationship;
76
+ }
77
+ async _fetchRelationship() {
78
+ const metadata = await window.Xrm.Utility.getEntityMetadata(this._entityName);
79
+ const relationships = [...metadata.OneToManyRelationships.getAll(), ...metadata.ManyToManyRelationships.getAll()];
80
+ const relationship = relationships.find(rel => {
81
+ //@ts-ignore - typings
82
+ if (rel.RelationshipType === RelationshipType.ManyToMany) {
83
+ const m2m = rel;
84
+ return m2m.Entity1NavigationPropertyName === this._navigationPropertyName ||
85
+ m2m.Entity2NavigationPropertyName === this._navigationPropertyName;
86
+ }
87
+ const o2m = rel;
88
+ return o2m.ReferencedEntityNavigationPropertyName === this._navigationPropertyName ||
89
+ o2m.ReferencingEntityNavigationPropertyName === this._navigationPropertyName;
90
+ });
91
+ if (!relationship) {
92
+ throw new Error(`Could not find navigation property name ${this._navigationPropertyName} on ${metadata.LogicalName}`);
93
+ }
94
+ return relationship;
95
+ }
96
+ async _executeAssociation(operationName, parentId, recordIds) {
97
+ if (recordIds.length === 0) {
98
+ return null;
99
+ }
100
+ try {
101
+ if (operationName === 'Disassociate') {
102
+ await Promise.all(recordIds.map(id => window.Xrm.WebApi.online.execute({
103
+ ...this._buildBaseRequest(operationName, parentId),
104
+ relatedEntityId: id,
105
+ })));
106
+ }
107
+ else {
108
+ await window.Xrm.WebApi.online.execute({
109
+ ...this._buildBaseRequest(operationName, parentId),
110
+ relatedEntities: recordIds.map(id => ({ id, entityType: this._getRelatedEntityName() })),
111
+ });
112
+ }
113
+ return { recordId: parentId, success: true, fields: [] };
114
+ }
115
+ catch (err) {
116
+ return { recordId: parentId, success: false, fields: [], errors: [{ message: err.message }] };
117
+ }
118
+ }
119
+ _buildBaseRequest(operationName, parentId) {
120
+ return {
121
+ getMetadata: () => ({
122
+ operationType: 2,
123
+ operationName,
124
+ parameterTypes: {},
125
+ }),
126
+ target: { id: parentId, entityType: this._entityName },
127
+ relationship: this._getRelationship().SchemaName,
128
+ };
129
+ }
130
+ _getRelatedEntityName() {
131
+ const relationship = this._getRelationship();
132
+ //@ts-ignore - typings
133
+ if (relationship.RelationshipType === RelationshipType.ManyToMany) {
134
+ const rel = relationship;
135
+ const isEntity1Source = rel.Entity1LogicalName === this._entityName;
136
+ return isEntity1Source ? rel.Entity2LogicalName : rel.Entity1LogicalName;
137
+ }
138
+ else {
139
+ return relationship.ReferencingEntity;
140
+ }
141
+ }
142
+ }
143
+
144
+ export { LOOKUP_MANY_COLUMN_NAME_SUFFIX, LookupManyHandler };
145
+ //# sourceMappingURL=LookupManyHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LookupManyHandler.js","sources":["../../../../../../src/components/TaskGrid/extensions/dataverse/lookup-many/LookupManyHandler.ts"],"sourcesContent":["import { IRecord, IRecordSaveOperationResult } from \"@talxis/client-libraries\";\nimport { IManyToManyRelationship, IRelationship } from \"@talxis/client-metadata/dist/interfaces/entity/IEntityDefinition\";\n\n\n/** Supported Dataverse relationship kinds used by the handler. */\nenum RelationshipType {\n OneToMany = 0,\n ManyToMany = 1\n}\n\n/** Suffix used for lookup-many task grid stub columns. */\nexport const LOOKUP_MANY_COLUMN_NAME_SUFFIX = '_stub';\n\n/** Constructor parameters required to resolve relationship metadata. */\ninterface IManyToManyTestParams {\n /** Parent entity navigation property name that identifies the relationship. */\n navigationPropertyName: string;\n /** Logical name of the source entity for association operations. */\n entityName: string;\n}\n\n/** Contract for a lookup-many relationship handler. */\nexport interface ILookupManyHandler {\n /** Loads relationship metadata and prepares the handler for usage. */\n init(): Promise<void>;\n /** Returns OData expand segment for the configured relationship. */\n getExpand(select?: string): string;\n /** Saves lookup-many association changes for a record. */\n saveRecord(record: IRecord, lookupManyColName: string): Promise<IRecordSaveOperationResult>;\n}\n\n\n/**\n * Handles metadata resolution and associate/disassociate operations\n * for lookup-many fields in task grid records.\n */\nexport class LookupManyHandler implements ILookupManyHandler {\n private _relationship?: IRelationship | IManyToManyRelationship;\n private _initialized: boolean = false;\n private _entityName: string;\n private _navigationPropertyName: string;\n\n constructor(params: IManyToManyTestParams) {\n this._navigationPropertyName = params.navigationPropertyName;\n this._entityName = params.entityName;\n }\n\n /** Initializes the handler and caches relationship metadata. */\n public async init() {\n if (this._initialized) return;\n this._relationship = await this._fetchRelationship();\n this._initialized = true;\n }\n\n /**\n * Builds an OData expand clause for the configured relationship.\n * @param select Optional comma-separated projection for expanded records.\n */\n public getExpand(select?: string): string {\n const relationship = this._getRelationship();\n //@ts-ignore - typings\n if (relationship.RelationshipType === RelationshipType.OneToMany) {\n return `${(relationship as IRelationship).ReferencedEntityNavigationPropertyName}${select ? `($select=${select})` : ''}`;\n }\n else {\n const rel = relationship as IManyToManyRelationship;\n return `${rel.Entity1NavigationPropertyName}${select ? `($select=${select})` : ''}`;\n }\n }\n\n /**\n * Persists association changes by comparing current values with original values.\n * @param record Record being saved.\n * @param lookupManyColName Logical column name for the lookup-many field.\n */\n public async saveRecord(record: IRecord, lookupManyColName: string): Promise<IRecordSaveOperationResult> {\n const recordId = record.getRecordId();\n const newValue = record.getValue(lookupManyColName) ?? [];\n //@ts-ignore - typings\n const previousValue = record.getField(lookupManyColName)._originalValue ?? [];\n\n const toAdd: ComponentFramework.EntityReference[] = newValue.filter((newValue: ComponentFramework.EntityReference) =>\n !previousValue.some((origValue: ComponentFramework.EntityReference) => origValue.id.guid === newValue.id.guid)\n );\n const toRemove: ComponentFramework.EntityReference[] = previousValue.filter((origValue: ComponentFramework.EntityReference) =>\n !newValue.some((newValue: ComponentFramework.EntityReference) => newValue.id.guid === origValue.id.guid)\n );\n if (toAdd.length === 0 && toRemove.length === 0) {\n return {\n success: true,\n recordId: recordId,\n fields: [],\n }\n }\n\n const deleteResult = await this._executeAssociation('Disassociate', recordId, toRemove.map(a => a.id.guid));\n const addResult = await this._executeAssociation('Associate', recordId, toAdd.map(a => a.id.guid));\n const success = (deleteResult?.success ?? true) && (addResult?.success ?? true);\n const errors = [...(deleteResult?.errors ?? []), ...(addResult?.errors ?? [])];\n\n return {\n success,\n recordId: recordId,\n fields: [lookupManyColName],\n errors\n };\n\n }\n\n private _getRelationship(): IRelationship | IManyToManyRelationship {\n if (!this._relationship) {\n throw new Error('Relationship not loaded. Have you called init()?');\n }\n return this._relationship;\n }\n\n private async _fetchRelationship(): Promise<IRelationship | IManyToManyRelationship> {\n const metadata: any = await window.Xrm.Utility.getEntityMetadata(this._entityName);\n const relationships: (IRelationship | IManyToManyRelationship)[] = [...metadata.OneToManyRelationships.getAll(), ...metadata.ManyToManyRelationships.getAll()];\n const relationship = relationships.find(rel => {\n //@ts-ignore - typings\n if (rel.RelationshipType === RelationshipType.ManyToMany) {\n const m2m = rel as IManyToManyRelationship;\n return m2m.Entity1NavigationPropertyName === this._navigationPropertyName ||\n m2m.Entity2NavigationPropertyName === this._navigationPropertyName;\n }\n const o2m = rel as IRelationship;\n return o2m.ReferencedEntityNavigationPropertyName === this._navigationPropertyName ||\n o2m.ReferencingEntityNavigationPropertyName === this._navigationPropertyName;\n\n });\n if (!relationship) {\n throw new Error(`Could not find navigation property name ${this._navigationPropertyName} on ${metadata.LogicalName}`);\n }\n return relationship;\n }\n\n private async _executeAssociation(operationName: 'Associate' | 'Disassociate', parentId: string, recordIds: string[]): Promise<IRecordSaveOperationResult | null> {\n if (recordIds.length === 0) {\n return null;\n }\n try {\n if (operationName === 'Disassociate') {\n await Promise.all(recordIds.map(id =>\n window.Xrm.WebApi.online.execute({\n ...this._buildBaseRequest(operationName, parentId),\n relatedEntityId: id,\n })\n ));\n }\n else {\n await window.Xrm.WebApi.online.execute({\n ...this._buildBaseRequest(operationName, parentId),\n relatedEntities: recordIds.map(id => ({ id, entityType: this._getRelatedEntityName() })),\n });\n }\n return { recordId: parentId, success: true, fields: [] };\n }\n catch (err: any) {\n return { recordId: parentId, success: false, fields: [], errors: [{ message: err.message }] };\n }\n }\n\n private _buildBaseRequest(operationName: 'Associate' | 'Disassociate', parentId: string) {\n return {\n getMetadata: () => ({\n operationType: 2,\n operationName,\n parameterTypes: {},\n }),\n target: { id: parentId, entityType: this._entityName },\n relationship: this._getRelationship().SchemaName,\n };\n }\n\n private _getRelatedEntityName(): string {\n const relationship = this._getRelationship();\n //@ts-ignore - typings\n if (relationship.RelationshipType === RelationshipType.ManyToMany) {\n const rel = relationship as IManyToManyRelationship;\n const isEntity1Source = rel.Entity1LogicalName === this._entityName;\n return isEntity1Source ? rel.Entity2LogicalName : rel.Entity1LogicalName;\n }\n else {\n return (relationship as IRelationship).ReferencingEntity;\n }\n }\n\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { IDataProvider } from "@talxis/client-libraries";
2
+ export interface ILookupManyStrategy {
3
+ fetchXml: string;
4
+ variables?: {
5
+ [key: string]: any;
6
+ };
7
+ }
8
+ export declare class FetchXmlDataProviderFactory {
9
+ private static _liquid;
10
+ static create(strategy: ILookupManyStrategy): IDataProvider;
11
+ }
@@ -0,0 +1,16 @@
1
+ import { FetchXmlDataProvider } from '@talxis/client-libraries';
2
+ import { Liquid } from 'liquidjs';
3
+
4
+ class FetchXmlDataProviderFactory {
5
+ static create(strategy) {
6
+ const variables = strategy.variables ?? {};
7
+ let fetchXml = this._liquid.parseAndRenderSync(strategy.fetchXml, variables);
8
+ return new FetchXmlDataProvider({
9
+ fetchXml: fetchXml
10
+ });
11
+ }
12
+ }
13
+ FetchXmlDataProviderFactory._liquid = new Liquid();
14
+
15
+ export { FetchXmlDataProviderFactory };
16
+ //# sourceMappingURL=FetchXmlDataProviderFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchXmlDataProviderFactory.js","sources":["../../../../../../../src/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlDataProviderFactory.ts"],"sourcesContent":["import { FetchXmlDataProvider, IDataProvider } from \"@talxis/client-libraries\";\nimport { Liquid } from \"liquidjs\";\n\nexport interface ILookupManyStrategy {\n fetchXml: string;\n variables?: { [key: string]: any };\n}\n\n\nexport class FetchXmlDataProviderFactory {\n private static _liquid: Liquid = new Liquid();\n\n public static create(strategy: ILookupManyStrategy): IDataProvider {\n const variables = strategy.variables ?? {};\n let fetchXml = this._liquid.parseAndRenderSync(strategy.fetchXml, variables);\n return new FetchXmlDataProvider({\n fetchXml: fetchXml\n });\n }\n}"],"names":[],"mappings":";;;MASa,2BAA2B,CAAA;IAG7B,OAAO,MAAM,CAAC,QAA6B,EAAA;AAC9C,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;AAC3C,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7E,OAAO,IAAI,oBAAoB,CAAC;AAC5B,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA,CAAC,CAAC;KACN;;AARc,2BAAA,CAAA,OAAO,GAAW,IAAI,MAAM,EAAE;;;;"}
@@ -0,0 +1,2 @@
1
+ import { ICellProps } from "../../../../../Grid/cells/cell/Cell";
2
+ export declare const FetchXmlLookupManyCellRenderer: (props: ICellProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { FetchXmlDataProviderFactory } from './FetchXmlDataProviderFactory.js';
3
+ import React__default from 'react';
4
+ import { LookupManyCellRenderer } from '../../../../components/grid/cell-renderers/lookup-many/LookupManyCellRenderer.js';
5
+ import { useTaskDataProvider } from '../../../../context.js';
6
+
7
+ const FetchXmlLookupManyCellRenderer = (props) => {
8
+ const { baseColumn } = props;
9
+ const record = props.data;
10
+ const strategy = useTaskDataProvider().getStrategy();
11
+ const projectReference = strategy.getProjectReference();
12
+ const customControl = record.getColumnInfo(baseColumn.name).ui.getCustomControls([])?.[0];
13
+ const fetchXml = customControl?.bindings?.FetchXml.value;
14
+ const taskId = record.getRecordId();
15
+ const dataProvider = React__default.useMemo(() => FetchXmlDataProviderFactory.create({
16
+ fetchXml: fetchXml,
17
+ variables: {
18
+ taskId: taskId,
19
+ projectId: projectReference?.id.guid
20
+ }
21
+ }), []);
22
+ if (!fetchXml) {
23
+ throw new Error('FetchXml for LookupMany is not defined in column metadata. Define it using the "LookupManyFetchXml" property.');
24
+ }
25
+ return jsx(LookupManyCellRenderer, { ...props, dataProvider: dataProvider });
26
+ };
27
+
28
+ export { FetchXmlLookupManyCellRenderer };
29
+ //# sourceMappingURL=FetchXmlLookupManyCellRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchXmlLookupManyCellRenderer.js","sources":["../../../../../../../src/components/TaskGrid/extensions/dataverse/lookup-many/cell-renderer/FetchXmlLookupManyCellRenderer.tsx"],"sourcesContent":["import { IRecord } from \"@talxis/client-libraries\";\nimport { useTaskDataProvider } from \"../../../../..\";\nimport { FetchXmlDataProviderFactory } from \"./FetchXmlDataProviderFactory\";\nimport React from \"react\";\nimport { LookupManyCellRenderer } from '../../../../components/grid/cell-renderers/lookup-many'\nimport { ICellProps } from \"../../../../../Grid/cells/cell/Cell\";\nimport { IDataverseTaskStrategy } from \"../../DataverseTaskStrategy\";\n\nexport const FetchXmlLookupManyCellRenderer = (props: ICellProps) => {\n const { baseColumn } = props;\n const record: IRecord = props.data;\n const strategy: IDataverseTaskStrategy = useTaskDataProvider().getStrategy();\n const projectReference = strategy.getProjectReference();\n const customControl = record.getColumnInfo(baseColumn.name).ui.getCustomControls([])?.[0];\n const fetchXml = customControl?.bindings?.FetchXml.value;\n const taskId = record.getRecordId();\n const dataProvider = React.useMemo(() => FetchXmlDataProviderFactory.create({\n fetchXml: fetchXml,\n variables: {\n taskId: taskId,\n projectId: projectReference?.id.guid\n }\n }), []);\n\n if (!fetchXml) {\n throw new Error('FetchXml for LookupMany is not defined in column metadata. Define it using the \"LookupManyFetchXml\" property.');\n }\n\n return <LookupManyCellRenderer \n {...props} \n dataProvider={dataProvider} />\n\n}"],"names":["React","_jsx"],"mappings":";;;;;;AAQa,MAAA,8BAA8B,GAAG,CAAC,KAAiB,KAAI;AAChE,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;AAC7B,IAAA,MAAM,MAAM,GAAY,KAAK,CAAC,IAAI,CAAC;AACnC,IAAA,MAAM,QAAQ,GAA2B,mBAAmB,EAAE,CAAC,WAAW,EAAE,CAAC;AAC7E,IAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;AACzD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACpC,IAAA,MAAM,YAAY,GAAGA,cAAK,CAAC,OAAO,CAAC,MAAM,2BAA2B,CAAC,MAAM,CAAC;AACxE,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,SAAS,EAAE;AACP,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,gBAAgB,EAAE,EAAE,CAAC,IAAI;AACvC,SAAA;KACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAER,IAAI,CAAC,QAAQ,EAAE;AACX,QAAA,MAAM,IAAI,KAAK,CAAC,+GAA+G,CAAC,CAAC;AACpI,KAAA;IAED,OAAOC,GAAA,CAAC,sBAAsB,EACtB,EAAA,GAAA,KAAK,EACT,YAAY,EAAE,YAAY,EAAA,CAAI,CAAA;AAEtC;;;;"}
@@ -2,11 +2,12 @@
2
2
  import { IDataset, IDataProvider } from "@talxis/client-libraries";
3
3
  import { IDatasetControl } from "../../utils/dataset-control";
4
4
  import { IGridCustomizerStrategy } from "./components/grid/grid-customizer";
5
- import { ICustomColumnsDataProvider, ICustomColumnsStrategy } from "./data-providers/custom-columns-data-provider/CustomColumnsDataProvider";
6
- import { ISavedQueryDataProvider, ISavedQueryStrategy } from "./data-providers/saved-query-data-provider";
7
- import { ITaskDataProviderStrategy, ITaskDataProvider } from "./data-providers/task-data-provider";
8
- import { ILocalizationService, ITaskGridLabels } from "./labels";
5
+ import { ICustomColumnsDataProvider, ICustomColumnsStrategy } from "./providers/custom-columns/CustomColumnsDataProvider";
6
+ import { ISavedQueryDataProvider, ISavedQueryStrategy } from "./providers/saved-query";
7
+ import { ITaskDataProviderStrategy, ITaskDataProvider } from "./providers/task";
8
+ import { ITaskGridLabels } from "./labels";
9
9
  import { ITaskGridState } from "./TaskGridDatasetControlFactory";
10
+ import { ILocalizationService } from "../../utils";
10
11
  export interface ITaskGridDatasetControlParameters {
11
12
  dataset: IDataset;
12
13
  state: ITaskGridState;
@@ -18,7 +19,7 @@ export interface ITaskGridDatasetControlParameters {
18
19
  onGetPcfContext: () => ComponentFramework.Context<any>;
19
20
  }
20
21
  /** Maps functional column roles to the physical attribute (field) names in the consuming entity's schema. */
21
- export interface INativeColumns {
22
+ export interface IFieldMapping {
22
23
  /** Lookup attribute pointing to the parent task — drives the tree hierarchy. */
23
24
  parentId: string;
24
25
  /** Display name / title attribute. Always pinned left; never hidden by the control. */
@@ -27,10 +28,9 @@ export interface INativeColumns {
27
28
  stackRank: string;
28
29
  /** Active/inactive status attribute. Used by the "Hide inactive tasks" filter. */
29
30
  stateCode: string;
30
- /** Virtual breadcrumb column. Its value is computed automatically from ancestor names and is never editable. */
31
+ }
32
+ export interface INativeColumns extends IFieldMapping {
31
33
  path: string;
32
- /** (Optional) Numeric completion percentage. When present, rendered with a progress-bar cell renderer. */
33
- percentComplete?: string;
34
34
  }
35
35
  /** Feature flags that control which UI elements are rendered in the grid header and ribbon. */
36
36
  export interface ITaskGridParameters {
@@ -40,6 +40,12 @@ export interface ITaskGridParameters {
40
40
  enableRowDragging?: boolean;
41
41
  /** Show the *Edit Columns* button in the ribbon. Defaults to `true`. */
42
42
  enableEditColumns?: boolean;
43
+ /** Enable editing of tasks directly in the grid. Defaults to `true`. */
44
+ enableTaskEditing?: boolean;
45
+ /** Enable creation of new tasks. Defaults to `true`. */
46
+ enableTaskCreation?: boolean;
47
+ /** Enable deletion of tasks. Defaults to `true`. */
48
+ enableTaskDeletion?: boolean;
43
49
  /** Show the search / quick-find input. Defaults to `true`. */
44
50
  enableQuickFind?: boolean;
45
51
  /** Show the view-switcher dropdown. Defaults to `true`. */
@@ -57,10 +63,15 @@ export interface ITaskGridParameters {
57
63
  /** Show the "Save as new" button in the query manager. Defaults to `true`. */
58
64
  enableSaveAsNewQuery?: boolean;
59
65
  /** Show the "Save changes" button in the query manager. Defaults to `true`. */
60
- enableSaveChangesToQuery?: boolean;
66
+ enableSaveQueryChanges?: boolean;
67
+ /** Enable creation of custom columns. Defaults to `true`. */
61
68
  enableCustomColumnCreation?: boolean;
69
+ /** Enable editing of custom columns. Defaults to `true`. */
62
70
  enableCustomColumnEditing?: boolean;
71
+ /** Enable deletion of custom columns. Defaults to `true`. */
63
72
  enableCustomColumnDeletion?: boolean;
73
+ /** Enable inline creation of tasks. Defaults to `true`. */
74
+ enableInlineCreation?: boolean;
64
75
  }
65
76
  /** Available data providers injected into `ITaskDataProviderStrategy` at construction time. */
66
77
  export interface ITaskStrategyDeps {
@@ -75,7 +86,7 @@ export interface ITaskStrategyDeps {
75
86
  */
76
87
  export interface ITaskGridDescriptor {
77
88
  /** Returns the mapping of logical column roles to physical schema attribute names. */
78
- onGetNativeColumns: () => INativeColumns;
89
+ onGetFieldMapping: () => IFieldMapping;
79
90
  /** Returns the strategy responsible for loading system/user views and persisting view changes. */
80
91
  onCreateSavedQueryStrategy: () => ISavedQueryStrategy;
81
92
  /** Returns the strategy that handles all task CRUD, move, template and record-save operations. */
@@ -89,7 +100,7 @@ export interface ITaskGridDescriptor {
89
100
  /** (Optional) Returns a strategy for deep customization of AG Grid column definitions, renderers, editors, and row class rules. */
90
101
  onCreateGridCustomizerStrategy?: () => IGridCustomizerStrategy | undefined;
91
102
  /** (Optional) Returns the AG Grid Enterprise license key. */
92
- onGetAgGridLicenseKey?: () => string;
103
+ onGetAgGridLicenseKey?: () => string | undefined;
93
104
  /** (Optional) Returns a stable DOM/control identifier. Auto-generated as a UUID when omitted. */
94
105
  onGetControlId?: () => string;
95
106
  /** (Optional) Async hook called before any data provider is created. Use for lazy loading or authentication. */
@@ -142,13 +153,19 @@ export interface ITaskGridDatasetControl extends IDatasetControl {
142
153
  isEditColumnsScopeSelectorEnabled: () => boolean;
143
154
  /** Returns `true` when a template data provider was supplied through the descriptor. */
144
155
  isTemplatingEnabled: () => boolean;
156
+ /** Returns `true` when inline creation of tasks is enabled. */
157
+ isTaskCreatingEnabled: () => boolean;
158
+ /** Returns `true` when inline editing of tasks is enabled. */
159
+ isTaskEditingEnabled: () => boolean;
160
+ /** Returns `true` when task deletion is enabled. */
161
+ isTaskDeletingEnabled: () => boolean;
145
162
  /** Returns `true` when a custom columns strategy was supplied through the descriptor. */
146
163
  isCustomColumnsEnabled: () => boolean;
147
164
  /** Whether the view manager is enabled (from `ITaskGridParameters.enableQueryManager`). */
148
165
  isViewManagerEnabled: () => boolean;
149
166
  /** Whether the "Save as new" button is enabled (from `ITaskGridParameters.enableSaveAsNewQuery`). */
150
167
  isSaveQueryAsNewEnabled: () => boolean;
151
- /** Whether the "Save changes" button is enabled (from `ITaskGridParameters.enableSaveChangesToQuery`). */
168
+ /** Whether the "Save changes" button is enabled (from `ITaskGridParameters.enableSaveQueryChanges`). */
152
169
  isSaveQueryChangesEnabled: () => boolean;
153
170
  /** Whether custom column creation is enabled (from `ITaskGridParameters.enableCustomColumnCreation`). */
154
171
  isCustomColumnCreationEnabled: () => boolean;
@@ -158,4 +175,5 @@ export interface ITaskGridDatasetControl extends IDatasetControl {
158
175
  isCustomColumnDeletionEnabled: () => boolean;
159
176
  /** Whether user queries are enabled (from `ITaskGridParameters.enableUserQueries`). */
160
177
  isUserQueriesFeatureEnabled: () => boolean;
178
+ isInlineCreateEnabled: () => boolean;
161
179
  }
@@ -32,6 +32,7 @@ export interface ITaskGridLabels {
32
32
  templateCreatedSuccessfully: string;
33
33
  description: string;
34
34
  noTaskTemplates: string;
35
+ path: string;
35
36
  addChild: string;
36
37
  addCustomColumn: string;
37
38
  confirmColumnDelete: string;
@@ -74,19 +75,4 @@ export interface ITaskGridLabels {
74
75
  unexpectedErrorOccurred: string;
75
76
  deletingUserQueriesError: string;
76
77
  }
77
- export interface ILocalizationService<T> {
78
- getLocalizedString: (key: keyof T, variables?: {
79
- [key: string]: string;
80
- }) => string;
81
- }
82
78
  export declare const TASK_GRID_LABELS: ITaskGridLabels;
83
- export declare class LocalizationService<T extends {
84
- [K in keyof T]: string;
85
- }> implements ILocalizationService<T> {
86
- private _getLabels;
87
- private _liquidEngine;
88
- constructor(getLabels: () => T);
89
- getLocalizedString(key: keyof T, variables?: {
90
- [key: string]: string;
91
- }): string;
92
- }
@@ -1,10 +1,9 @@
1
- import { Liquid } from 'liquidjs';
2
-
3
1
  const TASK_GRID_LABELS = {
4
2
  name: 'Name',
5
3
  no: 'No',
6
4
  yes: 'Yes',
7
5
  ok: 'Ok',
6
+ path: 'Path',
8
7
  confirm: 'Confirm',
9
8
  confirmation: 'Confirmation',
10
9
  myViews: 'My views',
@@ -76,19 +75,6 @@ const TASK_GRID_LABELS = {
76
75
  noRecordsFound: 'No records found.',
77
76
  unexpectedErrorOccurred: 'Unexpected error occurred.',
78
77
  };
79
- class LocalizationService {
80
- constructor(getLabels) {
81
- this._getLabels = getLabels;
82
- this._liquidEngine = new Liquid();
83
- }
84
- getLocalizedString(key, variables) {
85
- const labels = this._getLabels();
86
- if (variables) {
87
- return this._liquidEngine.parseAndRenderSync(labels[key], variables);
88
- }
89
- return labels[key];
90
- }
91
- }
92
78
 
93
- export { LocalizationService, TASK_GRID_LABELS };
79
+ export { TASK_GRID_LABELS };
94
80
  //# sourceMappingURL=labels.js.map