@ynput/ayon-frontend-shared 0.2.15 → 0.2.17

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 (575) hide show
  1. package/dist/DetailsPanel.cjs.js +12 -10
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +12 -10
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +71 -34
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +55 -18
  8. package/dist/ProjectTreeTable.es.js.map +1 -1
  9. package/dist/_virtual/index.cjs10.js +5 -3
  10. package/dist/_virtual/index.cjs10.js.map +1 -1
  11. package/dist/_virtual/index.cjs4.js +4 -4
  12. package/dist/_virtual/index.cjs5.js +4 -4
  13. package/dist/_virtual/index.cjs6.js +2 -2
  14. package/dist/_virtual/index.cjs7.js +3 -5
  15. package/dist/_virtual/index.cjs7.js.map +1 -1
  16. package/dist/_virtual/index.es10.js +5 -2
  17. package/dist/_virtual/index.es10.js.map +1 -1
  18. package/dist/_virtual/index.es4.js +4 -4
  19. package/dist/_virtual/index.es5.js +4 -4
  20. package/dist/_virtual/index.es6.js +2 -2
  21. package/dist/_virtual/index.es7.js +2 -5
  22. package/dist/_virtual/index.es7.js.map +1 -1
  23. package/dist/api.cjs.js +6 -1
  24. package/dist/api.cjs.js.map +1 -1
  25. package/dist/api.es.js +8 -3
  26. package/dist/api.es.js.map +1 -1
  27. package/dist/components.cjs.js +3 -0
  28. package/dist/components.cjs.js.map +1 -1
  29. package/dist/components.es.js +3 -0
  30. package/dist/components.es.js.map +1 -1
  31. package/dist/index.cjs.js +9 -7
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/index.es.js +9 -7
  34. package/dist/index.es.js.map +1 -1
  35. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.cjs.js +1 -2
  36. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.cjs.js.map +1 -1
  37. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.es.js +1 -2
  38. package/dist/node_modules/graphql-request/build/legacy/helpers/analyzeDocument.es.js.map +1 -1
  39. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  40. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  41. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  42. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  43. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  44. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  45. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  46. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  47. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  48. package/dist/node_modules/remove-accents/index.es.js +1 -1
  49. package/dist/shared/src/api/generated/graphql.cjs.js +24 -0
  50. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/graphql.es.js +24 -0
  52. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  53. package/dist/shared/src/api/generated/grouping.cjs.js +18 -0
  54. package/dist/shared/src/api/generated/grouping.cjs.js.map +1 -0
  55. package/dist/shared/src/api/generated/grouping.es.js +18 -0
  56. package/dist/shared/src/api/generated/grouping.es.js.map +1 -0
  57. package/dist/shared/src/api/generated/tasks.cjs.js +0 -8
  58. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/tasks.es.js +0 -8
  60. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  61. package/dist/shared/src/api/queries/actions/getActions.cjs.js +1 -0
  62. package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
  63. package/dist/shared/src/api/queries/actions/getActions.es.js +1 -0
  64. package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
  65. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -0
  66. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  67. package/dist/shared/src/api/queries/activities/getActivities.es.js +1 -0
  68. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  69. package/dist/shared/src/api/queries/activities/getMentions.cjs.js +1 -0
  70. package/dist/shared/src/api/queries/activities/getMentions.cjs.js.map +1 -1
  71. package/dist/shared/src/api/queries/activities/getMentions.es.js +1 -0
  72. package/dist/shared/src/api/queries/activities/getMentions.es.js.map +1 -1
  73. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js +1 -0
  74. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js.map +1 -1
  75. package/dist/shared/src/api/queries/activities/updateReaction.es.js +1 -0
  76. package/dist/shared/src/api/queries/activities/updateReaction.es.js.map +1 -1
  77. package/dist/shared/src/api/queries/addons/getAddons.cjs.js +1 -0
  78. package/dist/shared/src/api/queries/addons/getAddons.cjs.js.map +1 -1
  79. package/dist/shared/src/api/queries/addons/getAddons.es.js +1 -0
  80. package/dist/shared/src/api/queries/addons/getAddons.es.js.map +1 -1
  81. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js +1 -0
  82. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
  83. package/dist/shared/src/api/queries/attributes/getAttributes.es.js +1 -0
  84. package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
  85. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js +1 -0
  86. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js.map +1 -1
  87. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js +1 -0
  88. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js.map +1 -1
  89. package/dist/shared/src/api/queries/entities/getEntity.cjs.js +1 -0
  90. package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
  91. package/dist/shared/src/api/queries/entities/getEntity.es.js +1 -0
  92. package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
  93. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -0
  94. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  95. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -0
  96. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  97. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +2 -0
  98. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  99. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +2 -0
  100. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  101. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  102. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  103. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  104. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  105. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -0
  106. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  107. package/dist/shared/src/api/queries/entityLists/getLists.es.js +1 -0
  108. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  109. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +1 -0
  110. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -1
  111. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +1 -0
  112. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -1
  113. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -0
  114. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  115. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +1 -0
  116. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  117. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -0
  118. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  119. package/dist/shared/src/api/queries/folders/getFolders.es.js +1 -0
  120. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  121. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +47 -0
  122. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -0
  123. package/dist/shared/src/api/queries/grouping/getGrouping.es.js +47 -0
  124. package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -0
  125. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +4 -5
  126. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  127. package/dist/shared/src/api/queries/overview/getOverview.es.js +4 -5
  128. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  129. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
  130. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  131. package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
  132. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  133. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js +1 -0
  134. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js.map +1 -1
  135. package/dist/shared/src/api/queries/permissions/getPermissions.es.js +1 -0
  136. package/dist/shared/src/api/queries/permissions/getPermissions.es.js.map +1 -1
  137. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -0
  138. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  139. package/dist/shared/src/api/queries/project/getProject.es.js +1 -0
  140. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  141. package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -0
  142. package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
  143. package/dist/shared/src/api/queries/review/getReview.es.js +1 -0
  144. package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
  145. package/dist/shared/src/api/queries/review/updateReview.cjs.js +1 -0
  146. package/dist/shared/src/api/queries/review/updateReview.cjs.js.map +1 -1
  147. package/dist/shared/src/api/queries/review/updateReview.es.js +1 -0
  148. package/dist/shared/src/api/queries/review/updateReview.es.js.map +1 -1
  149. package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -0
  150. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  151. package/dist/shared/src/api/queries/system/getSystem.es.js +1 -0
  152. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  153. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -0
  154. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  155. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -0
  156. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  157. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
  158. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  159. package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
  160. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  161. package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -0
  162. package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
  163. package/dist/shared/src/api/queries/users/updateUsers.es.js +1 -0
  164. package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
  165. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js +1 -0
  166. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
  167. package/dist/shared/src/api/queries/watchers/getWatchers.es.js +1 -0
  168. package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
  169. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +2 -2
  170. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  171. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +2 -2
  172. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  173. package/dist/shared/src/components/Badge/Badge.cjs.js +31 -0
  174. package/dist/shared/src/components/Badge/Badge.cjs.js.map +1 -0
  175. package/dist/shared/src/components/Badge/Badge.es.js +31 -0
  176. package/dist/shared/src/components/Badge/Badge.es.js.map +1 -0
  177. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  178. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  179. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  180. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  181. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
  182. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  183. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
  184. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  185. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +9 -7
  186. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  187. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +9 -7
  188. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  189. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js +2 -0
  190. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.cjs.js.map +1 -1
  191. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js +2 -0
  192. package/dist/shared/src/components/ProjectTableSettings/ColumnItem.es.js.map +1 -1
  193. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +5 -1
  194. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  195. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +5 -1
  196. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  197. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +83 -13
  198. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  199. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +83 -13
  200. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  201. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js +2 -0
  202. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.cjs.js.map +1 -1
  203. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js +2 -0
  204. package/dist/shared/src/components/ProjectTableSettings/SortableColumnItem.es.js.map +1 -1
  205. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js +5 -1
  206. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js.map +1 -1
  207. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js +5 -1
  208. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js.map +1 -1
  209. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js +5 -5
  210. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js.map +1 -1
  211. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js +5 -5
  212. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js.map +1 -1
  213. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  214. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  215. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  216. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  217. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +99 -86
  218. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  219. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +99 -86
  220. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  221. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +93 -24
  222. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  223. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +94 -25
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  225. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js +4 -0
  226. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js.map +1 -1
  227. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js +4 -0
  228. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js.map +1 -1
  229. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +9 -7
  230. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  231. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +9 -7
  232. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  233. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  234. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  235. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  236. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  237. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js +27 -6
  238. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js.map +1 -1
  239. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js +27 -6
  240. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js.map +1 -1
  241. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +222 -19
  242. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  243. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +223 -20
  244. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  245. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  246. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  247. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  248. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  249. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +9 -7
  250. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +9 -7
  252. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  253. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  254. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  256. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  257. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +9 -7
  258. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +9 -7
  260. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  261. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +22 -0
  262. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +22 -0
  264. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
  265. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js +26 -7
  266. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js +26 -7
  268. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js.map +1 -1
  269. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +12 -10
  270. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +12 -10
  272. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  273. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +19 -17
  274. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +19 -17
  276. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  277. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +9 -7
  278. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +9 -7
  280. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  281. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +8 -6
  282. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +8 -6
  284. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  285. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  286. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  288. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  289. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  290. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  292. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  293. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  294. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +1 -1
  296. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js +8 -1
  298. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js +9 -2
  300. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +9 -0
  302. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +10 -1
  304. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
  305. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  306. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  308. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  309. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  310. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  312. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +40 -34
  314. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +41 -35
  316. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +7 -0
  318. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +7 -0
  320. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +9 -8
  322. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -8
  324. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +8 -7
  326. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +8 -7
  328. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +11 -6
  330. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +11 -6
  332. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +1 -174
  334. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +2 -175
  336. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +212 -0
  338. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -0
  339. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +212 -0
  340. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -0
  341. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  342. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  344. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +1 -161
  346. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +2 -162
  348. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +191 -0
  350. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -0
  351. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +191 -0
  352. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -0
  353. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js +1 -79
  354. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.es.js +2 -80
  356. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsContext.es.js.map +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js +84 -0
  358. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.cjs.js.map +1 -0
  359. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js +84 -0
  360. package/dist/shared/src/containers/ProjectTreeTable/context/SelectedRowsProvider.es.js.map +1 -0
  361. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js +1 -277
  362. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js +2 -278
  364. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js.map +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +282 -0
  366. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -0
  367. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +282 -0
  368. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -0
  369. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  370. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  372. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +85 -34
  374. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +86 -35
  376. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  379. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +1 -1
  380. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +26 -13
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  383. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +26 -13
  384. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  385. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +24 -0
  386. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +1 -0
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +24 -0
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +1 -0
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +16 -9
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +16 -9
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js +17 -0
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js.map +1 -0
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js +17 -0
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js.map +1 -0
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js +30 -0
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js.map +1 -0
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js +30 -0
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js.map +1 -0
  401. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +363 -0
  402. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -0
  403. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +363 -0
  404. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -0
  405. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +16 -12
  406. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +16 -13
  408. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  409. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +72 -0
  410. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -0
  411. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +72 -0
  412. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -0
  413. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +82 -0
  414. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -0
  415. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +82 -0
  416. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -0
  417. package/dist/shared/src/containers/ProjectTreeTable/{context/ProjectTableModulesContext.cjs.js → hooks/useProjectTableModules.cjs.js} +22 -23
  418. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -0
  419. package/dist/shared/src/containers/ProjectTreeTable/{context/ProjectTableModulesContext.es.js → hooks/useProjectTableModules.es.js} +22 -23
  420. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -0
  421. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +41 -0
  422. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -0
  423. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +41 -0
  424. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -0
  425. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js +19 -0
  426. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js.map +1 -0
  427. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js +19 -0
  428. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js.map +1 -0
  429. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +26 -0
  430. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -0
  431. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +26 -0
  432. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -0
  433. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +7 -4
  434. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  435. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +7 -4
  436. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  437. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +15 -1
  438. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  439. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +15 -1
  440. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
  442. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
  443. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js +8 -0
  444. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js.map +1 -0
  445. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js +8 -0
  446. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js.map +1 -0
  447. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js +7 -0
  448. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js.map +1 -0
  449. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js +7 -0
  450. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js.map +1 -0
  451. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +0 -1
  452. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
  453. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +0 -1
  454. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
  455. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +2 -1
  456. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  457. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +2 -1
  458. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  459. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +0 -8
  460. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  461. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +0 -8
  462. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  463. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +10 -8
  464. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  465. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +10 -8
  466. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  467. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  468. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  469. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  470. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  471. package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
  472. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  473. package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
  474. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  475. package/dist/shared/src/context/PowerpackContext.cjs.js +122 -17
  476. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  477. package/dist/shared/src/context/PowerpackContext.es.js +123 -18
  478. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  479. package/dist/shared/src/context/RemoteModulesContext.cjs.js +7 -1
  480. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  481. package/dist/shared/src/context/RemoteModulesContext.es.js +7 -1
  482. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  483. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  484. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  485. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  486. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  487. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  488. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  489. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  490. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  491. package/dist/shared/src/hooks/useLoadModule.cjs.js +11 -5
  492. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  493. package/dist/shared/src/hooks/useLoadModule.es.js +11 -5
  494. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  495. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  496. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  497. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  498. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  499. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  500. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  501. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  502. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  503. package/dist/types/api/generated/graphql.d.ts +33 -38
  504. package/dist/types/api/generated/grouping.d.ts +40 -0
  505. package/dist/types/api/generated/index.d.ts +3 -1
  506. package/dist/types/api/generated/tasks.d.ts +8 -33
  507. package/dist/types/api/queries/activities/getActivities.d.ts +4 -0
  508. package/dist/types/api/queries/activities/updateActivities.d.ts +8 -0
  509. package/dist/types/api/queries/entities/getEntity.d.ts +4 -0
  510. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -0
  511. package/dist/types/api/queries/entities/updateEntity.d.ts +4 -0
  512. package/dist/types/api/queries/entityLists/getLists.d.ts +4 -0
  513. package/dist/types/api/queries/grouping/getGrouping.d.ts +137 -0
  514. package/dist/types/api/queries/grouping/index.d.ts +1 -0
  515. package/dist/types/api/queries/index.d.ts +1 -0
  516. package/dist/types/api/queries/overview/getOverview.d.ts +5 -133
  517. package/dist/types/api/queries/project/getProject.d.ts +2 -2
  518. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -0
  519. package/dist/types/api/queries/users/getUsers.d.ts +4 -0
  520. package/dist/types/components/Badge/Badge.d.ts +10 -0
  521. package/dist/types/components/Badge/index.d.ts +1 -0
  522. package/dist/types/components/ProjectTableSettings/ColumnItem.d.ts +1 -0
  523. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +1 -1
  524. package/dist/types/components/ProjectTableSettings/SortableColumnItem.d.ts +1 -0
  525. package/dist/types/components/ReviewableProgressCard/ReviewableProgressCard.d.ts +1 -1
  526. package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +19 -3
  527. package/dist/types/components/SettingsPanel/SettingsPanelItemTemplate.d.ts +1 -0
  528. package/dist/types/components/index.d.ts +1 -0
  529. package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +4 -0
  530. package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +2 -1
  531. package/dist/types/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.d.ts +1 -0
  532. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -5
  533. package/dist/types/containers/ProjectTreeTable/components/GroupSettingsFallback.d.ts +9 -2
  534. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +16 -16
  535. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsProvider.d.ts +9 -0
  536. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +7 -52
  537. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +59 -0
  538. package/dist/types/containers/ProjectTreeTable/context/SelectedRowsContext.d.ts +3 -8
  539. package/dist/types/containers/ProjectTreeTable/context/SelectedRowsProvider.d.ts +6 -0
  540. package/dist/types/containers/ProjectTreeTable/context/SelectionCellsContext.d.ts +2 -4
  541. package/dist/types/containers/ProjectTreeTable/context/SelectionCellsProvider.d.ts +4 -0
  542. package/dist/types/containers/ProjectTreeTable/context/index.d.ts +4 -2
  543. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +14 -0
  544. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +7 -3
  545. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +13 -2
  546. package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +12 -0
  547. package/dist/types/containers/ProjectTreeTable/hooks/useEntitiesMap.d.ts +7 -0
  548. package/dist/types/containers/ProjectTreeTable/hooks/useExpandedState.d.ts +11 -0
  549. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +38 -0
  550. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
  551. package/dist/types/containers/ProjectTreeTable/hooks/useGetGroupedFields.d.ts +9 -0
  552. package/dist/types/containers/ProjectTreeTable/hooks/useGetTaskGroups.d.ts +10 -0
  553. package/dist/types/containers/ProjectTreeTable/hooks/useProjectTableModules.d.ts +25 -0
  554. package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +14 -0
  555. package/dist/types/containers/ProjectTreeTable/hooks/useScopedAttributeFields.d.ts +10 -0
  556. package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +10 -0
  557. package/dist/types/containers/ProjectTreeTable/index.d.ts +2 -14
  558. package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
  559. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +46 -0
  560. package/dist/types/containers/ProjectTreeTable/utils/errorExtraction.d.ts +4 -0
  561. package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
  562. package/dist/types/containers/ProjectTreeTable/utils/localStorageKeys.d.ts +4 -0
  563. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +2 -1
  564. package/dist/types/context/PowerpackContext.d.ts +2 -1
  565. package/dist/types/hooks/useLoadModule.d.ts +2 -1
  566. package/dist/types/utils/extractVersionFromFilename.d.ts +5 -0
  567. package/package.json +1 -1
  568. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +0 -1
  569. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +0 -1
  570. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.cjs.js +0 -33
  571. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.cjs.js.map +0 -1
  572. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.es.js +0 -33
  573. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableSelectionContext.es.js.map +0 -1
  574. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +0 -12
  575. package/dist/types/containers/ProjectTreeTable/context/ProjectTableSelectionContext.d.ts +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport { getCellValue, getEntityDataById, parseCellId } from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // First, organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n // do not include row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Determine if this is a folder or task by checking which map contains the ID\n const entity = entitiesMap.get(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n // @ts-ignore\n const foundValue = getCellValue(entity, colId)\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(rowId, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap],\n )\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n\n // we can have empty text in the clipboard\n //if (!clipboardText.trim()) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // For each row, get the sorted column IDs\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values for status and subType\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n // If it's a single cell value, use it for all cells\n // Otherwise use the modulo approach to repeat values\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n // Validate clipboard data for this cell\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex,\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = entitiesMap.get(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue)) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n })\n\n // Make a single call to update all entities\n if (allEntityUpdates.length > 0) {\n try {\n await updateEntities(allEntityUpdates)\n } catch (error) {\n console.error('Error updating entities:', error)\n clipboardError(\n `Failed to update: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n },\n [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n pasteFromClipboard()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["createContext","useSelectionCellsContext","useCellEditing","useCallback","parseCellId","ROW_SELECTION_COLUMN_ID","colIds","getCellValue","getEntityPath","clipboardError","parseClipboardText","_a","getEntityDataById","validateClipboardData","processFieldValue","value","useEffect","useMemo","jsx","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"ClipboardContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport { getCellValue, getEntityDataById, parseCellId } from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\nimport { useProjectTableContext } from './ProjectTableContext'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n const { getEntityById } = useProjectTableContext()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // First, organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n // do not include row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Determine if this is a folder or task by checking which map contains the ID\n const entity = getEntityById(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n // @ts-ignore\n const foundValue = getCellValue(entity, colId)\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(entity.entityId || entity.id, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap, getEntityById],\n )\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) {\n clipboardError('No data to copy to clipboard.')\n return\n }\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n\n // we can have empty text in the clipboard\n //if (!clipboardText.trim()) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // For each row, get the sorted column IDs\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values for status and subType\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n // If it's a single cell value, use it for all cells\n // Otherwise use the modulo approach to repeat values\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n // Validate clipboard data for this cell\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex,\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = getEntityById(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue)) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n })\n\n // Make a single call to update all entities\n if (allEntityUpdates.length > 0) {\n try {\n await updateEntities(allEntityUpdates)\n } catch (error) {\n console.error('Error updating entities:', error)\n clipboardError(\n `Failed to update: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n },\n [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums, getEntityById],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n pasteFromClipboard()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["createContext","useSelectionCellsContext","useCellEditing","useProjectTableContext","useCallback","parseCellId","ROW_SELECTION_COLUMN_ID","colIds","getCellValue","getEntityPath","clipboardError","parseClipboardText","_a","getEntityDataById","validateClipboardData","processFieldValue","value","useEffect","useMemo","jsx","useContext"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { useCellEditing } from "./CellEditingContext.es.js";
