@ynput/ayon-frontend-shared 0.2.13 → 0.2.15

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 (382) hide show
  1. package/dist/DetailsPanel.cjs.js +8 -0
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +8 -0
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +5 -0
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +5 -0
  8. package/dist/ProjectTreeTable.es.js.map +1 -1
  9. package/dist/Slicer.cjs.js +2 -0
  10. package/dist/Slicer.cjs.js.map +1 -1
  11. package/dist/Slicer.es.js +3 -1
  12. package/dist/Slicer.es.js.map +1 -1
  13. package/dist/_virtual/index.cjs10.js +3 -5
  14. package/dist/_virtual/index.cjs10.js.map +1 -1
  15. package/dist/_virtual/index.cjs7.js +5 -3
  16. package/dist/_virtual/index.cjs7.js.map +1 -1
  17. package/dist/_virtual/index.cjs8.js +4 -4
  18. package/dist/_virtual/index.cjs9.js +4 -4
  19. package/dist/_virtual/index.es10.js +2 -5
  20. package/dist/_virtual/index.es10.js.map +1 -1
  21. package/dist/_virtual/index.es7.js +5 -2
  22. package/dist/_virtual/index.es7.js.map +1 -1
  23. package/dist/_virtual/index.es8.js +4 -4
  24. package/dist/_virtual/index.es9.js +4 -4
  25. package/dist/api.cjs.js +2 -0
  26. package/dist/api.cjs.js.map +1 -1
  27. package/dist/api.es.js +3 -1
  28. package/dist/components.cjs.js +15 -0
  29. package/dist/components.cjs.js.map +1 -1
  30. package/dist/components.es.js +16 -1
  31. package/dist/components.es.js.map +1 -1
  32. package/dist/context.cjs.js +4 -0
  33. package/dist/context.cjs.js.map +1 -1
  34. package/dist/context.es.js +4 -0
  35. package/dist/context.es.js.map +1 -1
  36. package/dist/index.cjs.js +8 -0
  37. package/dist/index.cjs.js.map +1 -1
  38. package/dist/index.es.js +8 -0
  39. package/dist/index.es.js.map +1 -1
  40. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  41. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  42. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  43. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  44. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  45. package/dist/node_modules/remove-accents/index.es.js +1 -1
  46. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  47. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  48. package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
  49. package/dist/shared/src/api/generated/actions.es.js.map +1 -1
  50. package/dist/shared/src/api/generated/addons.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/addons.es.js.map +1 -1
  52. package/dist/shared/src/api/generated/anatomy.cjs.js.map +1 -1
  53. package/dist/shared/src/api/generated/anatomy.es.js.map +1 -1
  54. package/dist/shared/src/api/generated/attributes.cjs.js.map +1 -1
  55. package/dist/shared/src/api/generated/attributes.es.js.map +1 -1
  56. package/dist/shared/src/api/generated/configuration.cjs.js.map +1 -1
  57. package/dist/shared/src/api/generated/configuration.es.js.map +1 -1
  58. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  60. package/dist/shared/src/api/generated/events.cjs.js.map +1 -1
  61. package/dist/shared/src/api/generated/events.es.js.map +1 -1
  62. package/dist/shared/src/api/generated/files.cjs.js +5 -0
  63. package/dist/shared/src/api/generated/files.cjs.js.map +1 -1
  64. package/dist/shared/src/api/generated/files.es.js +5 -0
  65. package/dist/shared/src/api/generated/files.es.js.map +1 -1
  66. package/dist/shared/src/api/generated/operations.cjs.js.map +1 -1
  67. package/dist/shared/src/api/generated/operations.es.js.map +1 -1
  68. package/dist/shared/src/api/generated/projects.cjs.js +16 -0
  69. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  70. package/dist/shared/src/api/generated/projects.es.js +16 -0
  71. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  72. package/dist/shared/src/api/generated/reviewables.cjs.js.map +1 -1
  73. package/dist/shared/src/api/generated/reviewables.es.js.map +1 -1
  74. package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
  75. package/dist/shared/src/api/generated/system.es.js.map +1 -1
  76. package/dist/shared/src/api/generated/tasks.cjs.js +8 -0
  77. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  78. package/dist/shared/src/api/generated/tasks.es.js +8 -0
  79. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  80. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  81. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  82. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +66 -4
  83. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  84. package/dist/shared/src/api/queries/overview/getOverview.es.js +66 -4
  85. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  86. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -0
  87. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  88. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +1 -0
  89. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  90. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +8 -0
  91. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  92. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +8 -0
  93. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  94. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +69 -0
  95. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -0
  96. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +69 -0
  97. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -0
  98. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +48 -0
  99. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -0
  100. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +48 -0
  101. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -0
  102. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +102 -0
  103. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -0
  104. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +102 -0
  105. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -0
  106. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js +13 -0
  107. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js.map +1 -0
  108. package/dist/shared/src/components/Powerpack/PricingLink.es.js +13 -0
  109. package/dist/shared/src/components/Powerpack/PricingLink.es.js.map +1 -0
  110. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +4 -10
  111. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  112. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +1 -7
  113. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  114. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +5 -1
  115. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  116. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -1
  117. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  118. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js +13 -0
  119. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js.map +1 -0
  120. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js +13 -0
  121. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js.map +1 -0
  122. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +50 -0
  123. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -0
  124. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +50 -0
  125. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -0
  126. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +8 -0
  127. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  128. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +8 -0
  129. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  130. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +8 -0
  131. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  132. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +8 -0
  133. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  134. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +8 -0
  135. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  136. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +8 -0
  137. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  138. package/dist/shared/src/components/SearchFilter/filterDates.cjs.js +167 -0
  139. package/dist/shared/src/components/SearchFilter/filterDates.cjs.js.map +1 -0
  140. package/dist/shared/src/components/SearchFilter/filterDates.es.js +167 -0
  141. package/dist/shared/src/components/SearchFilter/filterDates.es.js.map +1 -0
  142. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +547 -0
  143. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -0
  144. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +547 -0
  145. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -0
  146. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +6 -2
  147. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  148. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +6 -2
  149. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  150. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +19 -3
  151. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  152. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +20 -4
  153. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  154. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -0
  155. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  156. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +1 -0
  157. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  158. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +8 -0
  159. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  160. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +8 -0
  161. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  162. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  163. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  164. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  165. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  166. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +8 -0
  167. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  168. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +8 -0
  169. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  170. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +8 -0
  171. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  172. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +8 -0
  173. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  174. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +8 -0
  175. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  176. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +8 -0
  177. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  178. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +8 -0
  179. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +8 -0
  181. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  182. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +9 -1
  183. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +9 -1
  185. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  186. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -0
  187. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +1 -0
  189. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -0
  191. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +1 -0
  193. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  194. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -0
  195. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/Feed/Feed.es.js +1 -0
  197. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  198. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +2 -1
  199. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +2 -1
  201. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  202. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -0
  203. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  204. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +1 -0
  205. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  206. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +5 -1
  207. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  208. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +5 -1
  209. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  210. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.cjs.js.map +1 -1
  211. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js.map +1 -1
  212. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -0
  213. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  214. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +1 -0
  215. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  216. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +22 -11
  217. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  218. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +22 -11
  219. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  220. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js +6 -0
  221. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js.map +1 -1
  222. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js +6 -0
  223. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js.map +1 -1
  224. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js +3 -3
  225. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js.map +1 -1
  226. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js +3 -3
  227. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js.map +1 -1
  228. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -0
  229. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  230. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +1 -0
  231. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  232. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -0
  233. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  234. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +1 -0
  235. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  236. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js +2 -1
  237. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js.map +1 -1
  238. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js +2 -1
  239. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js.map +1 -1
  240. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +45 -16
  241. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  242. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +45 -16
  243. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  244. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +45 -7
  245. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  246. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +45 -7
  247. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  248. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +202 -0
  249. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -0
  250. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +202 -0
  251. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -0
  252. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +14 -6
  253. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +14 -6
  255. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  256. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +11 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +11 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +22 -2
  261. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +22 -2
  263. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +116 -0
  265. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -0
  266. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +116 -0
  267. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -0
  268. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js +1 -0
  269. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js.map +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js +1 -0
  271. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js.map +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
  273. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
  276. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +137 -0
  277. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -0
  278. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +137 -0
  279. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -0
  280. package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.cjs.js → useBuildProjectDataTable.cjs.js} +3 -3
  281. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -0
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.es.js → useBuildProjectDataTable.es.js} +3 -3
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -0
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +39 -19
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +39 -19
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  288. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +108 -0
  289. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -0
  290. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +108 -0
  291. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -0
  292. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js +29 -0
  293. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js.map +1 -0
  294. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js +30 -0
  295. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js.map +1 -0
  296. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +8 -0
  297. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  298. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +8 -0
  299. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  300. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js +37 -0
  301. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js.map +1 -0
  302. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js +37 -0
  303. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js.map +1 -0
  304. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -0
  305. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  306. package/dist/shared/src/context/DetailsPanelContext.es.js +1 -0
  307. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  308. package/dist/shared/src/context/PowerpackContext.cjs.js +65 -0
  309. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -0
  310. package/dist/shared/src/context/PowerpackContext.es.js +65 -0
  311. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -0
  312. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -0
  313. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  314. package/dist/shared/src/hooks/useEntityUpdate.es.js +1 -0
  315. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  316. package/dist/shared/src/util/getAttributeIcon.cjs.js +7 -1
  317. package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
  318. package/dist/shared/src/util/getAttributeIcon.es.js +7 -1
  319. package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
  320. package/dist/shared/src/util/getEntityTypeIcon.cjs.js +9 -0
  321. package/dist/shared/src/util/getEntityTypeIcon.cjs.js.map +1 -1
  322. package/dist/shared/src/util/getEntityTypeIcon.es.js +9 -0
  323. package/dist/shared/src/util/getEntityTypeIcon.es.js.map +1 -1
  324. package/dist/types/api/generated/actions.d.ts +3 -2
  325. package/dist/types/api/generated/addons.d.ts +8 -1
  326. package/dist/types/api/generated/anatomy.d.ts +1 -14
  327. package/dist/types/api/generated/attributes.d.ts +4 -2
  328. package/dist/types/api/generated/configuration.d.ts +6 -0
  329. package/dist/types/api/generated/entityLists.d.ts +2 -0
  330. package/dist/types/api/generated/events.d.ts +1 -1
  331. package/dist/types/api/generated/files.d.ts +11 -0
  332. package/dist/types/api/generated/operations.d.ts +1 -1
  333. package/dist/types/api/generated/projects.d.ts +59 -0
  334. package/dist/types/api/generated/reviewables.d.ts +1 -0
  335. package/dist/types/api/generated/system.d.ts +5 -2
  336. package/dist/types/api/generated/tasks.d.ts +48 -9
  337. package/dist/types/api/generated/users.d.ts +1 -4
  338. package/dist/types/api/queries/overview/getOverview.d.ts +350 -482
  339. package/dist/types/api/queries/project/getProject.d.ts +6 -0
  340. package/dist/types/components/Powerpack/PowerpackButton.d.ts +7 -0
  341. package/dist/types/components/Powerpack/PowerpackDialog.d.ts +4 -0
  342. package/dist/types/components/Powerpack/PowerpackDialog.styled.d.ts +8 -0
  343. package/dist/types/components/Powerpack/PricingLink.d.ts +4 -0
  344. package/dist/types/components/Powerpack/index.d.ts +3 -0
  345. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +2 -1
  346. package/dist/types/components/ProjectTableSettings/TableSettings.styled.d.ts +1 -0
  347. package/dist/types/components/ProjectTableSettings/TableSettingsFallback.d.ts +10 -0
  348. package/dist/types/components/ProjectTableSettings/index.d.ts +1 -0
  349. package/dist/types/components/SearchFilter/filterDates.d.ts +56 -0
  350. package/dist/types/components/SearchFilter/index.d.ts +2 -0
  351. package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +30 -0
  352. package/dist/types/components/index.d.ts +2 -0
  353. package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.d.ts +1 -1
  354. package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.d.ts +1 -1
  355. package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.d.ts +4 -3
  356. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +5 -1
  357. package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +3 -1
  358. package/dist/types/containers/ProjectTreeTable/components/GroupSettingsFallback.d.ts +11 -0
  359. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +7 -0
  360. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +11 -5
  361. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +12 -0
  362. package/dist/types/containers/ProjectTreeTable/context/index.d.ts +1 -0
  363. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +25 -0
  364. package/dist/types/containers/ProjectTreeTable/hooks/{useOverviewTable.d.ts → useBuildProjectDataTable.d.ts} +3 -1
  365. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +2 -0
  366. package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +1 -1
  367. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +13 -5
  368. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +13 -0
  369. package/dist/types/containers/ProjectTreeTable/widgets/LoadMoreWidget.d.ts +8 -0
  370. package/dist/types/containers/ProjectTreeTable/widgets/index.d.ts +1 -0
  371. package/dist/types/containers/Slicer/index.d.ts +1 -0
  372. package/dist/types/containers/Slicer/useFiltersWithHierarchy.d.ts +10 -0
  373. package/dist/types/context/PowerpackContext.d.ts +20 -0
  374. package/dist/types/context/index.d.ts +1 -0
  375. package/dist/types/util/getAttributeIcon.d.ts +1 -1
  376. package/dist/types/util/getEntityTypeIcon.d.ts +1 -0
  377. package/dist/util.cjs.js +1 -0
  378. package/dist/util.cjs.js.map +1 -1
  379. package/dist/util.es.js +2 -1
  380. package/package.json +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.cjs.js.map +0 -1
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.es.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTreeTable.es.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, memo, CSSProperties, useState, useCallback } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Column,\n Table,\n Header,\n HeaderGroup,\n RowData,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport HeaderActionButton from './components/HeaderActionButton'\nimport RowDragHandleCellContent from './components/RowDragHandleCellContent' // Added import\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\n\n// Utility function imports\nimport { getCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { createPortal } from 'react-dom'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { UpdateTableEntities } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: UpdateTableEntities\n toggleExpandAll?: ToggleExpandAll\n }\n}\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<TableRow, unknown>): CSSProperties => {\n const isPinned = column.getIsPinned()\n const offset =\n column.id !== ROW_SELECTION_COLUMN_ID && column.id !== DRAG_HANDLE_COLUMN_ID ? -30 : 0\n\n return {\n left: isPinned === 'left' ? `${column.getStart('left') + offset}px` : undefined, // Removed offset\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n width: column.getSize(),\n zIndex: isPinned ? 100 : 0,\n }\n}\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n fetchMoreOnBottomReached: (element: HTMLDivElement | null) => void\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n fetchMoreOnBottomReached,\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnVisibilityUpdater,\n columnPinning,\n columnPinningUpdater,\n columnOrder,\n columnOrderUpdater,\n columnSizing,\n columnSizingUpdater,\n } = useColumnSettingsContext()\n\n const {\n projectInfo,\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n sorting,\n updateSorting,\n showHierarchy,\n } = useProjectTableContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const { statuses = [], folderTypes = [], taskTypes = [], tags = [] } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n }),\n [users, statuses, folderTypes, taskTypes],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n //a check on mount and after a fetch to see if the table is already scrolled to the bottom and immediately needs to fetch more data\n useEffect(() => {\n fetchMoreOnBottomReached(tableContainerRef.current)\n }, [fetchMoreOnBottomReached])\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n attribFields,\n showHierarchy && tableData.length > 0 ? Math.min(tableRowsCount, 50) : 50,\n )\n return { loadingAttrib, loadingRows }\n }, [attribFields, tableData, showHierarchy, tableContainerRef.current])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, readOnly),\n [attribFields, readOnly],\n )\n\n const { updateEntities } = useCellEditing()\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: updateSorting,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningUpdater,\n onColumnSizingChange: columnSizingUpdater,\n onColumnVisibilityChange: columnVisibilityUpdater,\n onColumnOrderChange: columnOrderUpdater,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility,\n columnOrder,\n },\n enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities,\n toggleExpandAll,\n },\n })\n\n const { rows } = table.getRowModel()\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, AttributeEnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={(e) => fetchMoreOnBottomReached(e.currentTarget)}\n {...pt?.container}\n className={clsx('table-container', pt?.container?.className)}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n height: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n\n return (\n <Styled.HeaderCell\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent className={clsx('bold', 'header')}>\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\">\n {/* COLUMN HIDING */}\n {canHide && (\n <HeaderActionButton\n icon=\"visibility_off\"\n selected={!column.getIsVisible()}\n onClick={column.getToggleVisibilityHandler()}\n />\n )}\n {/* COLUMN PINNING */}\n {canPin && (\n <HeaderActionButton\n icon=\"push_pin\"\n selected={header.column.getIsPinned() === 'left'}\n onClick={() => {\n if (header.column.getIsPinned() === 'left') {\n header.column.pin(false)\n } else {\n header.column.pin('left')\n }\n }}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon={'sort'}\n style={{\n transform: (column.getIsSorted() as string) === 'asc' ? 'scaleY(-1)' : undefined,\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n}: TableBodyProps) => {\n const { handleTableBodyContextMenu } = useCellContextMenu({ attribs, onOpenNew })\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n />\n )\n })}\n </tbody>\n )\n\n if (!virtualRows.length) {\n return (\n tableContainerRef.current &&\n createPortal(<EmptyPlaceholder message=\"No items found\" />, tableContainerRef.current)\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n getCellBorderClasses,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n\n return (\n <Styled.TableCell\n {...props}\n tabIndex={0}\n key={cell.id}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n task: cell.row.original.entityType === 'task',\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n height: 40,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n // check we are not clicking on expander\n if ((e.target as HTMLElement).closest('.expander')) return\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n if (cell.column.id === 'name') {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["_a","loadingAttrib","loadingRows","jsx","Styled.TableWrapper","Styled.TableContainer","jsxs","Styled.TR","Styled.TableCell","Fragment","Styled.TableHeader","Styled.ColumnHeader","Styled.HeaderCell","Styled.TableCellContent","Styled.HeaderButtons","Styled.ResizedHandler"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTreeTable.es.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, memo, CSSProperties, useCallback } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Column,\n Table,\n Header,\n HeaderGroup,\n RowData,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport HeaderActionButton from './components/HeaderActionButton'\nimport RowDragHandleCellContent from './components/RowDragHandleCellContent' // Added import\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\n\n// Utility function imports\nimport { getCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { createPortal } from 'react-dom'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { UpdateTableEntities } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport useBuildGroupByTableData, { GroupByEntityType } from './hooks/useBuildGroupByTableData'\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: UpdateTableEntities\n toggleExpandAll?: ToggleExpandAll\n }\n}\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<TableRow, unknown>): CSSProperties => {\n const isPinned = column.getIsPinned()\n const offset =\n column.id !== ROW_SELECTION_COLUMN_ID && column.id !== DRAG_HANDLE_COLUMN_ID ? -30 : 0\n\n return {\n left: isPinned === 'left' ? `${column.getStart('left') + offset}px` : undefined, // Removed offset\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n width: column.getSize(),\n zIndex: isPinned ? 100 : 0,\n }\n}\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n fetchMoreOnBottomReached: (element: HTMLDivElement | null) => void\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n fetchMoreOnBottomReached,\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n groupByConfig,\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnVisibilityUpdater,\n columnPinning,\n columnPinningUpdater,\n columnOrder,\n columnOrderUpdater,\n columnSizing,\n columnSizingUpdater,\n groupBy,\n } = useColumnSettingsContext()\n\n const {\n projectInfo,\n tableData: defaultTableData,\n taskGroups,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n sorting,\n updateSorting,\n showHierarchy,\n fetchNextPage,\n } = useProjectTableContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType,\n groups: taskGroups,\n project: projectInfo,\n })\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groupByConfig?.entityType],\n )\n\n const tableData = groupedTableData ? groupedTableData : defaultTableData\n\n const isLoading = isLoadingProp || isLoadingData\n\n const { statuses = [], folderTypes = [], taskTypes = [], tags = [] } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n }),\n [users, statuses, folderTypes, taskTypes],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n // reference of how many rows are currently rendered in the table\n const tableRowsCountRef = useRef(0)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n attribFields,\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, readOnly),\n [attribFields, readOnly],\n )\n\n const { updateEntities } = useCellEditing()\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n groupBy,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: updateSorting,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningUpdater,\n onColumnSizingChange: columnSizingUpdater,\n onColumnVisibilityChange: columnVisibilityUpdater,\n onColumnOrderChange: columnOrderUpdater,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility,\n columnOrder,\n },\n enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities,\n toggleExpandAll,\n loadMoreTasks: fetchNextPage,\n },\n })\n\n // TODO: when there is data (like in error) then we have infinite rendering\n\n const { rows } = table.getRowModel()\n\n // update the tableRowsCountRef with the current number of rows\n useEffect(() => {\n tableRowsCountRef.current = rows.length\n }, [rows.length])\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n if (!rows.length) return\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, AttributeEnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={(e) => fetchMoreOnBottomReached(e.currentTarget)}\n {...pt?.container}\n className={clsx('table-container', pt?.container?.className)}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n error={error}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n height: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n\n return (\n <Styled.HeaderCell\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent className={clsx('bold', 'header')}>\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\">\n {/* COLUMN HIDING */}\n {canHide && (\n <HeaderActionButton\n icon=\"visibility_off\"\n selected={!column.getIsVisible()}\n onClick={column.getToggleVisibilityHandler()}\n />\n )}\n {/* COLUMN PINNING */}\n {canPin && (\n <HeaderActionButton\n icon=\"push_pin\"\n selected={header.column.getIsPinned() === 'left'}\n onClick={() => {\n if (header.column.getIsPinned() === 'left') {\n header.column.pin(false)\n } else {\n header.column.pin('left')\n }\n }}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon={'sort'}\n style={{\n transform: (column.getIsSorted() as string) === 'asc' ? 'scaleY(-1)' : undefined,\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n error?: string\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n}: TableBodyProps) => {\n const { handleTableBodyContextMenu } = useCellContextMenu({ attribs, onOpenNew })\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <EmptyPlaceholder message=\"No items found\" error={error} />,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n getCellBorderClasses,\n clearSelection,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n const isGroup = cell.row.original.entityType === 'group'\n\n return (\n <Styled.TableCell\n {...props}\n tabIndex={0}\n key={cell.id}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n task: cell.row.original.entityType === 'task',\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n height: 40,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n // check we are not clicking on expander\n if ((e.target as HTMLElement).closest('.expander')) return\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n if (\n cell.column.id === 'name' &&\n !(e.target as HTMLElement).closest('.expander') &&\n !isGroup\n ) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["_a","loadingAttrib","loadingRows","jsx","Styled.TableWrapper","Styled.TableContainer","jsxs","Styled.TR","Styled.TableCell","Fragment","Styled.TableHeader","Styled.ColumnHeader","Styled.HeaderCell","Styled.TableCellContent","Styled.HeaderButtons","Styled.ResizedHandler"],"mappings":"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"}
@@ -9,6 +9,7 @@ require("./widgets/TextWidget.cjs.js");
9
9
  require("./widgets/BooleanWidget.cjs.js");
