@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":"DetailsPanelAttributes.cjs.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.folder?.path || '',\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["useState","_a","formData","getMixedState","useEffect","useGetProjectQuery","useGetSiteInfoQuery","useMemo","upperFirst","useEntityUpdate","jsx","Section","DetailsPanelAttributesEditor"],"mappings":"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"}
1
+ {"version":3,"file":"DetailsPanelAttributes.cjs.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.folder?.path || '',\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["useState","_a","formData","getMixedState","useEffect","useGetProjectQuery","useGetSiteInfoQuery","useMemo","upperFirst","useEntityUpdate","jsx","Section","DetailsPanelAttributesEditor"],"mappings":"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"}
@@ -40,6 +40,7 @@ import "../../api/generated/users.es.js";
40
40
  import "../../api/generated/versions.es.js";
41
41
  import "../../api/generated/workfiles.es.js";
42
42
  import "../../api/generated/ynputCloud.es.js";
43
+ import "../../api/generated/grouping.es.js";
43
44
  import "../../api/queries/actions/getActions.es.js";
44
45
  import "../../api/queries/activities/getActivities.es.js";
45
46
  import "../../api/queries/activities/updateActivities.es.js";
@@ -70,6 +71,7 @@ import "../../api/queries/users/getUsers.es.js";
70
71
  import "../../api/queries/users/updateUsers.es.js";
71
72
  import "../../api/queries/watchers/getWatchers.es.js";
72
73
  import "../../api/queries/permissions/getPermissions.es.js";
74
+ import "../../api/queries/grouping/getGrouping.es.js";
73
75
  import { DetailsPanelAttributesEditor } from "./DetailsPanelAttributesEditor.es.js";
74
76
  import "../../context/RemoteModulesContext.es.js";
75
77
  import "../../../../_virtual/runtime.es.js";
@@ -1 +1 @@
1
- {"version":3,"file":"DetailsPanelAttributes.es.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.folder?.path || '',\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["_a","formData","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DetailsPanelAttributes.es.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.folder?.path || '',\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["_a","formData","jsx"],"mappings":"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"}
@@ -43,6 +43,7 @@ require("../../api/generated/users.cjs.js");
43
43
  require("../../api/generated/versions.cjs.js");
44
44
  require("../../api/generated/workfiles.cjs.js");
45
45
  require("../../api/generated/ynputCloud.cjs.js");
46
+ require("../../api/generated/grouping.cjs.js");
46
47
  require("../../api/queries/actions/getActions.cjs.js");
47
48
  require("../../api/queries/activities/getActivities.cjs.js");
48
49
  require("../../api/queries/activities/updateActivities.cjs.js");
@@ -73,6 +74,7 @@ require("../../api/queries/users/getUsers.cjs.js");
73
74
  require("../../api/queries/users/updateUsers.cjs.js");
74
75
  require("../../api/queries/watchers/getWatchers.cjs.js");
75
76
  require("../../api/queries/permissions/getPermissions.cjs.js");
77
+ require("../../api/queries/grouping/getGrouping.cjs.js");
76
78
  require("@dnd-kit/core");
77
79
  require("@dnd-kit/sortable");
78
80
  require("../ReviewablesList/ReviewablesList.styled.cjs.js");
@@ -126,17 +128,15 @@ require("../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.cjs
126
128
  require("../../containers/Feed/Feed.styled.cjs.js");
127
129
  require("date-fns");
128
130
  require("../../containers/ProjectTreeTable/ProjectTreeTable.cjs.js");
131
+ require("../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");
132
+ require("../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");
133
+ require("@tanstack/react-table");
129
134
  require("../../containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js");
135
+ require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");
130
136
  require("../../containers/ProjectTreeTable/context/ProjectTableContext.cjs.js");
131
137
  require("../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");
132
138
  require("../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");
133
- require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");
134
- require("../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");
135
- require("../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");
136
- require("../../containers/ProjectTreeTable/context/ProjectTableSelectionContext.cjs.js");
137
139
  require("../../containers/ProjectTreeTable/context/ProjectDataContext.cjs.js");
138
- require("../../containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js");
139
- require("@tanstack/react-table");
140
140
  require("../../containers/ProjectTreeTable/widgets/CollapsedWidget.cjs.js");
141
141
  require("../../containers/ProjectTreeTable/widgets/DateWidget.cjs.js");
142
142
  require("../../containers/ProjectTreeTable/widgets/EnumWidget.cjs.js");
@@ -150,11 +150,12 @@ require("../../containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js");
150
150
  require("../../containers/ProjectTreeTable/components/SelectionCell.cjs.js");
151
151
  require("../../containers/ProjectTreeTable/components/RowSelectionHeader.cjs.js");
152
152
  require("../../containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");
153
- require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");
154
153
  require("../../../../_virtual/runtime.cjs.js");
155
154
  require("../../../../_virtual/semver.cjs.js");
156
155
  require("react-redux");
157
156
  require("custom-protocol-check");
157
+ require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js");
158
+ require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");
158
159
  require("../../containers/DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");
159
160
  const DetailsPanelHeader_styled = require("../../containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");
160
161
  require("../../containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");
@@ -179,6 +180,7 @@ require("../SettingsPanel/SettingsPanelItemTemplate.cjs.js");
179
180
  require("../AttributeEditor/components/MinMaxField.cjs.js");
180
181
  require("../EnumEditor/EnumEditor.styled.cjs.js");
181
182
  require("../SearchFilter/filterDates.cjs.js");
183
+ require("../Badge/Badge.cjs.js");
182
184
  const EntityThumbnailUploader = ({
183
185
  children = [],
184
186
  entityType,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityThumbnailUploader.cjs.js","sources":["../../../../../src/components/EntityThumbnailUploader/EntityThumbnailUploader.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailUploader } from '@shared/components'\nimport { ThumbnailWrapper } from '@shared/containers'\nimport { useUpdateEntitiesMutation } from '@shared/api'\nimport * as Styled from './EntityThumbnailUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityThumbnailUploaderProps = {\n entityType: string\n entities: any[]\n isCompact?: boolean\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n}\n\nexport const EntityThumbnailUploader = ({\n children = [],\n entityType,\n entities = [],\n isCompact = false,\n onUploaded,\n}: EntityThumbnailUploaderProps) => {\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [isUploadingFile, setIsUploadingFile] = useState(false)\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleThumbnailUpload = async (thumbnails: any[] = []) => {\n // always set isDraggingFile to false\n setIsDraggingFile(false)\n setIsUploadingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailUpload}\n inputRef={inputRef}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ isCompact })}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n <ThumbnailUploader\n entities={entities}\n inputRef={inputRef}\n className={clsx('thumbnail-uploader', { hidden: !isDraggingFile && !isUploadingFile })}\n onUploadInProgress={() => setIsUploadingFile(true)}\n onFinish={handleThumbnailUpload}\n onDragLeave={() => setIsDraggingFile(false)}\n onDragOver={(e) => e.preventDefault()}\n />\n </Styled.DragAndDropWrapper>\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["useState","useUpdateEntitiesMutation","useRef","jsx","ThumbnailUploadProvider","jsxs","Styled.DragAndDropWrapper","ThumbnailWrapper","ThumbnailUploader"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAoC;AAClC,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAS,KAAK;AAC1D,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,MAAAA,SAAS,KAAK;AAEtD,QAAA,CAAC,cAAc,IAAIC,uCAA0B;AAEnD,QAAM,wBAAwB,OAAO,aAAoB,OAAO;AAE9D,sBAAkB,KAAK;AACvB,uBAAmB,KAAK;AAGpB,QAAA,CAAC,SAAS,QAAQ;AACpB;AAAA,IAAA;AAIF,UAAM,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAE5C,QAAI,aAA0B,CAAC;AAG/B,eAAW,UAAU,YAAY;AACzB,YAAA,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAC7D,UAAI,CAAC,cAAe;AACA,aAAO;AACrB,YAAA,mBAAmB,OAAO,SAAS,CAAC;AAE1C,iBAAW,KAAK;AAAA,QACd,IAAI,cAAc;AAAA,QAClB,aAAa,cAAc;AAAA,QAC3B,MAAM,EAAE,WAAW,aAAa;AAAA,QAChC;AAAA,MAAA,CACD;AAEoB,OAAA;AAAA,QACnB,WAAW,cAAc;AAAA,MAG3B;AAAA,IAEgC;AAG9B,QAAA;AACF,YAAM,eAAe,EAAE,YAAY,YAAY;AAC/C,oBAAc,WAAW,UAAU;AAAA,aAC5B,OAAO;AACN,cAAA,MAAM,8BAA8B,KAAK;AAAA,IAAA;AAAA,EAErD;AAEM,QAAA,WAAWC,aAAyB,IAAI;AAG5C,SAAAC,2BAAA,kBAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAAC,2BAAA,kBAAA;AAAA,QAACC,+BAAO;AAAA,QAAP;AAAA,UACC,WAAW,KAAK,EAAE,WAAW;AAAA,UAC7B,aAAa,MAAM,kBAAkB,IAAI;AAAA,UAEzC,UAAA;AAAA,YAAAH,iDAACI,0BAAAA,kBACC,EAAA,UAAAJ,2BAAAA,kBAAAA,IAAC,OAAK,EAAA,SAAS,CAAA,GACjB;AAAA,YACAA,2BAAA,kBAAA;AAAA,cAACK,kBAAA;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB;AAAA,gBACrF,oBAAoB,MAAM,mBAAmB,IAAI;AAAA,gBACjD,UAAU;AAAA,gBACV,aAAa,MAAM,kBAAkB,KAAK;AAAA,gBAC1C,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;;"}
1
+ {"version":3,"file":"EntityThumbnailUploader.cjs.js","sources":["../../../../../src/components/EntityThumbnailUploader/EntityThumbnailUploader.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailUploader } from '@shared/components'\nimport { ThumbnailWrapper } from '@shared/containers'\nimport { useUpdateEntitiesMutation } from '@shared/api'\nimport * as Styled from './EntityThumbnailUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityThumbnailUploaderProps = {\n entityType: string\n entities: any[]\n isCompact?: boolean\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n}\n\nexport const EntityThumbnailUploader = ({\n children = [],\n entityType,\n entities = [],\n isCompact = false,\n onUploaded,\n}: EntityThumbnailUploaderProps) => {\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [isUploadingFile, setIsUploadingFile] = useState(false)\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleThumbnailUpload = async (thumbnails: any[] = []) => {\n // always set isDraggingFile to false\n setIsDraggingFile(false)\n setIsUploadingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailUpload}\n inputRef={inputRef}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ isCompact })}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n <ThumbnailUploader\n entities={entities}\n inputRef={inputRef}\n className={clsx('thumbnail-uploader', { hidden: !isDraggingFile && !isUploadingFile })}\n onUploadInProgress={() => setIsUploadingFile(true)}\n onFinish={handleThumbnailUpload}\n onDragLeave={() => setIsDraggingFile(false)}\n onDragOver={(e) => e.preventDefault()}\n />\n </Styled.DragAndDropWrapper>\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["useState","useUpdateEntitiesMutation","useRef","jsx","ThumbnailUploadProvider","jsxs","Styled.DragAndDropWrapper","ThumbnailWrapper","ThumbnailUploader"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAoC;AAClC,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAS,KAAK;AAC1D,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,MAAAA,SAAS,KAAK;AAEtD,QAAA,CAAC,cAAc,IAAIC,uCAA0B;AAEnD,QAAM,wBAAwB,OAAO,aAAoB,OAAO;AAE9D,sBAAkB,KAAK;AACvB,uBAAmB,KAAK;AAGpB,QAAA,CAAC,SAAS,QAAQ;AACpB;AAAA,IAAA;AAIF,UAAM,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAE5C,QAAI,aAA0B,CAAC;AAG/B,eAAW,UAAU,YAAY;AACzB,YAAA,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAC7D,UAAI,CAAC,cAAe;AACA,aAAO;AACrB,YAAA,mBAAmB,OAAO,SAAS,CAAC;AAE1C,iBAAW,KAAK;AAAA,QACd,IAAI,cAAc;AAAA,QAClB,aAAa,cAAc;AAAA,QAC3B,MAAM,EAAE,WAAW,aAAa;AAAA,QAChC;AAAA,MAAA,CACD;AAEoB,OAAA;AAAA,QACnB,WAAW,cAAc;AAAA,MAG3B;AAAA,IAEgC;AAG9B,QAAA;AACF,YAAM,eAAe,EAAE,YAAY,YAAY;AAC/C,oBAAc,WAAW,UAAU;AAAA,aAC5B,OAAO;AACN,cAAA,MAAM,8BAA8B,KAAK;AAAA,IAAA;AAAA,EAErD;AAEM,QAAA,WAAWC,aAAyB,IAAI;AAG5C,SAAAC,2BAAA,kBAAA;AAAA,IAACC,yBAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAAC,2BAAA,kBAAA;AAAA,QAACC,+BAAO;AAAA,QAAP;AAAA,UACC,WAAW,KAAK,EAAE,WAAW;AAAA,UAC7B,aAAa,MAAM,kBAAkB,IAAI;AAAA,UAEzC,UAAA;AAAA,YAAAH,iDAACI,0BAAAA,kBACC,EAAA,UAAAJ,2BAAAA,kBAAAA,IAAC,OAAK,EAAA,SAAS,CAAA,GACjB;AAAA,YACAA,2BAAA,kBAAA;AAAA,cAACK,kBAAA;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB;AAAA,gBACrF,oBAAoB,MAAM,mBAAmB,IAAI;AAAA,gBACjD,UAAU;AAAA,gBACV,aAAa,MAAM,kBAAkB,KAAK;AAAA,gBAC1C,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;;"}
@@ -41,6 +41,7 @@ import "../../api/generated/users.es.js";
41
41
  import "../../api/generated/versions.es.js";
42
42
  import "../../api/generated/workfiles.es.js";
43
43
  import "../../api/generated/ynputCloud.es.js";
44
+ import "../../api/generated/grouping.es.js";
44
45
  import "../../api/queries/actions/getActions.es.js";
45
46
  import "../../api/queries/activities/getActivities.es.js";
46
47
  import "../../api/queries/activities/updateActivities.es.js";
@@ -71,6 +72,7 @@ import "../../api/queries/users/getUsers.es.js";
71
72
  import "../../api/queries/users/updateUsers.es.js";
72
73
  import "../../api/queries/watchers/getWatchers.es.js";
73
74
  import "../../api/queries/permissions/getPermissions.es.js";
75
+ import "../../api/queries/grouping/getGrouping.es.js";
74
76
  import "@dnd-kit/core";
75
77
  import "@dnd-kit/sortable";
76
78
  import "../ReviewablesList/ReviewablesList.styled.es.js";
@@ -124,17 +126,15 @@ import "../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.es.j
124
126
  import "../../containers/Feed/Feed.styled.es.js";
125
127
  import "date-fns";
126
128
  import "../../containers/ProjectTreeTable/ProjectTreeTable.es.js";
129
+ import "../../containers/ProjectTreeTable/context/CellEditingContext.es.js";
130
+ import "../../containers/ProjectTreeTable/context/ClipboardContext.es.js";
131
+ import "@tanstack/react-table";
127
132
  import "../../containers/ProjectTreeTable/context/SelectionCellsContext.es.js";
133
+ import "../../containers/ProjectTreeTable/context/ColumnSettingsContext.es.js";
128
134
  import "../../containers/ProjectTreeTable/context/ProjectTableContext.es.js";
129
135
  import "../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.es.js";
130
136
  import "../../containers/ProjectTreeTable/context/SelectedRowsContext.es.js";
131
- import "../../containers/ProjectTreeTable/context/ColumnSettingsContext.es.js";
132
- import "../../containers/ProjectTreeTable/context/CellEditingContext.es.js";
133
- import "../../containers/ProjectTreeTable/context/ClipboardContext.es.js";
134
- import "../../containers/ProjectTreeTable/context/ProjectTableSelectionContext.es.js";
135
137
  import "../../containers/ProjectTreeTable/context/ProjectDataContext.es.js";
136
- import "../../containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js";
137
- import "@tanstack/react-table";
138
138
  import "../../containers/ProjectTreeTable/widgets/CollapsedWidget.es.js";
139
139
  import "../../containers/ProjectTreeTable/widgets/DateWidget.es.js";
140
140
  import "../../containers/ProjectTreeTable/widgets/EnumWidget.es.js";
@@ -148,11 +148,12 @@ import "../../containers/ProjectTreeTable/ProjectTreeTable.styled.es.js";
148
148
  import "../../containers/ProjectTreeTable/components/SelectionCell.es.js";
149
149
  import "../../containers/ProjectTreeTable/components/RowSelectionHeader.es.js";
150
150
  import "../../containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js";
151
- import "../../containers/DetailsPanel/DetailsPanel.styled.es.js";
152
151
  import "../../../../_virtual/runtime.es.js";
153
152
  import "../../../../_virtual/semver.es.js";
154
153
  import "react-redux";
155
154
  import "custom-protocol-check";
155
+ import "../../containers/ProjectTreeTable/components/GroupSettingsFallback.es.js";
156
+ import "../../containers/DetailsPanel/DetailsPanel.styled.es.js";
156
157
  import "../../containers/DetailsPanel/FeedFilters/FeedFilters.styled.es.js";
157
158
  import { ThumbnailWrapper } from "../../containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
158
159
  import "../../containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js";
@@ -177,6 +178,7 @@ import "../SettingsPanel/SettingsPanelItemTemplate.es.js";
177
178
  import "../AttributeEditor/components/MinMaxField.es.js";
178
179
  import "../EnumEditor/EnumEditor.styled.es.js";
179
180
  import "../SearchFilter/filterDates.es.js";
181
+ import "../Badge/Badge.es.js";
180
182
  const EntityThumbnailUploader = ({
181
183
  children = [],
182
184
  entityType,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityThumbnailUploader.es.js","sources":["../../../../../src/components/EntityThumbnailUploader/EntityThumbnailUploader.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailUploader } from '@shared/components'\nimport { ThumbnailWrapper } from '@shared/containers'\nimport { useUpdateEntitiesMutation } from '@shared/api'\nimport * as Styled from './EntityThumbnailUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityThumbnailUploaderProps = {\n entityType: string\n entities: any[]\n isCompact?: boolean\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n}\n\nexport const EntityThumbnailUploader = ({\n children = [],\n entityType,\n entities = [],\n isCompact = false,\n onUploaded,\n}: EntityThumbnailUploaderProps) => {\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [isUploadingFile, setIsUploadingFile] = useState(false)\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleThumbnailUpload = async (thumbnails: any[] = []) => {\n // always set isDraggingFile to false\n setIsDraggingFile(false)\n setIsUploadingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailUpload}\n inputRef={inputRef}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ isCompact })}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n <ThumbnailUploader\n entities={entities}\n inputRef={inputRef}\n className={clsx('thumbnail-uploader', { hidden: !isDraggingFile && !isUploadingFile })}\n onUploadInProgress={() => setIsUploadingFile(true)}\n onFinish={handleThumbnailUpload}\n onDragLeave={() => setIsDraggingFile(false)}\n onDragOver={(e) => e.preventDefault()}\n />\n </Styled.DragAndDropWrapper>\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["jsx","jsxs","Styled.DragAndDropWrapper"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAoC;AAClC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAEtD,QAAA,CAAC,cAAc,IAAI,0BAA0B;AAEnD,QAAM,wBAAwB,OAAO,aAAoB,OAAO;AAE9D,sBAAkB,KAAK;AACvB,uBAAmB,KAAK;AAGpB,QAAA,CAAC,SAAS,QAAQ;AACpB;AAAA,IAAA;AAIF,UAAM,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAE5C,QAAI,aAA0B,CAAC;AAG/B,eAAW,UAAU,YAAY;AACzB,YAAA,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAC7D,UAAI,CAAC,cAAe;AACA,aAAO;AACrB,YAAA,mBAAmB,OAAO,SAAS,CAAC;AAE1C,iBAAW,KAAK;AAAA,QACd,IAAI,cAAc;AAAA,QAClB,aAAa,cAAc;AAAA,QAC3B,MAAM,EAAE,WAAW,aAAa;AAAA,QAChC;AAAA,MAAA,CACD;AAEoB,OAAA;AAAA,QACnB,WAAW,cAAc;AAAA,MAG3B;AAAA,IAEgC;AAG9B,QAAA;AACF,YAAM,eAAe,EAAE,YAAY,YAAY;AAC/C,oBAAc,WAAW,UAAU;AAAA,aAC5B,OAAO;AACN,cAAA,MAAM,8BAA8B,KAAK;AAAA,IAAA;AAAA,EAErD;AAEM,QAAA,WAAW,OAAyB,IAAI;AAG5C,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAAC,kCAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,WAAW,KAAK,EAAE,WAAW;AAAA,UAC7B,aAAa,MAAM,kBAAkB,IAAI;AAAA,UAEzC,UAAA;AAAA,YAAAF,sCAAC,kBACC,EAAA,UAAAA,kCAAAA,IAAC,OAAK,EAAA,SAAS,CAAA,GACjB;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB;AAAA,gBACrF,oBAAoB,MAAM,mBAAmB,IAAI;AAAA,gBACjD,UAAU;AAAA,gBACV,aAAa,MAAM,kBAAkB,KAAK;AAAA,gBAC1C,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"EntityThumbnailUploader.es.js","sources":["../../../../../src/components/EntityThumbnailUploader/EntityThumbnailUploader.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailUploader } from '@shared/components'\nimport { ThumbnailWrapper } from '@shared/containers'\nimport { useUpdateEntitiesMutation } from '@shared/api'\nimport * as Styled from './EntityThumbnailUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityThumbnailUploaderProps = {\n entityType: string\n entities: any[]\n isCompact?: boolean\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n}\n\nexport const EntityThumbnailUploader = ({\n children = [],\n entityType,\n entities = [],\n isCompact = false,\n onUploaded,\n}: EntityThumbnailUploaderProps) => {\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [isUploadingFile, setIsUploadingFile] = useState(false)\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleThumbnailUpload = async (thumbnails: any[] = []) => {\n // always set isDraggingFile to false\n setIsDraggingFile(false)\n setIsUploadingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailUpload}\n inputRef={inputRef}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ isCompact })}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n <ThumbnailUploader\n entities={entities}\n inputRef={inputRef}\n className={clsx('thumbnail-uploader', { hidden: !isDraggingFile && !isUploadingFile })}\n onUploadInProgress={() => setIsUploadingFile(true)}\n onFinish={handleThumbnailUpload}\n onDragLeave={() => setIsDraggingFile(false)}\n onDragOver={(e) => e.preventDefault()}\n />\n </Styled.DragAndDropWrapper>\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["jsx","jsxs","Styled.DragAndDropWrapper"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,YAAY;AAAA,EACZ;AACF,MAAoC;AAClC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAEtD,QAAA,CAAC,cAAc,IAAI,0BAA0B;AAEnD,QAAM,wBAAwB,OAAO,aAAoB,OAAO;AAE9D,sBAAkB,KAAK;AACvB,uBAAmB,KAAK;AAGpB,QAAA,CAAC,SAAS,QAAQ;AACpB;AAAA,IAAA;AAIF,UAAM,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAE5C,QAAI,aAA0B,CAAC;AAG/B,eAAW,UAAU,YAAY;AACzB,YAAA,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAC7D,UAAI,CAAC,cAAe;AACA,aAAO;AACrB,YAAA,mBAAmB,OAAO,SAAS,CAAC;AAE1C,iBAAW,KAAK;AAAA,QACd,IAAI,cAAc;AAAA,QAClB,aAAa,cAAc;AAAA,QAC3B,MAAM,EAAE,WAAW,aAAa;AAAA,QAChC;AAAA,MAAA,CACD;AAEoB,OAAA;AAAA,QACnB,WAAW,cAAc;AAAA,MAG3B;AAAA,IAEgC;AAG9B,QAAA;AACF,YAAM,eAAe,EAAE,YAAY,YAAY;AAC/C,oBAAc,WAAW,UAAU;AAAA,aAC5B,OAAO;AACN,cAAA,MAAM,8BAA8B,KAAK;AAAA,IAAA;AAAA,EAErD;AAEM,QAAA,WAAW,OAAyB,IAAI;AAG5C,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,UAAAC,kCAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,WAAW,KAAK,EAAE,WAAW;AAAA,UAC7B,aAAa,MAAM,kBAAkB,IAAI;AAAA,UAEzC,UAAA;AAAA,YAAAF,sCAAC,kBACC,EAAA,UAAAA,kCAAAA,IAAC,OAAK,EAAA,SAAS,CAAA,GACjB;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB;AAAA,gBACrF,oBAAoB,MAAM,mBAAmB,IAAI;AAAA,gBACjD,UAAU;AAAA,gBACV,aAAa,MAAM,kBAAkB,KAAK;AAAA,gBAC1C,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,cAAA;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
@@ -40,6 +40,7 @@ const ColumnItem = ({
40
40
  isPinned,
41
41
  isHidden,
42
42
  isHighlighted,
43
+ isDisabled,
43
44
  // Dragging props
44
45
  dragHandleProps,
45
46
  dragOverlay = false,
@@ -69,6 +70,7 @@ const ColumnItem = ({
69
70
  item: column,
70
71
  actions: itemActions,
71
72
  isHighlighted,
73
+ isDisabled,
72
74
  className: clsx({ hidden: isHidden, overlay: dragOverlay }),
73
75
  startContent: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("div", { ...dragHandleProps, className: "drag-handle", children: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(ayonReactComponents.Icon, { icon: "drag_indicator" }) })
74
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnItem.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnItem.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { FC, useMemo } from 'react'\nimport {\n SettingsPanelItemTemplate,\n SettingsPanelItem,\n} from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { Icon } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst SettingsPanelItemTemplateStyled = styled(SettingsPanelItemTemplate)`\n &:hover {\n .pin-action {\n opacity: 1;\n }\n }\n\n .drag-handle {\n cursor: grab;\n height: 20px;\n }\n\n &.overlay {\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.1);\n }\n\n &.dragging {\n opacity: 0;\n\n .drag-handle {\n cursor: grabbing;\n }\n }\n\n &.hidden {\n .pin-action {\n opacity: 0;\n }\n }\n`\n\ninterface ColumnItemProps {\n column: SettingsPanelItem\n isPinned: boolean\n isHidden: boolean\n isHighlighted?: boolean\n dragHandleProps?: any\n dragOverlay?: boolean\n onTogglePinning?: (columnId: string) => void\n onToggleVisibility?: (columnId: string) => void\n}\n\nconst ColumnItem: FC<ColumnItemProps> = ({\n column,\n isPinned,\n isHidden,\n isHighlighted,\n // Dragging props\n dragHandleProps,\n dragOverlay = false,\n // Callbacks\n onTogglePinning,\n onToggleVisibility,\n}) => {\n const itemActions = useMemo(\n () => [\n {\n icon: 'push_pin',\n onClick: () => onTogglePinning?.(column.value),\n active: isPinned,\n className: 'pin-action',\n },\n {\n icon: isHidden ? 'visibility_off' : 'visibility',\n onClick: () => onToggleVisibility?.(column.value),\n active: !isHidden,\n },\n ],\n [isPinned, isHidden, column.value, onTogglePinning, onToggleVisibility],\n )\n\n return (\n <SettingsPanelItemTemplateStyled\n item={column}\n actions={itemActions}\n isHighlighted={isHighlighted}\n className={clsx({ hidden: isHidden, overlay: dragOverlay })}\n startContent={\n <div {...dragHandleProps} className={'drag-handle'}>\n <Icon icon=\"drag_indicator\" />\n </div>\n }\n />\n )\n}\n\nexport default ColumnItem\n"],"names":["SettingsPanelItemTemplate","useMemo","jsx","Icon"],"mappings":";;;;;;;AASA,MAAM,kCAAkC,OAAOA,mDAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CxE,MAAM,aAAkC,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA,cAAc;AAAA;AAAA,EAEd;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAcC,MAAA;AAAA,IAClB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,SAAS,MAAM,mDAAkB,OAAO;AAAA,QACxC,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM,WAAW,mBAAmB;AAAA,QACpC,SAAS,MAAM,yDAAqB,OAAO;AAAA,QAC3C,QAAQ,CAAC;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,CAAC,UAAU,UAAU,OAAO,OAAO,iBAAiB,kBAAkB;AAAA,EACxE;AAGE,SAAAC,2BAAA,kBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA,WAAW,KAAK,EAAE,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC1D,cACGA,2BAAAA,kBAAAA,IAAA,OAAA,EAAK,GAAG,iBAAiB,WAAW,eACnC,UAACA,2BAAA,kBAAA,IAAAC,oBAAA,MAAA,EAAK,MAAK,iBAAiB,CAAA,EAC9B,CAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;;"}
1
+ {"version":3,"file":"ColumnItem.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnItem.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { FC, useMemo } from 'react'\nimport {\n SettingsPanelItemTemplate,\n SettingsPanelItem,\n} from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { Icon } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst SettingsPanelItemTemplateStyled = styled(SettingsPanelItemTemplate)`\n &:hover {\n .pin-action {\n opacity: 1;\n }\n }\n\n .drag-handle {\n cursor: grab;\n height: 20px;\n }\n\n &.overlay {\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.1);\n }\n\n &.dragging {\n opacity: 0;\n\n .drag-handle {\n cursor: grabbing;\n }\n }\n\n &.hidden {\n .pin-action {\n opacity: 0;\n }\n }\n`\n\ninterface ColumnItemProps {\n column: SettingsPanelItem\n isPinned: boolean\n isHidden: boolean\n isHighlighted?: boolean\n isDisabled?: boolean\n dragHandleProps?: any\n dragOverlay?: boolean\n onTogglePinning?: (columnId: string) => void\n onToggleVisibility?: (columnId: string) => void\n}\n\nconst ColumnItem: FC<ColumnItemProps> = ({\n column,\n isPinned,\n isHidden,\n isHighlighted,\n isDisabled,\n // Dragging props\n dragHandleProps,\n dragOverlay = false,\n // Callbacks\n onTogglePinning,\n onToggleVisibility,\n}) => {\n const itemActions = useMemo(\n () => [\n {\n icon: 'push_pin',\n onClick: () => onTogglePinning?.(column.value),\n active: isPinned,\n className: 'pin-action',\n },\n {\n icon: isHidden ? 'visibility_off' : 'visibility',\n onClick: () => onToggleVisibility?.(column.value),\n active: !isHidden,\n },\n ],\n [isPinned, isHidden, column.value, onTogglePinning, onToggleVisibility],\n )\n\n return (\n <SettingsPanelItemTemplateStyled\n item={column}\n actions={itemActions}\n isHighlighted={isHighlighted}\n isDisabled={isDisabled}\n className={clsx({ hidden: isHidden, overlay: dragOverlay })}\n startContent={\n <div {...dragHandleProps} className={'drag-handle'}>\n <Icon icon=\"drag_indicator\" />\n </div>\n }\n />\n )\n}\n\nexport default ColumnItem\n"],"names":["SettingsPanelItemTemplate","useMemo","jsx","Icon"],"mappings":";;;;;;;AASA,MAAM,kCAAkC,OAAOA,mDAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CxE,MAAM,aAAkC,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA,cAAc;AAAA;AAAA,EAEd;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAcC,MAAA;AAAA,IAClB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,SAAS,MAAM,mDAAkB,OAAO;AAAA,QACxC,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM,WAAW,mBAAmB;AAAA,QACpC,SAAS,MAAM,yDAAqB,OAAO;AAAA,QAC3C,QAAQ,CAAC;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,CAAC,UAAU,UAAU,OAAO,OAAO,iBAAiB,kBAAkB;AAAA,EACxE;AAGE,SAAAC,2BAAA,kBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,WAAW,KAAK,EAAE,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC1D,cACGA,2BAAAA,kBAAAA,IAAA,OAAA,EAAK,GAAG,iBAAiB,WAAW,eACnC,UAACA,2BAAA,kBAAA,IAAAC,oBAAA,MAAA,EAAK,MAAK,iBAAiB,CAAA,EAC9B,CAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;;"}
@@ -39,6 +39,7 @@ const ColumnItem = ({
39
39
  isPinned,
40
40
  isHidden,
41
41
  isHighlighted,
42
+ isDisabled,
42
43
  // Dragging props
43
44
  dragHandleProps,
44
45
  dragOverlay = false,
@@ -68,6 +69,7 @@ const ColumnItem = ({
68
69
  item: column,
69
70
  actions: itemActions,
70
71
  isHighlighted,
72
+ isDisabled,
71
73
  className: clsx({ hidden: isHidden, overlay: dragOverlay }),
72
74
  startContent: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ...dragHandleProps, className: "drag-handle", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { icon: "drag_indicator" }) })
73
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnItem.es.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnItem.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { FC, useMemo } from 'react'\nimport {\n SettingsPanelItemTemplate,\n SettingsPanelItem,\n} from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { Icon } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst SettingsPanelItemTemplateStyled = styled(SettingsPanelItemTemplate)`\n &:hover {\n .pin-action {\n opacity: 1;\n }\n }\n\n .drag-handle {\n cursor: grab;\n height: 20px;\n }\n\n &.overlay {\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.1);\n }\n\n &.dragging {\n opacity: 0;\n\n .drag-handle {\n cursor: grabbing;\n }\n }\n\n &.hidden {\n .pin-action {\n opacity: 0;\n }\n }\n`\n\ninterface ColumnItemProps {\n column: SettingsPanelItem\n isPinned: boolean\n isHidden: boolean\n isHighlighted?: boolean\n dragHandleProps?: any\n dragOverlay?: boolean\n onTogglePinning?: (columnId: string) => void\n onToggleVisibility?: (columnId: string) => void\n}\n\nconst ColumnItem: FC<ColumnItemProps> = ({\n column,\n isPinned,\n isHidden,\n isHighlighted,\n // Dragging props\n dragHandleProps,\n dragOverlay = false,\n // Callbacks\n onTogglePinning,\n onToggleVisibility,\n}) => {\n const itemActions = useMemo(\n () => [\n {\n icon: 'push_pin',\n onClick: () => onTogglePinning?.(column.value),\n active: isPinned,\n className: 'pin-action',\n },\n {\n icon: isHidden ? 'visibility_off' : 'visibility',\n onClick: () => onToggleVisibility?.(column.value),\n active: !isHidden,\n },\n ],\n [isPinned, isHidden, column.value, onTogglePinning, onToggleVisibility],\n )\n\n return (\n <SettingsPanelItemTemplateStyled\n item={column}\n actions={itemActions}\n isHighlighted={isHighlighted}\n className={clsx({ hidden: isHidden, overlay: dragOverlay })}\n startContent={\n <div {...dragHandleProps} className={'drag-handle'}>\n <Icon icon=\"drag_indicator\" />\n </div>\n }\n />\n )\n}\n\nexport default ColumnItem\n"],"names":["jsx"],"mappings":";;;;;;AASA,MAAM,kCAAkC,OAAO,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CxE,MAAM,aAAkC,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA,cAAc;AAAA;AAAA,EAEd;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,SAAS,MAAM,mDAAkB,OAAO;AAAA,QACxC,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM,WAAW,mBAAmB;AAAA,QACpC,SAAS,MAAM,yDAAqB,OAAO;AAAA,QAC3C,QAAQ,CAAC;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,CAAC,UAAU,UAAU,OAAO,OAAO,iBAAiB,kBAAkB;AAAA,EACxE;AAGE,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA,WAAW,KAAK,EAAE,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC1D,cACGA,kCAAAA,IAAA,OAAA,EAAK,GAAG,iBAAiB,WAAW,eACnC,UAACA,kCAAA,IAAA,MAAA,EAAK,MAAK,iBAAiB,CAAA,EAC9B,CAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;"}
1
+ {"version":3,"file":"ColumnItem.es.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnItem.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { FC, useMemo } from 'react'\nimport {\n SettingsPanelItemTemplate,\n SettingsPanelItem,\n} from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { Icon } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst SettingsPanelItemTemplateStyled = styled(SettingsPanelItemTemplate)`\n &:hover {\n .pin-action {\n opacity: 1;\n }\n }\n\n .drag-handle {\n cursor: grab;\n height: 20px;\n }\n\n &.overlay {\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.1);\n }\n\n &.dragging {\n opacity: 0;\n\n .drag-handle {\n cursor: grabbing;\n }\n }\n\n &.hidden {\n .pin-action {\n opacity: 0;\n }\n }\n`\n\ninterface ColumnItemProps {\n column: SettingsPanelItem\n isPinned: boolean\n isHidden: boolean\n isHighlighted?: boolean\n isDisabled?: boolean\n dragHandleProps?: any\n dragOverlay?: boolean\n onTogglePinning?: (columnId: string) => void\n onToggleVisibility?: (columnId: string) => void\n}\n\nconst ColumnItem: FC<ColumnItemProps> = ({\n column,\n isPinned,\n isHidden,\n isHighlighted,\n isDisabled,\n // Dragging props\n dragHandleProps,\n dragOverlay = false,\n // Callbacks\n onTogglePinning,\n onToggleVisibility,\n}) => {\n const itemActions = useMemo(\n () => [\n {\n icon: 'push_pin',\n onClick: () => onTogglePinning?.(column.value),\n active: isPinned,\n className: 'pin-action',\n },\n {\n icon: isHidden ? 'visibility_off' : 'visibility',\n onClick: () => onToggleVisibility?.(column.value),\n active: !isHidden,\n },\n ],\n [isPinned, isHidden, column.value, onTogglePinning, onToggleVisibility],\n )\n\n return (\n <SettingsPanelItemTemplateStyled\n item={column}\n actions={itemActions}\n isHighlighted={isHighlighted}\n isDisabled={isDisabled}\n className={clsx({ hidden: isHidden, overlay: dragOverlay })}\n startContent={\n <div {...dragHandleProps} className={'drag-handle'}>\n <Icon icon=\"drag_indicator\" />\n </div>\n }\n />\n )\n}\n\nexport default ColumnItem\n"],"names":["jsx"],"mappings":";;;;;;AASA,MAAM,kCAAkC,OAAO,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CxE,MAAM,aAAkC,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA,cAAc;AAAA;AAAA,EAEd;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,SAAS,MAAM,mDAAkB,OAAO;AAAA,QACxC,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,MAAM,WAAW,mBAAmB;AAAA,QACpC,SAAS,MAAM,yDAAqB,OAAO;AAAA,QAC3C,QAAQ,CAAC;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,CAAC,UAAU,UAAU,OAAO,OAAO,iBAAiB,kBAAkB;AAAA,EACxE;AAGE,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,WAAW,KAAK,EAAE,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC1D,cACGA,kCAAAA,IAAA,OAAA,EAAK,GAAG,iBAAiB,WAAW,eACnC,UAACA,kCAAA,IAAA,MAAA,EAAK,MAAK,iBAAiB,CAAA,EAC9B,CAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;"}
@@ -18,7 +18,8 @@ const ColumnsSettings = ({ columns, highlighted }) => {
18
18
  updateColumnPinning,
19
19
  columnOrder,
20
20
  setColumnsConfig,
21
- columnSizing
21
+ columnSizing,
22
+ groupBy
22
23
  } = ColumnSettingsContext.useColumnSettingsContext();
23
24
  const [activeId, setActiveId] = React.useState(null);
24
25
  const [isHiddenOverVisible, setIsHiddenOverVisible] = React.useState(false);
@@ -248,6 +249,7 @@ const ColumnsSettings = ({ columns, highlighted }) => {
248
249
  column,
249
250
  isPinned: true,
250
251
  isHidden: false,
252
+ isDisabled: !!groupBy && column.value === "name",
251
253
  isHighlighted: highlighted === column.value,
252
254
  onTogglePinning: togglePinning,
253
255
  onToggleVisibility: toggleVisibility
@@ -276,6 +278,7 @@ const ColumnsSettings = ({ columns, highlighted }) => {
276
278
  isPinned: false,
277
279
  isHidden: false,
278
280
  isHighlighted: highlighted === column.value,
281
+ isDisabled: !!groupBy && column.value === "name",
279
282
  onTogglePinning: togglePinning,
280
283
  onToggleVisibility: toggleVisibility
281
284
  },
@@ -298,6 +301,7 @@ const ColumnsSettings = ({ columns, highlighted }) => {
298
301
  isPinned: ((_a2 = columnPinning.left) == null ? void 0 : _a2.includes(column.value)) || false,
299
302
  isHidden: true,
300
303
  isHighlighted: highlighted === column.value,
304
+ isDisabled: !!groupBy && column.value === "name",
301
305
  onTogglePinning: togglePinning,
302
306
  onToggleVisibility: toggleVisibility
303
307
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnsSettings.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnsSettings.tsx"],"sourcesContent":["// React and Styling imports\nimport { FC, useEffect, useMemo, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport * as Styled from './TableSettings.styled'\n\n// Context and Components imports\nimport {\n ColumnsConfig,\n useColumnSettingsContext,\n} from '@shared/containers/ProjectTreeTable/context/ColumnSettingsContext'\nimport ColumnItem from './ColumnItem'\nimport SortableColumnItem from './SortableColumnItem'\n\n// DND (Drag and Drop) imports\nimport {\n DndContext,\n closestCenter,\n DragEndEvent,\n DragStartEvent,\n useSensor,\n useSensors,\n PointerSensor,\n DragOverlay,\n DragOverEvent,\n} from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy, arrayMove } from '@dnd-kit/sortable'\n\n// Notification imports\nimport { toast } from 'react-toastify'\nimport { SettingsPanelItem } from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { SettingHighlightedId } from '@shared/context'\n\ninterface ColumnsSettingsProps {\n columns: SettingsPanelItem[]\n highlighted?: SettingHighlightedId\n}\n\nconst ColumnsSettings: FC<ColumnsSettingsProps> = ({ columns, highlighted }) => {\n const {\n columnVisibility,\n updateColumnVisibility,\n columnPinning,\n updateColumnPinning,\n columnOrder,\n setColumnsConfig,\n columnSizing,\n } = useColumnSettingsContext()\n\n // State for the currently dragged column\n const [activeId, setActiveId] = useState<string | null>(null)\n const [isHiddenOverVisible, setIsHiddenOverVisible] = useState(false)\n const [isDraggingOverPinned, setIsDraggingOverPinned] = useState(false)\n const [isDraggingFromPinned, setIsDraggingFromPinned] = useState(false)\n // Add a new state to track if we're hovering over the visible section\n const [isHoveringVisibleSection, setIsHoveringVisibleSection] = useState(false)\n // Add state to track if dragging over the hidden section\n const [isDraggingOverHidden, setIsDraggingOverHidden] = useState(false)\n\n // Setup sensors for dnd-kit\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n )\n\n const menuRef = useRef<HTMLUListElement | null>(null)\n\n // if highlighted is set, scroll to the highlighted column\n useEffect(() => {\n if (menuRef.current && highlighted) {\n const highlightedElement = menuRef.current.querySelector(`#column-settings-${highlighted}`)\n if (highlightedElement) {\n highlightedElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }\n }, [highlighted])\n\n // Separate columns into visible, hidden, and pinned\n const { visibleColumns, hiddenColumns, pinnedColumns } = useMemo(() => {\n // First filter columns by visibility\n const visible = columns.filter((col) => columnVisibility[col.value] !== false)\n const hidden = columns.filter((col) => columnVisibility[col.value] === false)\n\n // Then separate out pinned columns from visible\n const pinned = visible.filter((col) => columnPinning.left?.includes(col.value))\n const unpinnedVisible = visible.filter((col) => !columnPinning.left?.includes(col.value))\n\n return {\n visibleColumns: unpinnedVisible,\n hiddenColumns: hidden,\n pinnedColumns: pinned,\n }\n }, [columns, columnVisibility, columnPinning])\n\n // Sort columns based on columnOrder\n const sortedVisibleColumns = useMemo(() => {\n // Create a copy of visible columns\n const visibleCopy = [...visibleColumns]\n\n // If we have a column order, use it to sort\n if (columnOrder.length > 0) {\n visibleCopy.sort((a, b) => {\n const indexA = columnOrder.indexOf(a.value)\n const indexB = columnOrder.indexOf(b.value)\n\n // If column is not in order array, place at end\n if (indexA === -1) return 1\n if (indexB === -1) return -1\n\n return indexA - indexB\n })\n }\n\n return visibleCopy\n }, [visibleColumns, columnOrder])\n\n // Sort pinned columns based on columnOrder\n const sortedPinnedColumns = useMemo(() => {\n // Create a copy of pinned columns\n const pinnedCopy = [...pinnedColumns]\n\n // If we have a column order, use it to sort\n if (columnOrder.length > 0) {\n pinnedCopy.sort((a, b) => {\n const indexA = columnOrder.indexOf(a.value)\n const indexB = columnOrder.indexOf(b.value)\n\n // If column is not in order array, place at end\n if (indexA === -1) return 1\n if (indexB === -1) return -1\n\n return indexA - indexB\n })\n }\n\n return pinnedCopy\n }, [pinnedColumns, columnOrder])\n\n const sortedVisibleColumnsIds = useMemo(\n () => sortedVisibleColumns.map((col) => col.value),\n [sortedVisibleColumns],\n )\n\n const sortedPinnedColumnsIds = useMemo(\n () => sortedPinnedColumns.map((col) => col.value),\n [sortedPinnedColumns],\n )\n\n // Toggle column visibility\n const toggleVisibility = (columnId: string) => {\n const newState = { ...columnVisibility }\n // If column is currently visible, hide it\n if (newState[columnId] !== false) {\n newState[columnId] = false\n } else {\n // If column is currently hidden, show it\n newState[columnId] = true\n }\n updateColumnVisibility(newState)\n }\n\n // Toggle column pinning\n const togglePinning = (columnId: string) => {\n const newState = { ...columnPinning }\n const newVisibility = { ...columnVisibility }\n\n // If column is currently pinned, unpin it\n if (newState.left?.includes(columnId)) {\n newState.left = newState.left.filter((id) => id !== columnId)\n } else {\n // If column is currently unpinned, pin it\n newState.left = [...(newState.left || []), columnId]\n // If column is hidden, show it\n if (newVisibility[columnId] === false) {\n newVisibility[columnId] = true\n updateColumnVisibility(newVisibility)\n }\n }\n updateColumnPinning(newState)\n }\n\n // When drag starts\n const handleDragStart = (event: DragStartEvent) => {\n const id = event.active.id as string\n setActiveId(id)\n setIsDraggingFromPinned(columnPinning.left?.includes(id) || false)\n }\n\n // Track when dragging over different sections\n const handleDragOver = (event: DragOverEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n // Check if we're dragging a hidden column over a visible column\n const isActiveHidden = columnVisibility[active.id as string] === false\n const isOverVisible = columnVisibility[over.id as string] !== false\n const isOverPinned = columnPinning.left?.includes(over.id as string) || false\n const isOverHidden = columnVisibility[over.id as string] === false\n\n setIsHiddenOverVisible(isActiveHidden && isOverVisible && !isOverPinned)\n setIsDraggingOverPinned(isOverVisible && isOverPinned)\n setIsDraggingOverHidden(isOverHidden)\n\n // Set if we're hovering over the visible (unpinned) section\n setIsHoveringVisibleSection(isOverVisible && !isOverPinned)\n } else {\n // Reset when not over any column\n setIsHoveringVisibleSection(false)\n setIsDraggingOverHidden(false)\n }\n }\n\n // When drag ends, reset all states\n const handleDragEnd = (event: DragEndEvent) => {\n // Reset states\n setIsHiddenOverVisible(false)\n setIsDraggingOverPinned(false)\n setIsDraggingFromPinned(false)\n setIsHoveringVisibleSection(false)\n setIsDraggingOverHidden(false)\n\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n // Find the dragged column and target column\n const activeColumn = [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find(\n (col) => col.value === active.id,\n )\n const overColumn = [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find(\n (col) => col.value === over.id,\n )\n\n if (activeColumn && overColumn) {\n const activeId = active.id as string\n const overId = over.id as string\n const isActiveVisible = columnVisibility[activeId] !== false\n const isOverVisible = columnVisibility[overId] !== false\n const isActivePinned = columnPinning.left?.includes(activeId) || false\n const isOverPinned = columnPinning.left?.includes(overId) || false\n const isOverHidden = columnVisibility[overId] === false\n\n // Create a new config object that we'll update and apply at the end\n const newConfig: ColumnsConfig = {\n columnVisibility: { ...columnVisibility },\n columnOrder: [...columnOrder],\n columnPinning: { ...columnPinning },\n columnSizing: { ...columnSizing },\n }\n\n // If we're moving a column between visible columns (including pinned)\n if (isActiveVisible && isOverVisible) {\n let newPinningLeft = [...(newConfig.columnPinning.left || [])]\n\n // Handle pinning/unpinning based on target section\n if (isActivePinned !== isOverPinned) {\n if (isActivePinned && !isOverPinned) {\n // Moving from pinned to unpinned section\n newPinningLeft = newPinningLeft.filter((id) => id !== activeId)\n } else if (!isActivePinned && isOverPinned) {\n // Moving from unpinned to pinned section\n newPinningLeft = [...newPinningLeft, activeId]\n }\n }\n\n // Update order within the appropriate section\n const allVisibleIds = [...sortedPinnedColumnsIds, ...sortedVisibleColumnsIds]\n const oldIndex = allVisibleIds.indexOf(activeId)\n const newIndex = allVisibleIds.indexOf(overId)\n\n if (oldIndex === -1 || newIndex === -1) {\n console.error('Invalid column order state')\n toast.error('Invalid column order state')\n return\n }\n\n const newOrder = arrayMove(allVisibleIds, oldIndex, newIndex)\n\n // new pinning left should be ordered by the new order\n const newPinningLeftOrdered = newOrder.filter((id) => newPinningLeft.includes(id))\n\n // Update config object\n newConfig.columnOrder = newOrder\n newConfig.columnPinning = {\n ...newConfig.columnPinning,\n left: newPinningLeftOrdered,\n }\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n\n // If we're dragging from hidden to visible\n else if (!isActiveVisible && isOverVisible) {\n // Make the column visible\n newConfig.columnVisibility[activeId] = true\n\n // If dropping into pinned section, also pin the column\n if (isOverPinned) {\n const newPinningLeft = [...(newConfig.columnPinning.left || []), activeId]\n newConfig.columnPinning.left = newPinningLeft\n }\n\n // Update order to place it near the over column\n const allVisibleIds = [...sortedPinnedColumnsIds, ...sortedVisibleColumnsIds]\n\n // Add the column to order if not already there\n if (!allVisibleIds.includes(activeId)) {\n const overIndex = allVisibleIds.indexOf(overId)\n allVisibleIds.splice(overIndex, 0, activeId)\n }\n\n newConfig.columnOrder = allVisibleIds\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n\n // If we're dragging from visible to hidden\n else if (isActiveVisible && isOverHidden) {\n // Make the active column hidden\n newConfig.columnVisibility[activeId] = false\n\n // If the column was pinned, remove it from pinned\n if (isActivePinned) {\n const newPinningLeft = (newConfig.columnPinning.left || []).filter(\n (id) => id !== activeId,\n )\n newConfig.columnPinning.left = newPinningLeft\n }\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n }\n }\n\n setActiveId(null)\n }\n\n // Find the active column for the drag overlay\n const activeColumn = activeId\n ? [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find((col) => col.value === activeId)\n : null\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <ColumnsContainer>\n {/* Pinned Columns Section */}\n {pinnedColumns.length > 0 && (\n <Section className={isDraggingOverPinned && !isDraggingFromPinned ? 'drop-target' : ''}>\n <SectionTitle>Pinned Columns</SectionTitle>\n <SortableContext\n items={sortedPinnedColumns.map((col) => col.value)}\n strategy={verticalListSortingStrategy}\n >\n <Styled.Menu>\n {sortedPinnedColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={true}\n isHidden={false}\n isHighlighted={highlighted === column.value}\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </SortableContext>\n </Section>\n )}\n\n {/* Visible Columns Section */}\n <Section\n className={\n isHiddenOverVisible || (isDraggingFromPinned && isHoveringVisibleSection)\n ? 'drop-target'\n : ''\n }\n >\n <SectionTitle>Visible Columns</SectionTitle>\n <SortableContext\n items={sortedVisibleColumns.map((col) => col.value)}\n strategy={verticalListSortingStrategy}\n >\n <Styled.Menu>\n {sortedVisibleColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={false}\n isHidden={false}\n isHighlighted={highlighted === column.value}\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </SortableContext>\n </Section>\n\n {/* Hidden Columns Section */}\n {hiddenColumns.length > 0 && (\n <Section className={isDraggingOverHidden ? 'drop-target' : ''}>\n <SectionTitle>Hidden Columns</SectionTitle>\n <Styled.Menu ref={menuRef}>\n {hiddenColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={columnPinning.left?.includes(column.value) || false}\n isHidden={true}\n isHighlighted={highlighted === column.value}\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </Section>\n )}\n\n {/* Drag Overlay */}\n <DragOverlay>\n {activeColumn && (\n <ColumnItem\n column={activeColumn}\n isPinned={columnPinning.left?.includes(activeColumn.value) || false}\n isHidden={columnVisibility[activeColumn.value] === false}\n isHighlighted={highlighted === activeColumn.value}\n dragOverlay={true}\n />\n )}\n </DragOverlay>\n </ColumnsContainer>\n </DndContext>\n )\n}\n\n// Styled components\nconst ColumnsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-large);\n`\n\nconst Section = styled.section`\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: background-color 0.2s ease;\n border-radius: 4px;\n\n &.drop-target {\n background-color: var(--md-sys-color-surface-container);\n box-shadow: 0 0 0 1px var(--md-sys-color-outline);\n }\n`\n\nconst SectionTitle = styled.div`\n font-weight: 500;\n color: var(--md-sys-color-outline);\n padding: 4px 0;\n`\n\nexport default ColumnsSettings\n"],"names":["useColumnSettingsContext","useState","useSensors","useSensor","PointerSensor","useRef","useEffect","useMemo","_a","activeColumn","activeId","toast","arrayMove","jsx","DndContext","closestCenter","jsxs","SortableContext","verticalListSortingStrategy","Styled.Menu","DragOverlay"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnsSettings.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ColumnsSettings.tsx"],"sourcesContent":["// React and Styling imports\nimport { FC, useEffect, useMemo, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport * as Styled from './TableSettings.styled'\n\n// Context and Components imports\nimport {\n ColumnsConfig,\n useColumnSettingsContext,\n} from '@shared/containers/ProjectTreeTable/context/ColumnSettingsContext'\nimport ColumnItem from './ColumnItem'\nimport SortableColumnItem from './SortableColumnItem'\n\n// DND (Drag and Drop) imports\nimport {\n DndContext,\n closestCenter,\n DragEndEvent,\n DragStartEvent,\n useSensor,\n useSensors,\n PointerSensor,\n DragOverlay,\n DragOverEvent,\n} from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy, arrayMove } from '@dnd-kit/sortable'\n\n// Notification imports\nimport { toast } from 'react-toastify'\nimport { SettingsPanelItem } from '../SettingsPanel/SettingsPanelItemTemplate'\nimport { SettingHighlightedId } from '@shared/context'\n\ninterface ColumnsSettingsProps {\n columns: SettingsPanelItem[]\n highlighted?: SettingHighlightedId\n}\n\nconst ColumnsSettings: FC<ColumnsSettingsProps> = ({ columns, highlighted }) => {\n const {\n columnVisibility,\n updateColumnVisibility,\n columnPinning,\n updateColumnPinning,\n columnOrder,\n setColumnsConfig,\n columnSizing,\n groupBy,\n } = useColumnSettingsContext()\n\n // State for the currently dragged column\n const [activeId, setActiveId] = useState<string | null>(null)\n const [isHiddenOverVisible, setIsHiddenOverVisible] = useState(false)\n const [isDraggingOverPinned, setIsDraggingOverPinned] = useState(false)\n const [isDraggingFromPinned, setIsDraggingFromPinned] = useState(false)\n // Add a new state to track if we're hovering over the visible section\n const [isHoveringVisibleSection, setIsHoveringVisibleSection] = useState(false)\n // Add state to track if dragging over the hidden section\n const [isDraggingOverHidden, setIsDraggingOverHidden] = useState(false)\n\n // Setup sensors for dnd-kit\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n )\n\n const menuRef = useRef<HTMLUListElement | null>(null)\n\n // if highlighted is set, scroll to the highlighted column\n useEffect(() => {\n if (menuRef.current && highlighted) {\n const highlightedElement = menuRef.current.querySelector(`#column-settings-${highlighted}`)\n if (highlightedElement) {\n highlightedElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }\n }, [highlighted])\n\n // Separate columns into visible, hidden, and pinned\n const { visibleColumns, hiddenColumns, pinnedColumns } = useMemo(() => {\n // First filter columns by visibility\n const visible = columns.filter((col) => columnVisibility[col.value] !== false)\n const hidden = columns.filter((col) => columnVisibility[col.value] === false)\n\n // Then separate out pinned columns from visible\n const pinned = visible.filter((col) => columnPinning.left?.includes(col.value))\n const unpinnedVisible = visible.filter((col) => !columnPinning.left?.includes(col.value))\n\n return {\n visibleColumns: unpinnedVisible,\n hiddenColumns: hidden,\n pinnedColumns: pinned,\n }\n }, [columns, columnVisibility, columnPinning])\n\n // Sort columns based on columnOrder\n const sortedVisibleColumns = useMemo(() => {\n // Create a copy of visible columns\n const visibleCopy = [...visibleColumns]\n\n // If we have a column order, use it to sort\n if (columnOrder.length > 0) {\n visibleCopy.sort((a, b) => {\n const indexA = columnOrder.indexOf(a.value)\n const indexB = columnOrder.indexOf(b.value)\n\n // If column is not in order array, place at end\n if (indexA === -1) return 1\n if (indexB === -1) return -1\n\n return indexA - indexB\n })\n }\n\n return visibleCopy\n }, [visibleColumns, columnOrder])\n\n // Sort pinned columns based on columnOrder\n const sortedPinnedColumns = useMemo(() => {\n // Create a copy of pinned columns\n const pinnedCopy = [...pinnedColumns]\n\n // If we have a column order, use it to sort\n if (columnOrder.length > 0) {\n pinnedCopy.sort((a, b) => {\n const indexA = columnOrder.indexOf(a.value)\n const indexB = columnOrder.indexOf(b.value)\n\n // If column is not in order array, place at end\n if (indexA === -1) return 1\n if (indexB === -1) return -1\n\n return indexA - indexB\n })\n }\n\n return pinnedCopy\n }, [pinnedColumns, columnOrder])\n\n const sortedVisibleColumnsIds = useMemo(\n () => sortedVisibleColumns.map((col) => col.value),\n [sortedVisibleColumns],\n )\n\n const sortedPinnedColumnsIds = useMemo(\n () => sortedPinnedColumns.map((col) => col.value),\n [sortedPinnedColumns],\n )\n\n // Toggle column visibility\n const toggleVisibility = (columnId: string) => {\n const newState = { ...columnVisibility }\n // If column is currently visible, hide it\n if (newState[columnId] !== false) {\n newState[columnId] = false\n } else {\n // If column is currently hidden, show it\n newState[columnId] = true\n }\n updateColumnVisibility(newState)\n }\n\n // Toggle column pinning\n const togglePinning = (columnId: string) => {\n const newState = { ...columnPinning }\n const newVisibility = { ...columnVisibility }\n\n // If column is currently pinned, unpin it\n if (newState.left?.includes(columnId)) {\n newState.left = newState.left.filter((id) => id !== columnId)\n } else {\n // If column is currently unpinned, pin it\n newState.left = [...(newState.left || []), columnId]\n // If column is hidden, show it\n if (newVisibility[columnId] === false) {\n newVisibility[columnId] = true\n updateColumnVisibility(newVisibility)\n }\n }\n updateColumnPinning(newState)\n }\n\n // When drag starts\n const handleDragStart = (event: DragStartEvent) => {\n const id = event.active.id as string\n setActiveId(id)\n setIsDraggingFromPinned(columnPinning.left?.includes(id) || false)\n }\n\n // Track when dragging over different sections\n const handleDragOver = (event: DragOverEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n // Check if we're dragging a hidden column over a visible column\n const isActiveHidden = columnVisibility[active.id as string] === false\n const isOverVisible = columnVisibility[over.id as string] !== false\n const isOverPinned = columnPinning.left?.includes(over.id as string) || false\n const isOverHidden = columnVisibility[over.id as string] === false\n\n setIsHiddenOverVisible(isActiveHidden && isOverVisible && !isOverPinned)\n setIsDraggingOverPinned(isOverVisible && isOverPinned)\n setIsDraggingOverHidden(isOverHidden)\n\n // Set if we're hovering over the visible (unpinned) section\n setIsHoveringVisibleSection(isOverVisible && !isOverPinned)\n } else {\n // Reset when not over any column\n setIsHoveringVisibleSection(false)\n setIsDraggingOverHidden(false)\n }\n }\n\n // When drag ends, reset all states\n const handleDragEnd = (event: DragEndEvent) => {\n // Reset states\n setIsHiddenOverVisible(false)\n setIsDraggingOverPinned(false)\n setIsDraggingFromPinned(false)\n setIsHoveringVisibleSection(false)\n setIsDraggingOverHidden(false)\n\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n // Find the dragged column and target column\n const activeColumn = [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find(\n (col) => col.value === active.id,\n )\n const overColumn = [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find(\n (col) => col.value === over.id,\n )\n\n if (activeColumn && overColumn) {\n const activeId = active.id as string\n const overId = over.id as string\n const isActiveVisible = columnVisibility[activeId] !== false\n const isOverVisible = columnVisibility[overId] !== false\n const isActivePinned = columnPinning.left?.includes(activeId) || false\n const isOverPinned = columnPinning.left?.includes(overId) || false\n const isOverHidden = columnVisibility[overId] === false\n\n // Create a new config object that we'll update and apply at the end\n const newConfig: ColumnsConfig = {\n columnVisibility: { ...columnVisibility },\n columnOrder: [...columnOrder],\n columnPinning: { ...columnPinning },\n columnSizing: { ...columnSizing },\n }\n\n // If we're moving a column between visible columns (including pinned)\n if (isActiveVisible && isOverVisible) {\n let newPinningLeft = [...(newConfig.columnPinning.left || [])]\n\n // Handle pinning/unpinning based on target section\n if (isActivePinned !== isOverPinned) {\n if (isActivePinned && !isOverPinned) {\n // Moving from pinned to unpinned section\n newPinningLeft = newPinningLeft.filter((id) => id !== activeId)\n } else if (!isActivePinned && isOverPinned) {\n // Moving from unpinned to pinned section\n newPinningLeft = [...newPinningLeft, activeId]\n }\n }\n\n // Update order within the appropriate section\n const allVisibleIds = [...sortedPinnedColumnsIds, ...sortedVisibleColumnsIds]\n const oldIndex = allVisibleIds.indexOf(activeId)\n const newIndex = allVisibleIds.indexOf(overId)\n\n if (oldIndex === -1 || newIndex === -1) {\n console.error('Invalid column order state')\n toast.error('Invalid column order state')\n return\n }\n\n const newOrder = arrayMove(allVisibleIds, oldIndex, newIndex)\n\n // new pinning left should be ordered by the new order\n const newPinningLeftOrdered = newOrder.filter((id) => newPinningLeft.includes(id))\n\n // Update config object\n newConfig.columnOrder = newOrder\n newConfig.columnPinning = {\n ...newConfig.columnPinning,\n left: newPinningLeftOrdered,\n }\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n\n // If we're dragging from hidden to visible\n else if (!isActiveVisible && isOverVisible) {\n // Make the column visible\n newConfig.columnVisibility[activeId] = true\n\n // If dropping into pinned section, also pin the column\n if (isOverPinned) {\n const newPinningLeft = [...(newConfig.columnPinning.left || []), activeId]\n newConfig.columnPinning.left = newPinningLeft\n }\n\n // Update order to place it near the over column\n const allVisibleIds = [...sortedPinnedColumnsIds, ...sortedVisibleColumnsIds]\n\n // Add the column to order if not already there\n if (!allVisibleIds.includes(activeId)) {\n const overIndex = allVisibleIds.indexOf(overId)\n allVisibleIds.splice(overIndex, 0, activeId)\n }\n\n newConfig.columnOrder = allVisibleIds\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n\n // If we're dragging from visible to hidden\n else if (isActiveVisible && isOverHidden) {\n // Make the active column hidden\n newConfig.columnVisibility[activeId] = false\n\n // If the column was pinned, remove it from pinned\n if (isActivePinned) {\n const newPinningLeft = (newConfig.columnPinning.left || []).filter(\n (id) => id !== activeId,\n )\n newConfig.columnPinning.left = newPinningLeft\n }\n\n // Apply all changes at once\n setColumnsConfig(newConfig)\n }\n }\n }\n\n setActiveId(null)\n }\n\n // Find the active column for the drag overlay\n const activeColumn = activeId\n ? [...visibleColumns, ...hiddenColumns, ...pinnedColumns].find((col) => col.value === activeId)\n : null\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <ColumnsContainer>\n {/* Pinned Columns Section */}\n {pinnedColumns.length > 0 && (\n <Section className={isDraggingOverPinned && !isDraggingFromPinned ? 'drop-target' : ''}>\n <SectionTitle>Pinned Columns</SectionTitle>\n <SortableContext\n items={sortedPinnedColumns.map((col) => col.value)}\n strategy={verticalListSortingStrategy}\n >\n <Styled.Menu>\n {sortedPinnedColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={true}\n isHidden={false}\n isDisabled={!!groupBy && column.value === 'name'} // Disable 'name' column if grouping is enabled\n isHighlighted={highlighted === column.value}\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </SortableContext>\n </Section>\n )}\n\n {/* Visible Columns Section */}\n <Section\n className={\n isHiddenOverVisible || (isDraggingFromPinned && isHoveringVisibleSection)\n ? 'drop-target'\n : ''\n }\n >\n <SectionTitle>Visible Columns</SectionTitle>\n <SortableContext\n items={sortedVisibleColumns.map((col) => col.value)}\n strategy={verticalListSortingStrategy}\n >\n <Styled.Menu>\n {sortedVisibleColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={false}\n isHidden={false}\n isHighlighted={highlighted === column.value}\n isDisabled={!!groupBy && column.value === 'name'} // Disable 'name' column if grouping is enabled\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </SortableContext>\n </Section>\n\n {/* Hidden Columns Section */}\n {hiddenColumns.length > 0 && (\n <Section className={isDraggingOverHidden ? 'drop-target' : ''}>\n <SectionTitle>Hidden Columns</SectionTitle>\n <Styled.Menu ref={menuRef}>\n {hiddenColumns.map((column) => (\n <SortableColumnItem\n key={column.value}\n id={column.value}\n column={column}\n isPinned={columnPinning.left?.includes(column.value) || false}\n isHidden={true}\n isHighlighted={highlighted === column.value}\n isDisabled={!!groupBy && column.value === 'name'} // Disable 'name' column if grouping is enabled\n onTogglePinning={togglePinning}\n onToggleVisibility={toggleVisibility}\n />\n ))}\n </Styled.Menu>\n </Section>\n )}\n\n {/* Drag Overlay */}\n <DragOverlay>\n {activeColumn && (\n <ColumnItem\n column={activeColumn}\n isPinned={columnPinning.left?.includes(activeColumn.value) || false}\n isHidden={columnVisibility[activeColumn.value] === false}\n isHighlighted={highlighted === activeColumn.value}\n dragOverlay={true}\n />\n )}\n </DragOverlay>\n </ColumnsContainer>\n </DndContext>\n )\n}\n\n// Styled components\nconst ColumnsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-large);\n`\n\nconst Section = styled.section`\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: background-color 0.2s ease;\n border-radius: 4px;\n\n &.drop-target {\n background-color: var(--md-sys-color-surface-container);\n box-shadow: 0 0 0 1px var(--md-sys-color-outline);\n }\n`\n\nconst SectionTitle = styled.div`\n font-weight: 500;\n color: var(--md-sys-color-outline);\n padding: 4px 0;\n`\n\nexport default ColumnsSettings\n"],"names":["useColumnSettingsContext","useState","useSensors","useSensor","PointerSensor","useRef","useEffect","useMemo","_a","activeColumn","activeId","toast","arrayMove","jsx","DndContext","closestCenter","jsxs","SortableContext","verticalListSortingStrategy","Styled.Menu","DragOverlay"],"mappings":"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"}