5
5
  import { parseCellId, getCellValue, getEntityDataById } from "../utils/cellUtils.es.js";
6
6
  import { getEntityPath, clipboardError, parseClipboardText, processFieldValue } from "./clipboard/clipboardUtils.es.js";
7
7
  import { validateClipboardData } from "./clipboard/clipboardValidation.es.js";
8
+ import { useProjectTableContext } from "./ProjectTableContext.es.js";
8
9
  const ClipboardContext = createContext(void 0);
9
10
  const ClipboardProvider = ({
10
11
  children,
@@ -14,6 +15,7 @@ const ClipboardProvider = ({
14
15
  }) => {
15
16
  const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext();
16
17
  const { updateEntities } = useCellEditing();
18
+ const { getEntityById } = useProjectTableContext();
17
19
  const getSelectionData = useCallback(
18
20
  async (selected, config) => {
19
21
  const { headers, fullRow } = config || {};
@@ -73,7 +75,7 @@ const ClipboardProvider = ({
73
75
  clipboardText += headerValues.join(" ") + "\n";
74
76
  }
75
77
  for (const rowId of sortedRows) {
76
- const entity = entitiesMap.get(rowId);
78
+ const entity = getEntityById(rowId);
77
79
  if (!entity) {
78
80
  console.warn(`Entity not found for rowId: ${rowId}`);
79
81
  continue;
@@ -90,7 +92,7 @@ const ClipboardProvider = ({
90
92
  const foundValue = getCellValue(entity, colId);
91
93
  cellValue = foundValue !== void 0 && foundValue !== null ? String(foundValue) : "";
92
94
  if (colId === "name") {
93
- cellValue = getEntityPath(rowId, entitiesMap);
95
+ cellValue = getEntityPath(entity.entityId || entity.id, entitiesMap);
94
96
  }
95
97
  if (colId === "subType") {
96
98
  if ("folderType" in entity) {
@@ -109,14 +111,17 @@ const ClipboardProvider = ({
109
111
  console.error("Failed to copy to clipboard:", error);
110
112
  }
111
113
  },
112
- [selectedCells, focusedCellId, gridMap, entitiesMap]
114
+ [selectedCells, focusedCellId, gridMap, entitiesMap, getEntityById]
113
115
  );
114
116
  const copyToClipboard = useCallback(
115
117
  async (selected, fullRow) => {
116
118
  selected = selected || Array.from(selectedCells);
117
119
  if (!selected.length) return;
118
120
  const clipboardText = await getSelectionData(selected, { fullRow });
119
- if (!clipboardText) return;
121
+ if (!clipboardText) {
122
+ clipboardError("No data to copy to clipboard.");
123
+ return;
124
+ }
120
125
  if (!navigator.clipboard) {
121
126
  clipboardError("Clipboard API not supported in this browser.");
122
127
  return;
@@ -235,7 +240,7 @@ const ClipboardProvider = ({
235
240
  let fieldValueType = "string";
236
241
  if (sortedRows.length > 0) {
237
242
  const firstRowId = sortedRows[0];
238
- const entity = entitiesMap.get(firstRowId);
243
+ const entity = getEntityById(firstRowId);
239
244
  if (entity) {
240
245
  isAttrib = colId.startsWith("attrib_");
241
246
  const fieldValue = getCellValue(entity, colId);
@@ -321,7 +326,7 @@ const ClipboardProvider = ({
321
326
  }
322
327
  }
323
328
  },
324
- [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums]
329
+ [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums, getEntityById]
325
330
  );
326
331
  useEffect(() => {
327
332
  const handleKeyDown = (e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport { getCellValue, getEntityDataById, parseCellId } from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // First, organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n // do not include row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Determine if this is a folder or task by checking which map contains the ID\n const entity = entitiesMap.get(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n // @ts-ignore\n const foundValue = getCellValue(entity, colId)\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(rowId, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap],\n )\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n\n // we can have empty text in the clipboard\n //if (!clipboardText.trim()) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // For each row, get the sorted column IDs\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values for status and subType\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n // If it's a single cell value, use it for all cells\n // Otherwise use the modulo approach to repeat values\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n // Validate clipboard data for this cell\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex,\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = entitiesMap.get(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue)) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n })\n\n // Make a single call to update all entities\n if (allEntityUpdates.length > 0) {\n try {\n await updateEntities(allEntityUpdates)\n } catch (error) {\n console.error('Error updating entities:', error)\n clipboardError(\n `Failed to update: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n },\n [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n pasteFromClipboard()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["colIds","_a","value","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ClipboardContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport { getCellValue, getEntityDataById, parseCellId } from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\nimport { useProjectTableContext } from './ProjectTableContext'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n const { getEntityById } = useProjectTableContext()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // First, organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n // do not include row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Determine if this is a folder or task by checking which map contains the ID\n const entity = getEntityById(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n // @ts-ignore\n const foundValue = getCellValue(entity, colId)\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(entity.entityId || entity.id, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap, getEntityById],\n )\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) {\n clipboardError('No data to copy to clipboard.')\n return\n }\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n\n // we can have empty text in the clipboard\n //if (!clipboardText.trim()) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // For each row, get the sorted column IDs\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values for status and subType\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n // If it's a single cell value, use it for all cells\n // Otherwise use the modulo approach to repeat values\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n // Validate clipboard data for this cell\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex,\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = getEntityById(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue)) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n })\n\n // Make a single call to update all entities\n if (allEntityUpdates.length > 0) {\n try {\n await updateEntities(allEntityUpdates)\n } catch (error) {\n console.error('Error updating entities:', error)\n clipboardError(\n `Failed to update: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n },\n [selectedCells, gridMap, entitiesMap, updateEntities, columnEnums, getEntityById],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n pasteFromClipboard()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["colIds","_a","value","jsx"],"mappings":"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"}
@@ -1,180 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("../../../../../_virtual/jsx-runtime.cjs.js");
4
3
  const React = require("react");
5
- const reactTable = require("@tanstack/react-table");
6
4
  const ColumnSettingsContext = React.createContext(void 0);
7
- const ColumnSettingsProvider = ({
8
- children,
9
- config,
10
- onChange
11
- }) => {
12
- const columnsConfig = config;
13
- const {
14
- columnOrder: columnOrderInit = [],
15
- columnPinning: columnPinningInit = {},
16
- columnVisibility = {},
17
- columnSizing: columnsSizingExternal = {},
18
- groupBy
19
- } = columnsConfig;
20
- const columnOrder = [...columnOrderInit];
21
- const columnPinning = { ...columnPinningInit };
22
- const defaultOrder = ["thumbnail", "name", "subType", "status", "tags"];
23
- defaultOrder.forEach((col, i) => {
24
- if (!columnOrder.includes(col)) {
25
- const defaultBefore = defaultOrder[i - 1];
26
- const columnAfter = defaultOrder[i + 1];
27
- if (!defaultBefore || !columnOrder.includes(defaultBefore)) {
28
- columnOrder.unshift(col);
29
- } else {
30
- const index = columnOrder.indexOf(defaultBefore);
31
- columnOrder.splice(index + 1, 0, col);
32
- }
33
- if (columnAfter && (columnPinning == null ? void 0 : columnPinning.left) && (columnPinning == null ? void 0 : columnPinning.left.includes(columnAfter))) {
34
- columnPinning.left = [col, ...(columnPinning == null ? void 0 : columnPinning.left) || []];
35
- }
36
- }
37
- });
38
- const setColumnVisibility = (visibility) => {
39
- onChange({
40
- ...columnsConfig,
41
- columnVisibility: visibility
42
- });
43
- };
44
- const setColumnOrder = (order) => {
45
- onChange({
46
- ...columnsConfig,
47
- columnOrder: order
48
- });
49
- };
50
- const setColumnPinning = (pinning) => {
51
- onChange({
52
- ...columnsConfig,
53
- columnPinning: pinning
54
- });
55
- };
56
- const [internalColumnSizing, setInternalColumnSizing] = React.useState(null);
57
- const columnSizing = internalColumnSizing || columnsSizingExternal;
58
- const resizingTimeoutRef = React.useRef(null);
59
- const setColumnSizing = (sizing) => {
60
- setInternalColumnSizing(sizing);
61
- if (resizingTimeoutRef.current) {
62
- clearTimeout(resizingTimeoutRef.current);
63
- }
64
- resizingTimeoutRef.current = setTimeout(() => {
65
- onChange({
66
- ...columnsConfig,
67
- columnSizing: sizing
68
- });
69
- setInternalColumnSizing(null);
70
- }, 500);
71
- };
72
- const togglePinningOnVisibilityChange = (visibility) => {
73
- const newPinning = { ...columnPinning };
74
- const pinnedColumns = newPinning.left || [];
75
- const hiddenColumns = Object.keys(visibility).filter((col) => visibility[col] === false);
76
- const newPinnedColumns = pinnedColumns.filter((col) => !hiddenColumns.includes(col));
77
- return {
78
- ...newPinning,
79
- left: newPinnedColumns
80
- };
81
- };
82
- const updatePinningOrderOnOrderChange = (order) => {
83
- const newPinning = { ...columnPinning };
84
- const pinnedColumns = newPinning.left || [];
85
- const pinnedColumnsOrder = order.filter((col) => pinnedColumns.includes(col));
86
- return {
87
- ...newPinning,
88
- left: pinnedColumnsOrder
89
- };
90
- };
91
- const updateOrderOnPinningChange = (pinning) => {
92
- return [...columnOrder].sort((a, b) => {
93
- var _a, _b;
94
- const aPinned = ((_a = pinning.left) == null ? void 0 : _a.includes(a)) ? 1 : 0;
95
- const bPinned = ((_b = pinning.left) == null ? void 0 : _b.includes(b)) ? 1 : 0;
96
- return bPinned - aPinned;
97
- });
98
- };
99
- const updateColumnVisibility = (visibility) => {
100
- const newPinning = togglePinningOnVisibilityChange(visibility);
101
- onChange({
102
- ...columnsConfig,
103
- columnVisibility: visibility,
104
- columnPinning: newPinning
105
- });
106
- };
107
- const updateColumnOrder = (order) => {
108
- const newPinning = updatePinningOrderOnOrderChange(order);
109
- onChange({
110
- ...columnsConfig,
111
- columnOrder: order,
112
- columnPinning: newPinning
113
- });
114
- };
115
- const updateColumnPinning = (pinning) => {
116
- const newOrder = updateOrderOnPinningChange(pinning);
117
- onChange({
118
- ...columnsConfig,
119
- columnOrder: newOrder,
120
- columnPinning: pinning
121
- });
122
- };
123
- const updateGroupBy = (groupBy2) => {
124
- onChange({
125
- ...columnsConfig,
126
- groupBy: groupBy2
127
- });
128
- };
129
- const columnVisibilityUpdater = (columnVisibilityUpdater2) => {
130
- const newVisibility = reactTable.functionalUpdate(columnVisibilityUpdater2, columnVisibility);
131
- updateColumnVisibility(newVisibility);
132
- };
133
- const columnOrderUpdater = (columnOrderUpdater2) => {
134
- const newOrder = reactTable.functionalUpdate(columnOrderUpdater2, columnOrder);
135
- updateColumnOrder(newOrder);
136
- };
137
- const columnPinningUpdater = (columnPinningUpdater2) => {
138
- const newPinning = reactTable.functionalUpdate(columnPinningUpdater2, columnPinning);
139
- updateColumnPinning(newPinning);
140
- };
141
- const columnSizingUpdater = (sizingUpdater) => {
142
- const newSizing = reactTable.functionalUpdate(sizingUpdater, columnSizing);
143
- setColumnSizing(newSizing);
144
- };
145
- return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
146
- ColumnSettingsContext.Provider,
147
- {
148
- value: {
149
- // column visibility
150
- columnVisibility,
151
- setColumnVisibility,
152
- updateColumnVisibility,
153
- columnVisibilityUpdater,
154
- // column pinning
155
- columnPinning,
156
- setColumnPinning,
157
- updateColumnPinning,
158
- columnPinningUpdater,
159
- // column order
160
- columnOrder,
161
- setColumnOrder,
162
- updateColumnOrder,
163
- columnOrderUpdater,
164
- // column sizing
165
- columnSizing,
166
- setColumnSizing,
167
- columnSizingUpdater,
168
- // group by
169
- groupBy,
170
- updateGroupBy,
171
- // global change
172
- setColumnsConfig: onChange
173
- },
174
- children
175
- }
176
- );
177
- };
178
5
  const useColumnSettingsContext = () => {
179
6
  const context = React.useContext(ColumnSettingsContext);
180
7
  if (!context) {
@@ -182,6 +9,6 @@ const useColumnSettingsContext = () => {
182
9
  }
183
10
  return context;
184
11
  };
185
- exports.ColumnSettingsProvider = ColumnSettingsProvider;
12
+ exports.ColumnSettingsContext = ColumnSettingsContext;
186
13
  exports.useColumnSettingsContext = useColumnSettingsContext;
187
14
  //# sourceMappingURL=ColumnSettingsContext.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSettingsContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ColumnSettingsContext.tsx"],"sourcesContent":["import React, { createContext, useContext, ReactNode, useState } from 'react'\nimport {\n ColumnOrderState,\n ColumnPinningState,\n functionalUpdate,\n OnChangeFn,\n VisibilityState,\n ColumnSizingState,\n} from '@tanstack/react-table'\n\nexport interface TableGroupBy {\n desc: boolean\n id: string\n}\n\nexport interface ColumnSettingsContextType {\n // Column Visibility\n columnVisibility: VisibilityState\n setColumnVisibility: (columnVisibility: VisibilityState) => void\n updateColumnVisibility: (columnVisibility: VisibilityState) => void\n columnVisibilityUpdater: OnChangeFn<VisibilityState>\n\n // Column Pinning\n columnPinning: ColumnPinningState\n setColumnPinning: (columnPinning: ColumnPinningState) => void\n updateColumnPinning: (columnPinning: ColumnPinningState) => void\n columnPinningUpdater: OnChangeFn<ColumnPinningState>\n\n // Column Order\n columnOrder: ColumnOrderState\n setColumnOrder: (columnOrder: ColumnOrderState) => void\n updateColumnOrder: (columnOrder: ColumnOrderState) => void\n columnOrderUpdater: OnChangeFn<ColumnOrderState>\n\n // Column Sizing\n columnSizing: ColumnSizingState\n setColumnSizing: (columnSizing: ColumnSizingState) => void\n columnSizingUpdater: OnChangeFn<ColumnSizingState>\n\n // groupBy\n updateGroupBy: (groupBy: TableGroupBy | undefined) => void\n groupBy?: TableGroupBy\n\n // Global change\n setColumnsConfig: (config: ColumnsConfig) => void\n}\n\nconst ColumnSettingsContext = createContext<ColumnSettingsContextType | undefined>(undefined)\n\nexport type ColumnsConfig = {\n columnVisibility: VisibilityState\n columnOrder: ColumnOrderState\n columnPinning: ColumnPinningState\n columnSizing: ColumnSizingState\n groupBy?: TableGroupBy\n}\n\ninterface ColumnSettingsProviderProps {\n children: ReactNode\n config?: Record<string, any>\n onChange: (config: ColumnsConfig) => void\n}\n\nexport const ColumnSettingsProvider: React.FC<ColumnSettingsProviderProps> = ({\n children,\n config,\n onChange,\n}) => {\n const columnsConfig = config as ColumnsConfig\n const {\n columnOrder: columnOrderInit = [],\n columnPinning: columnPinningInit = {},\n columnVisibility = {},\n columnSizing: columnsSizingExternal = {},\n groupBy,\n } = columnsConfig\n\n const columnOrder = [...columnOrderInit]\n const columnPinning = { ...columnPinningInit }\n const defaultOrder = ['thumbnail', 'name', 'subType', 'status', 'tags']\n // for each default column, if it is not in the columnOrder, find the index of the column before it, if none, add to beginning\n defaultOrder.forEach((col, i) => {\n if (!columnOrder.includes(col)) {\n const defaultBefore = defaultOrder[i - 1]\n const columnAfter = defaultOrder[i + 1]\n if (!defaultBefore || !columnOrder.includes(defaultBefore)) {\n // add to beginning\n columnOrder.unshift(col)\n } else {\n // find the index of that column in the columnOrder\n const index = columnOrder.indexOf(defaultBefore)\n // add the item after that column\n columnOrder.splice(index + 1, 0, col)\n }\n if (columnAfter && columnPinning?.left && columnPinning?.left.includes(columnAfter)) {\n // pin the column\n columnPinning.left = [col, ...(columnPinning?.left || [])]\n }\n }\n })\n\n // DIRECT STATE UPDATES - no side effects\n const setColumnVisibility = (visibility: VisibilityState) => {\n onChange({\n ...columnsConfig,\n columnVisibility: visibility,\n })\n }\n\n const setColumnOrder = (order: ColumnOrderState) => {\n onChange({\n ...columnsConfig,\n columnOrder: order,\n })\n }\n\n const setColumnPinning = (pinning: ColumnPinningState) => {\n onChange({\n ...columnsConfig,\n columnPinning: pinning,\n })\n }\n\n const [internalColumnSizing, setInternalColumnSizing] = useState<ColumnSizingState | null>(null)\n\n // use internalColumnSizing if it exists, otherwise use the external column sizing\n const columnSizing = internalColumnSizing || columnsSizingExternal\n\n const resizingTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n const setColumnSizing = (sizing: ColumnSizingState) => {\n setInternalColumnSizing(sizing)\n\n // if there is a timeout already set, clear it\n if (resizingTimeoutRef.current) {\n clearTimeout(resizingTimeoutRef.current)\n }\n // set a timeout that tracks if the column sizing has finished\n resizingTimeoutRef.current = setTimeout(() => {\n // we have finished resizing now!\n // update the external column sizing\n onChange({\n ...columnsConfig,\n columnSizing: sizing,\n })\n // reset the internal column sizing to not be used anymore\n setInternalColumnSizing(null)\n }, 500)\n }\n\n // SIDE EFFECT UTILITIES\n const togglePinningOnVisibilityChange = (visibility: VisibilityState) => {\n // ensure that any columns that are now hidden are removed from the pinning\n const newPinning = { ...columnPinning }\n const pinnedColumns = newPinning.left || []\n const hiddenColumns = Object.keys(visibility).filter((col) => visibility[col] === false)\n const newPinnedColumns = pinnedColumns.filter((col) => !hiddenColumns.includes(col))\n\n return {\n ...newPinning,\n left: newPinnedColumns,\n }\n }\n\n const updatePinningOrderOnOrderChange = (order: ColumnOrderState) => {\n // ensure that the column pinning is in the order of the column order\n const newPinning = { ...columnPinning }\n const pinnedColumns = newPinning.left || []\n const pinnedColumnsOrder = order.filter((col) => pinnedColumns.includes(col))\n\n return {\n ...newPinning,\n left: pinnedColumnsOrder,\n }\n }\n\n const updateOrderOnPinningChange = (pinning: ColumnPinningState) => {\n // we resort the column order based on the pinning\n return [...columnOrder].sort((a, b) => {\n const aPinned = pinning.left?.includes(a) ? 1 : 0\n const bPinned = pinning.left?.includes(b) ? 1 : 0\n return bPinned - aPinned\n })\n }\n\n // UPDATE METHODS WITH SIDE EFFECTS\n const updateColumnVisibility = (visibility: VisibilityState) => {\n const newPinning = togglePinningOnVisibilityChange(visibility)\n onChange({\n ...columnsConfig,\n columnVisibility: visibility,\n columnPinning: newPinning,\n })\n }\n\n const updateColumnOrder = (order: ColumnOrderState) => {\n const newPinning = updatePinningOrderOnOrderChange(order)\n onChange({\n ...columnsConfig,\n columnOrder: order,\n columnPinning: newPinning,\n })\n }\n\n const updateColumnPinning = (pinning: ColumnPinningState) => {\n const newOrder = updateOrderOnPinningChange(pinning)\n onChange({\n ...columnsConfig,\n columnOrder: newOrder,\n columnPinning: pinning,\n })\n }\n\n const updateGroupBy = (groupBy: TableGroupBy | undefined) => {\n onChange({\n ...columnsConfig,\n groupBy: groupBy,\n })\n }\n\n // UPDATER FUNCTIONS\n const columnVisibilityUpdater: OnChangeFn<VisibilityState> = (columnVisibilityUpdater) => {\n const newVisibility = functionalUpdate(columnVisibilityUpdater, columnVisibility)\n updateColumnVisibility(newVisibility)\n }\n\n const columnOrderUpdater: OnChangeFn<ColumnOrderState> = (columnOrderUpdater) => {\n const newOrder = functionalUpdate(columnOrderUpdater, columnOrder)\n updateColumnOrder(newOrder)\n }\n\n const columnPinningUpdater: OnChangeFn<ColumnPinningState> = (columnPinningUpdater) => {\n const newPinning = functionalUpdate(columnPinningUpdater, columnPinning)\n updateColumnPinning(newPinning)\n }\n\n const columnSizingUpdater: OnChangeFn<ColumnSizingState> = (sizingUpdater) => {\n const newSizing = functionalUpdate(sizingUpdater, columnSizing)\n setColumnSizing(newSizing)\n }\n\n return (\n <ColumnSettingsContext.Provider\n value={{\n // column visibility\n columnVisibility,\n setColumnVisibility,\n updateColumnVisibility,\n columnVisibilityUpdater,\n // column pinning\n columnPinning,\n setColumnPinning,\n updateColumnPinning,\n columnPinningUpdater,\n // column order\n columnOrder,\n setColumnOrder,\n updateColumnOrder,\n columnOrderUpdater,\n // column sizing\n columnSizing,\n setColumnSizing,\n columnSizingUpdater,\n // group by\n groupBy,\n updateGroupBy,\n\n // global change\n setColumnsConfig: onChange,\n }}\n >\n {children}\n </ColumnSettingsContext.Provider>\n )\n}\n\nexport const useColumnSettingsContext = (): ColumnSettingsContextType => {\n const context = useContext(ColumnSettingsContext)\n if (!context) {\n throw new Error('useColumnSettingsContext must be used within a ColumnSettingsProvider')\n }\n return context\n}\n"],"names":["createContext","useState","groupBy","columnVisibilityUpdater","functionalUpdate","columnOrderUpdater","columnPinningUpdater","jsx","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnSettingsContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ColumnSettingsContext.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react'\nimport {\n ColumnOrderState,\n ColumnPinningState,\n OnChangeFn,\n VisibilityState,\n ColumnSizingState,\n} from '@tanstack/react-table'\nimport { GroupByConfig } from '../components/GroupSettingsFallback'\n\nexport interface TableGroupBy {\n desc: boolean\n id: string\n}\n\nexport type ColumnsConfig = {\n columnVisibility: VisibilityState\n columnOrder: ColumnOrderState\n columnPinning: ColumnPinningState\n columnSizing: ColumnSizingState\n groupBy?: TableGroupBy\n groupByConfig?: {\n showEmpty?: boolean\n }\n}\n\nexport interface ColumnSettingsContextType {\n // Column Visibility\n columnVisibility: VisibilityState\n setColumnVisibility: (columnVisibility: VisibilityState) => void\n updateColumnVisibility: (columnVisibility: VisibilityState) => void\n columnVisibilityUpdater: OnChangeFn<VisibilityState>\n\n // Column Pinning\n columnPinning: ColumnPinningState\n setColumnPinning: (columnPinning: ColumnPinningState) => void\n updateColumnPinning: (columnPinning: ColumnPinningState) => void\n columnPinningUpdater: OnChangeFn<ColumnPinningState>\n\n // Column Order\n columnOrder: ColumnOrderState\n setColumnOrder: (columnOrder: ColumnOrderState) => void\n updateColumnOrder: (columnOrder: ColumnOrderState) => void\n columnOrderUpdater: OnChangeFn<ColumnOrderState>\n\n // Column Sizing\n columnSizing: ColumnSizingState\n setColumnSizing: (columnSizing: ColumnSizingState) => void\n columnSizingUpdater: OnChangeFn<ColumnSizingState>\n\n // groupBy\n groupBy?: TableGroupBy\n updateGroupBy: (groupBy: TableGroupBy | undefined) => void\n groupByConfig: GroupByConfig\n updateGroupByConfig: (config: GroupByConfig) => void\n\n // Global change\n setColumnsConfig: (config: ColumnsConfig) => void\n}\n\nexport const ColumnSettingsContext = createContext<ColumnSettingsContextType | undefined>(undefined)\n\nexport const useColumnSettingsContext = (): ColumnSettingsContextType => {\n const context = useContext(ColumnSettingsContext)\n if (!context) {\n throw new Error('useColumnSettingsContext must be used within a ColumnSettingsProvider')\n }\n return context\n}\n"],"names":["createContext","useContext"],"mappings":";;;AA4Da,MAAA,wBAAwBA,oBAAqD,MAAS;AAE5F,MAAM,2BAA2B,MAAiC;AACjE,QAAA,UAAUC,iBAAW,qBAAqB;AAChD,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,uEAAuE;AAAA,EAAA;AAElF,SAAA;AACT;;;"}