10
10
  const CellWidget = require("./widgets/CellWidget.cjs.js");
11
11
  const EntityNameWidget = require("./widgets/EntityNameWidget.cjs.js");
12
+ const GroupHeaderWidget = require("./widgets/GroupHeaderWidget.cjs.js");
12
13
  const ThumbnailWidget = require("./widgets/ThumbnailWidget.cjs.js");
13
14
  const cellUtils = require("./utils/cellUtils.cjs.js");
14
15
  const ProjectTreeTable_styled = require("./ProjectTreeTable.styled.cjs.js");
@@ -16,6 +17,8 @@ const clsx = require("clsx");
16
17
  const SelectionCell = require("./components/SelectionCell.cjs.js");
17
18
  const RowSelectionHeader = require("./components/RowSelectionHeader.cjs.js");
18
19
  const SelectionCellsContext = require("./context/SelectionCellsContext.cjs.js");
20
+ const useBuildGroupByTableData = require("./hooks/useBuildGroupByTableData.cjs.js");
21
+ const LoadMoreWidget = require("./widgets/LoadMoreWidget.cjs.js");
19
22
  const MIN_SIZE = 50;
20
23
  const withLoadingStateSort = (sortFn) => {
21
24
  return (rowA, rowB, ...args) => {
@@ -57,7 +60,8 @@ const buildTreeTableColumns = ({
57
60
  showHierarchy,
58
61
  options,
59
62
  excluded,
60
- extraColumns
63
+ extraColumns,
64
+ groupBy
61
65
  }) => {
62
66
  const staticColumns = [];
63
67
  const isIncluded = (id) => !(excluded == null ? void 0 : excluded.includes(id));
@@ -69,7 +73,10 @@ const buildTreeTableColumns = ({
69
73
  enablePinning: false,
70
74
  enableHiding: false,
71
75
  header: () => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(RowSelectionHeader, {}),
72
- cell: () => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(SelectionCell.SelectionCell, {}),
76
+ cell: ({ row }) => {
77
+ if (row.original.entityType === "group") return null;
78
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(SelectionCell.SelectionCell, {});
79
+ },
73
80
  size: 20
74
81
  });
75
82
  }
@@ -104,7 +111,7 @@ const buildTreeTableColumns = ({
104
111
  staticColumns.push({
105
112
  id: "name",
106
113
  accessorKey: "name",
107
- header: () => "Folder / Task",
114
+ header: () => groupBy ? "Group" : "Folder / Task",
108
115
  minSize: MIN_SIZE,
109
116
  sortingFn: withLoadingStateSort(showHierarchy ? nameSort : pathSort),
110
117
  enableSorting: true,
@@ -114,6 +121,19 @@ const buildTreeTableColumns = ({
114
121
  cell: ({ row, column, table }) => {
115
122
  const meta = table.options.meta;
116
123
  const cellId = cellUtils.getCellId(row.id, column.id);
124
+ if (row.original.entityType === useBuildGroupByTableData.NEXT_PAGE_ID && row.original.group) {
125
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
126
+ LoadMoreWidget,
127
+ {
128
+ label: "Load more tasks",
129
+ id: row.original.group.value,
130
+ onLoadMore: (id) => {
131
+ var _a;
132
+ return (_a = meta == null ? void 0 : meta.loadMoreTasks) == null ? void 0 : _a.call(meta, id);
133
+ }
134
+ }
135
+ );
136
+ }
117
137
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
118
138
  ProjectTreeTable_styled.TableCellContent,
119
139
  {
@@ -126,7 +146,20 @@ const buildTreeTableColumns = ({
126
146
  paddingLeft: `calc(${row.depth * 1}rem + 8px)`
127
147
  },
128
148
  tabIndex: 0,
129
- children: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
149
+ children: row.original.group ? /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
150
+ GroupHeaderWidget.GroupHeaderWidget,
151
+ {
152
+ id: row.id,
153
+ label: row.original.group.label,
154
+ name: row.original.name,
155
+ icon: row.original.group.icon,
156
+ img: row.original.group.img,
157
+ color: row.original.group.color,
158
+ count: row.original.group.count,
159
+ isExpanded: row.getIsExpanded(),
160
+ toggleExpanded: row.getToggleExpandedHandler()
161
+ }
162
+ ) : /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
130
163
  EntityNameWidget.EntityNameWidget,
131
164
  {
132
165
  id: row.id,
@@ -167,6 +200,7 @@ const buildTreeTableColumns = ({
167
200
  var _a, _b;
168
201
  const { value, id, type } = getValueIdType(row, column.id);
169
202
  const meta = table.options.meta;
203
+ if (["group", useBuildGroupByTableData.NEXT_PAGE_ID].includes(type)) return null;
170
204
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
171
205
  CellWidget.CellWidget,
172
206
  {
@@ -203,6 +237,7 @@ const buildTreeTableColumns = ({
203
237
  cell: ({ row, column, table }) => {
204
238
  var _a, _b, _c;
205
239
  const { value, id, type } = getValueIdType(row, column.id);
240
+ if (["group", useBuildGroupByTableData.NEXT_PAGE_ID].includes(type)) return null;
206
241
  const fieldId = type === "folder" ? "folderType" : "taskType";
207
242
  const meta = table.options.meta;
208
243
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
@@ -239,6 +274,7 @@ const buildTreeTableColumns = ({
239
274
  var _a, _b;
240
275
  const meta = table.options.meta;
241
276
  const { value, id, type } = getValueIdType(row, column.id);
277
+ if (["group", useBuildGroupByTableData.NEXT_PAGE_ID].includes(type)) return null;
242
278
  if (type === "folder")
243
279
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
244
280
  CellWidget.CellWidget,
@@ -293,6 +329,7 @@ const buildTreeTableColumns = ({
293
329
  var _a, _b;
294
330
  const meta = table.options.meta;
295
331
  const { value, id, type } = getValueIdType(row, column.id);
332
+ if (["group", useBuildGroupByTableData.NEXT_PAGE_ID].includes(type)) return null;
296
333
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
297
334
  CellWidget.CellWidget,
298
335
  {
@@ -332,11 +369,12 @@ const buildTreeTableColumns = ({
332
369
  enablePinning: true,
333
370
  enableHiding: true,
334
371
  cell: ({ row, column, table }) => {
335
- var _a;
372
+ var _a, _b;
336
373
  const meta = table.options.meta;
337
374
  const columnIdParsed = column.id.replace("attrib_", "");
338
375
  const { value, id, type } = getValueIdType(row, columnIdParsed, "attrib");
339
- const isInherited = !row.original.ownAttrib.includes(columnIdParsed);
376
+ const isInherited = !((_a = row.original.ownAttrib) == null ? void 0 : _a.includes(columnIdParsed));
377
+ if (["group", useBuildGroupByTableData.NEXT_PAGE_ID].includes(type)) return null;
340
378
  return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
341
379
  CellWidget.CellWidget,
342
380
  {
@@ -348,7 +386,7 @@ const buildTreeTableColumns = ({
348
386
  options: attrib.data.enum || [],
349
387
  isCollapsed: !!row.original.childOnlyMatch,
350
388
  isInherited: isInherited && ["folder", "task"].includes(type),
351
- isReadOnly: attrib.readOnly || ((_a = meta == null ? void 0 : meta.readOnly) == null ? void 0 : _a.some(
389
+ isReadOnly: attrib.readOnly || ((_b = meta == null ? void 0 : meta.readOnly) == null ? void 0 : _b.some(
352
390
  (id2) => id2 === columnIdParsed || id2 === "attrib" && attrib.builtin
353
391
  )),
354
392
  onChange: (value2) => {
@@ -1 +1 @@
1
- {"version":3,"file":"buildTreeTableColumns.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/buildTreeTableColumns.tsx"],"sourcesContent":["import { ColumnDef, FilterFnOption, Row, SortingFn, sortingFns } from '@tanstack/react-table'\nimport { TableRow } from './types/table'\nimport { AttributeData, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { CellWidget, EntityNameWidget, ThumbnailWidget } from './widgets'\nimport { getCellId, getCellValue } from './utils/cellUtils'\nimport { TableCellContent } from './ProjectTreeTable.styled'\nimport clsx from 'clsx'\nimport { SelectionCell } from './components/SelectionCell'\nimport RowSelectionHeader from './components/RowSelectionHeader'\nimport { ROW_SELECTION_COLUMN_ID } from './context/SelectionCellsContext'\n\nconst MIN_SIZE = 50\n\n// Wrapper function for sorting that pushes isLoading rows to the bottom\nconst withLoadingStateSort = (sortFn: SortingFn<any>): SortingFn<any> => {\n return (rowA, rowB, ...args) => {\n // If row loading states differ, prioritize non-loading rows\n if (rowA.original.isLoading !== rowB.original.isLoading) {\n return rowA.original.isLoading ? 1 : -1\n }\n // Otherwise, use the original sort function\n return sortFn(rowA, rowB, ...args)\n }\n}\n\nconst nameSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.label || rowA.original.name\n const labelB = rowB.original.label || rowB.original.name\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\nconst pathSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.path || rowA.original.name\n const labelB = rowB.original.path || rowB.original.name\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\n\ntype AttribSortingFn = (rowA: any, rowB: any, columnId: string, attribute?: AttributeData) => number\n// sort by the order of the enum options\nconst attribSort: AttribSortingFn = (rowA, rowB, columnId, attrib) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n // if attrib is defined and has enum options, use them\n if (attrib && attrib.enum) {\n const indexA = attrib.enum.findIndex((o) => o.value === valueA)\n const indexB = attrib.enum.findIndex((o) => o.value === valueB)\n return indexA - indexB < 0 ? 1 : -1\n } else if (attrib?.type === 'datetime') {\n return sortingFns.datetime(rowA, rowB, columnId)\n } else if (attrib?.type === 'boolean') {\n const boolA = valueA === true ? 1 : 0\n const boolB = valueB === true ? 1 : 0\n return boolA - boolB\n } else {\n // default sorting\n return sortingFns.alphanumeric(rowA, rowB, columnId)\n }\n}\n\nexport type DefaultColumns =\n | typeof ROW_SELECTION_COLUMN_ID\n | 'thumbnail'\n | 'name'\n | 'status'\n | 'subType'\n | 'assignees'\n | 'tags'\n\nexport type TreeTableExtraColumn = { column: ColumnDef<TableRow>; position?: number }\n\nexport type BuildTreeTableColumnsProps = {\n attribs: ProjectTableAttribute[]\n showHierarchy: boolean\n options: BuiltInFieldOptions\n excluded?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n}\n\nconst buildTreeTableColumns = ({\n attribs,\n showHierarchy,\n options,\n excluded,\n extraColumns,\n}: BuildTreeTableColumnsProps) => {\n const staticColumns: ColumnDef<TableRow>[] = []\n\n // Helper to check if a column should be included\n const isIncluded = (id: DefaultColumns | string) => !excluded?.includes(id)\n\n // Conditionally add static columns\n if (isIncluded(ROW_SELECTION_COLUMN_ID)) {\n staticColumns.push({\n id: ROW_SELECTION_COLUMN_ID,\n enableResizing: false,\n enableSorting: false,\n enablePinning: false,\n enableHiding: false,\n\n header: () => <RowSelectionHeader />,\n cell: () => <SelectionCell />,\n size: 20,\n })\n }\n\n if (isIncluded('thumbnail')) {\n staticColumns.push({\n id: 'thumbnail',\n header: 'Thumbnail',\n size: 63,\n minSize: 64,\n enableResizing: true,\n enableSorting: false,\n cell: ({ row, table }) => {\n const meta = table.options.meta\n if (!meta) return null\n return (\n <ThumbnailWidget\n entityId={row.original.entityId || row.id}\n entityType={row.original.entityType}\n updatedAt={row.original.updatedAt}\n icon={row.original.icon}\n projectName={meta?.projectName as string}\n className={clsx('thumbnail', {\n loading: row.original.isLoading,\n })}\n />\n )\n },\n })\n }\n\n if (isIncluded('name')) {\n staticColumns.push({\n id: 'name',\n accessorKey: 'name',\n header: () => 'Folder / Task',\n minSize: MIN_SIZE,\n sortingFn: withLoadingStateSort(showHierarchy ? nameSort : pathSort),\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const cellId = getCellId(row.id, column.id)\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', row.original.entityType, {\n loading: row.original.isLoading,\n hierarchy: showHierarchy,\n })}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + 8px)`,\n }}\n tabIndex={0}\n >\n <EntityNameWidget\n id={row.id}\n label={row.original.label}\n name={row.original.name}\n path={!showHierarchy ? row.original.path : undefined}\n showHierarchy={showHierarchy}\n icon={row.original.icon}\n type={row.original.entityType}\n isExpanded={row.getIsExpanded()}\n toggleExpandAll={() => meta?.toggleExpandAll?.([row.id])}\n toggleExpanded={row.getToggleExpandedHandler()}\n />\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('status')) {\n staticColumns.push({\n id: 'status',\n accessorKey: 'status',\n minSize: MIN_SIZE,\n header: () => 'Status',\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: options.status, type: 'string' }),\n ),\n sortDescFirst: true,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('status', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={meta?.options?.status.filter((s) => s.scope?.includes(type))}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n if (isIncluded('subType')) {\n staticColumns.push({\n id: 'subType',\n accessorKey: 'subType',\n header: () => 'Type',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const fieldId = type === 'folder' ? 'folderType' : 'taskType'\n const meta = table.options.meta\n return (\n <CellWidget\n rowId={id}\n className={clsx('subType', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={\n type === 'folder'\n ? meta?.options?.folderType\n : type === 'task'\n ? meta?.options?.taskType\n : []\n }\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: fieldId, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n if (isIncluded('assignees')) {\n staticColumns.push({\n id: 'assignees',\n accessorKey: 'assignees',\n header: () => 'Assignees',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (type === 'folder')\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value=\"\"\n isPlaceholder\n />\n )\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n pt={{\n enum: {\n multiSelectClose: value?.length === 0, // close the dropdown on first assignment\n search: true, // enable search at all times\n multipleOverride: false,\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('tags')) {\n staticColumns.push({\n id: 'tags',\n accessorKey: 'tags',\n header: () => 'Tags',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n return (\n <CellWidget\n rowId={id}\n className={clsx('tags', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.tag}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n enableCustomValues\n />\n )\n },\n })\n }\n\n const attributeColumns: ColumnDef<TableRow>[] = attribs\n .filter((attrib) => {\n const columnId = 'attrib_' + attrib.name\n // Check if the specific attribute column is excluded\n // or if all built-in attributes are excluded and this is a built-in attribute\n if (excluded?.includes(columnId)) return false\n if (attrib.builtin && excluded?.includes('attrib')) return false\n return true\n })\n .map((attrib) => {\n const attribColumn: ColumnDef<TableRow> = {\n id: 'attrib_' + attrib.name,\n accessorKey: 'attrib.' + attrib.name,\n header: () => attrib.data.title || attrib.name,\n minSize: MIN_SIZE,\n filterFn: 'fuzzy' as FilterFnOption<TableRow>,\n sortingFn: withLoadingStateSort((a, b, c) => attribSort(a, b, c, attrib.data)),\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const columnIdParsed = column.id.replace('attrib_', '')\n const { value, id, type } = getValueIdType(row, columnIdParsed, 'attrib')\n const isInherited = !row.original.ownAttrib.includes(columnIdParsed)\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('attrib', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: attrib.data.type || 'string' }}\n options={attrib.data.enum || []}\n isCollapsed={!!row.original.childOnlyMatch}\n isInherited={isInherited && ['folder', 'task'].includes(type)}\n isReadOnly={\n attrib.readOnly ||\n meta?.readOnly?.some(\n (id) => id === columnIdParsed || (id === 'attrib' && attrib.builtin),\n )\n }\n onChange={(value) =>\n meta?.updateEntities?.([\n { field: columnIdParsed, value, id, type, isAttrib: true, rowId: row.id },\n ])\n }\n />\n )\n },\n }\n return attribColumn\n })\n\n const allColumns = [...staticColumns, ...attributeColumns]\n\n // Add extra columns if provided\n if (extraColumns) {\n extraColumns.forEach(({ column, position = -1 }) => {\n if (position >= 0 && position < allColumns.length) {\n allColumns.splice(position, 0, column)\n } else {\n allColumns.push(column)\n }\n })\n }\n\n return allColumns\n}\n\nexport default buildTreeTableColumns\n\nexport const getValueIdType = (\n row: Row<TableRow>,\n field: string,\n nestedField?: keyof TableRow,\n): {\n value: any\n id: string\n type: string\n} => ({\n value: nestedField\n ? (row.original[nestedField as keyof TableRow] as any)?.[field]\n : (row.original[field as keyof TableRow] as any),\n id: row.id,\n type: row.original.entityType,\n})\n"],"names":["getCellValue","sortingFns","ROW_SELECTION_COLUMN_ID","jsx","SelectionCell","ThumbnailWidget","getCellId","TableCellContent","EntityNameWidget","CellWidget","_a","value","id"],"mappings":"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"}
1
+ {"version":3,"file":"buildTreeTableColumns.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/buildTreeTableColumns.tsx"],"sourcesContent":["import { ColumnDef, FilterFnOption, Row, SortingFn, sortingFns } from '@tanstack/react-table'\nimport { TableRow } from './types/table'\nimport { AttributeData, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { CellWidget, EntityNameWidget, GroupHeaderWidget, ThumbnailWidget } from './widgets'\nimport { getCellId, getCellValue } from './utils/cellUtils'\nimport { TableCellContent } from './ProjectTreeTable.styled'\nimport clsx from 'clsx'\nimport { SelectionCell } from './components/SelectionCell'\nimport RowSelectionHeader from './components/RowSelectionHeader'\nimport { ROW_SELECTION_COLUMN_ID } from './context/SelectionCellsContext'\nimport { TableGroupBy } from './context'\nimport { NEXT_PAGE_ID } from './hooks/useBuildGroupByTableData'\nimport LoadMoreWidget from './widgets/LoadMoreWidget'\n\nconst MIN_SIZE = 50\n\n// Wrapper function for sorting that pushes isLoading rows to the bottom\nconst withLoadingStateSort = (sortFn: SortingFn<any>): SortingFn<any> => {\n return (rowA, rowB, ...args) => {\n // If row loading states differ, prioritize non-loading rows\n if (rowA.original.isLoading !== rowB.original.isLoading) {\n return rowA.original.isLoading ? 1 : -1\n }\n // Otherwise, use the original sort function\n return sortFn(rowA, rowB, ...args)\n }\n}\n\nconst nameSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.label || rowA.original.name\n const labelB = rowB.original.label || rowB.original.name\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\nconst pathSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.path || rowA.original.name\n const labelB = rowB.original.path || rowB.original.name\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\n\ntype AttribSortingFn = (rowA: any, rowB: any, columnId: string, attribute?: AttributeData) => number\n// sort by the order of the enum options\nconst attribSort: AttribSortingFn = (rowA, rowB, columnId, attrib) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n // if attrib is defined and has enum options, use them\n if (attrib && attrib.enum) {\n const indexA = attrib.enum.findIndex((o) => o.value === valueA)\n const indexB = attrib.enum.findIndex((o) => o.value === valueB)\n return indexA - indexB < 0 ? 1 : -1\n } else if (attrib?.type === 'datetime') {\n return sortingFns.datetime(rowA, rowB, columnId)\n } else if (attrib?.type === 'boolean') {\n const boolA = valueA === true ? 1 : 0\n const boolB = valueB === true ? 1 : 0\n return boolA - boolB\n } else {\n // default sorting\n return sortingFns.alphanumeric(rowA, rowB, columnId)\n }\n}\n\nexport type DefaultColumns =\n | typeof ROW_SELECTION_COLUMN_ID\n | 'thumbnail'\n | 'name'\n | 'status'\n | 'subType'\n | 'assignees'\n | 'tags'\n\nexport type TreeTableExtraColumn = { column: ColumnDef<TableRow>; position?: number }\n\nexport type BuildTreeTableColumnsProps = {\n attribs: ProjectTableAttribute[]\n showHierarchy: boolean\n options: BuiltInFieldOptions\n excluded?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n groupBy?: TableGroupBy\n}\n\nconst buildTreeTableColumns = ({\n attribs,\n showHierarchy,\n options,\n excluded,\n extraColumns,\n groupBy,\n}: BuildTreeTableColumnsProps) => {\n const staticColumns: ColumnDef<TableRow>[] = []\n\n // Helper to check if a column should be included\n const isIncluded = (id: DefaultColumns | string) => !excluded?.includes(id)\n\n // Conditionally add static columns\n if (isIncluded(ROW_SELECTION_COLUMN_ID)) {\n staticColumns.push({\n id: ROW_SELECTION_COLUMN_ID,\n enableResizing: false,\n enableSorting: false,\n enablePinning: false,\n enableHiding: false,\n\n header: () => <RowSelectionHeader />,\n cell: ({ row }) => {\n if (row.original.entityType === 'group') return null\n return <SelectionCell />\n },\n size: 20,\n })\n }\n\n if (isIncluded('thumbnail')) {\n staticColumns.push({\n id: 'thumbnail',\n header: 'Thumbnail',\n size: 63,\n minSize: 64,\n enableResizing: true,\n enableSorting: false,\n cell: ({ row, table }) => {\n const meta = table.options.meta\n if (!meta) return null\n return (\n <ThumbnailWidget\n entityId={row.original.entityId || row.id}\n entityType={row.original.entityType}\n updatedAt={row.original.updatedAt}\n icon={row.original.icon}\n projectName={meta?.projectName as string}\n className={clsx('thumbnail', {\n loading: row.original.isLoading,\n })}\n />\n )\n },\n })\n }\n\n if (isIncluded('name')) {\n staticColumns.push({\n id: 'name',\n accessorKey: 'name',\n header: () => (groupBy ? 'Group' : 'Folder / Task'),\n minSize: MIN_SIZE,\n sortingFn: withLoadingStateSort(showHierarchy ? nameSort : pathSort),\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const cellId = getCellId(row.id, column.id)\n\n if (row.original.entityType === NEXT_PAGE_ID && row.original.group) {\n return (\n <LoadMoreWidget\n label={'Load more tasks'}\n id={row.original.group.value}\n onLoadMore={(id) => meta?.loadMoreTasks?.(id)}\n />\n )\n }\n\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', row.original.entityType, {\n loading: row.original.isLoading,\n hierarchy: showHierarchy,\n })}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + 8px)`,\n }}\n tabIndex={0}\n >\n {row.original.group ? (\n <GroupHeaderWidget\n id={row.id}\n label={row.original.group.label}\n name={row.original.name}\n icon={row.original.group.icon}\n img={row.original.group.img}\n color={row.original.group.color}\n count={row.original.group.count}\n isExpanded={row.getIsExpanded()}\n toggleExpanded={row.getToggleExpandedHandler()}\n />\n ) : (\n <EntityNameWidget\n id={row.id}\n label={row.original.label}\n name={row.original.name}\n path={!showHierarchy ? row.original.path : undefined}\n showHierarchy={showHierarchy}\n icon={row.original.icon}\n type={row.original.entityType}\n isExpanded={row.getIsExpanded()}\n toggleExpandAll={() => meta?.toggleExpandAll?.([row.id])}\n toggleExpanded={row.getToggleExpandedHandler()}\n />\n )}\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('status')) {\n staticColumns.push({\n id: 'status',\n accessorKey: 'status',\n minSize: MIN_SIZE,\n header: () => 'Status',\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: options.status, type: 'string' }),\n ),\n sortDescFirst: true,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n if (['group', NEXT_PAGE_ID].includes(type)) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('status', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={meta?.options?.status.filter((s) => s.scope?.includes(type))}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n if (isIncluded('subType')) {\n staticColumns.push({\n id: 'subType',\n accessorKey: 'subType',\n header: () => 'Type',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type)) return null\n const fieldId = type === 'folder' ? 'folderType' : 'taskType'\n const meta = table.options.meta\n return (\n <CellWidget\n rowId={id}\n className={clsx('subType', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={\n type === 'folder'\n ? meta?.options?.folderType\n : type === 'task'\n ? meta?.options?.taskType\n : []\n }\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: fieldId, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n if (isIncluded('assignees')) {\n staticColumns.push({\n id: 'assignees',\n accessorKey: 'assignees',\n header: () => 'Assignees',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type)) return null\n\n if (type === 'folder')\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value=\"\"\n isPlaceholder\n />\n )\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n pt={{\n enum: {\n multiSelectClose: value?.length === 0, // close the dropdown on first assignment\n search: true, // enable search at all times\n multipleOverride: false,\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('tags')) {\n staticColumns.push({\n id: 'tags',\n accessorKey: 'tags',\n header: () => 'Tags',\n minSize: MIN_SIZE,\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type)) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('tags', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.tag}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.([{ field: column.id, value, id, type, rowId: row.id }])\n }\n isReadOnly={meta?.readOnly?.includes(column.id)}\n enableCustomValues\n />\n )\n },\n })\n }\n\n const attributeColumns: ColumnDef<TableRow>[] = attribs\n .filter((attrib) => {\n const columnId = 'attrib_' + attrib.name\n // Check if the specific attribute column is excluded\n // or if all built-in attributes are excluded and this is a built-in attribute\n if (excluded?.includes(columnId)) return false\n if (attrib.builtin && excluded?.includes('attrib')) return false\n return true\n })\n .map((attrib) => {\n const attribColumn: ColumnDef<TableRow> = {\n id: 'attrib_' + attrib.name,\n accessorKey: 'attrib.' + attrib.name,\n header: () => attrib.data.title || attrib.name,\n minSize: MIN_SIZE,\n filterFn: 'fuzzy' as FilterFnOption<TableRow>,\n sortingFn: withLoadingStateSort((a, b, c) => attribSort(a, b, c, attrib.data)),\n enableSorting: true,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const columnIdParsed = column.id.replace('attrib_', '')\n const { value, id, type } = getValueIdType(row, columnIdParsed, 'attrib')\n const isInherited = !row.original.ownAttrib?.includes(columnIdParsed)\n if (['group', NEXT_PAGE_ID].includes(type)) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('attrib', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: attrib.data.type || 'string' }}\n options={attrib.data.enum || []}\n isCollapsed={!!row.original.childOnlyMatch}\n isInherited={isInherited && ['folder', 'task'].includes(type)}\n isReadOnly={\n attrib.readOnly ||\n meta?.readOnly?.some(\n (id) => id === columnIdParsed || (id === 'attrib' && attrib.builtin),\n )\n }\n onChange={(value) =>\n meta?.updateEntities?.([\n { field: columnIdParsed, value, id, type, isAttrib: true, rowId: row.id },\n ])\n }\n />\n )\n },\n }\n return attribColumn\n })\n\n const allColumns = [...staticColumns, ...attributeColumns]\n\n // Add extra columns if provided\n if (extraColumns) {\n extraColumns.forEach(({ column, position = -1 }) => {\n if (position >= 0 && position < allColumns.length) {\n allColumns.splice(position, 0, column)\n } else {\n allColumns.push(column)\n }\n })\n }\n\n return allColumns\n}\n\nexport default buildTreeTableColumns\n\nexport const getValueIdType = (\n row: Row<TableRow>,\n field: string,\n nestedField?: keyof TableRow,\n): {\n value: any\n id: string\n type: string\n} => ({\n value: nestedField\n ? (row.original[nestedField as keyof TableRow] as any)?.[field]\n : (row.original[field as keyof TableRow] as any),\n id: row.id,\n type: row.original.entityType,\n})\n"],"names":["getCellValue","sortingFns","ROW_SELECTION_COLUMN_ID","jsx","SelectionCell","ThumbnailWidget","getCellId","NEXT_PAGE_ID","TableCellContent","GroupHeaderWidget","EntityNameWidget","CellWidget","_a","value","id"],"mappings":"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"}