@ynput/ayon-frontend-shared 0.2.15 → 0.2.16

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 (519) hide show
  1. package/dist/DetailsPanel.cjs.js +3 -0
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +3 -0
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +34 -1
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +36 -3
  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 +3 -5
  13. package/dist/_virtual/index.cjs5.js.map +1 -1
  14. package/dist/_virtual/index.cjs6.js +5 -3
  15. package/dist/_virtual/index.cjs6.js.map +1 -1
  16. package/dist/_virtual/index.cjs7.js +3 -5
  17. package/dist/_virtual/index.cjs7.js.map +1 -1
  18. package/dist/_virtual/index.cjs8.js +4 -4
  19. package/dist/_virtual/index.cjs9.js +4 -4
  20. package/dist/_virtual/index.es10.js +5 -2
  21. package/dist/_virtual/index.es10.js.map +1 -1
  22. package/dist/_virtual/index.es4.js +4 -4
  23. package/dist/_virtual/index.es5.js +2 -5
  24. package/dist/_virtual/index.es5.js.map +1 -1
  25. package/dist/_virtual/index.es6.js +5 -2
  26. package/dist/_virtual/index.es6.js.map +1 -1
  27. package/dist/_virtual/index.es7.js +2 -5
  28. package/dist/_virtual/index.es7.js.map +1 -1
  29. package/dist/_virtual/index.es8.js +4 -4
  30. package/dist/_virtual/index.es9.js +4 -4
  31. package/dist/api.cjs.js +6 -1
  32. package/dist/api.cjs.js.map +1 -1
  33. package/dist/api.es.js +8 -3
  34. package/dist/api.es.js.map +1 -1
  35. package/dist/components.cjs.js +3 -0
  36. package/dist/components.cjs.js.map +1 -1
  37. package/dist/components.es.js +3 -0
  38. package/dist/components.es.js.map +1 -1
  39. package/dist/index.cjs.js +3 -0
  40. package/dist/index.cjs.js.map +1 -1
  41. package/dist/index.es.js +3 -0
  42. package/dist/index.es.js.map +1 -1
  43. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  44. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  45. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  46. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  47. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  48. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  49. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  50. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  51. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  52. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  53. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  54. package/dist/node_modules/remove-accents/index.es.js +1 -1
  55. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  56. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  57. package/dist/shared/src/api/generated/graphql.cjs.js +24 -0
  58. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/graphql.es.js +24 -0
  60. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  61. package/dist/shared/src/api/generated/grouping.cjs.js +18 -0
  62. package/dist/shared/src/api/generated/grouping.cjs.js.map +1 -0
  63. package/dist/shared/src/api/generated/grouping.es.js +18 -0
  64. package/dist/shared/src/api/generated/grouping.es.js.map +1 -0
  65. package/dist/shared/src/api/generated/tasks.cjs.js +0 -8
  66. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  67. package/dist/shared/src/api/generated/tasks.es.js +0 -8
  68. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  69. package/dist/shared/src/api/queries/actions/getActions.cjs.js +1 -0
  70. package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
  71. package/dist/shared/src/api/queries/actions/getActions.es.js +1 -0
  72. package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
  73. package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -0
  74. package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
  75. package/dist/shared/src/api/queries/activities/getActivities.es.js +1 -0
  76. package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
  77. package/dist/shared/src/api/queries/activities/getMentions.cjs.js +1 -0
  78. package/dist/shared/src/api/queries/activities/getMentions.cjs.js.map +1 -1
  79. package/dist/shared/src/api/queries/activities/getMentions.es.js +1 -0
  80. package/dist/shared/src/api/queries/activities/getMentions.es.js.map +1 -1
  81. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js +1 -0
  82. package/dist/shared/src/api/queries/activities/updateReaction.cjs.js.map +1 -1
  83. package/dist/shared/src/api/queries/activities/updateReaction.es.js +1 -0
  84. package/dist/shared/src/api/queries/activities/updateReaction.es.js.map +1 -1
  85. package/dist/shared/src/api/queries/addons/getAddons.cjs.js +1 -0
  86. package/dist/shared/src/api/queries/addons/getAddons.cjs.js.map +1 -1
  87. package/dist/shared/src/api/queries/addons/getAddons.es.js +1 -0
  88. package/dist/shared/src/api/queries/addons/getAddons.es.js.map +1 -1
  89. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js +1 -0
  90. package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
  91. package/dist/shared/src/api/queries/attributes/getAttributes.es.js +1 -0
  92. package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
  93. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js +1 -0
  94. package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js.map +1 -1
  95. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js +1 -0
  96. package/dist/shared/src/api/queries/authentication/getAuthentication.es.js.map +1 -1
  97. package/dist/shared/src/api/queries/entities/getEntity.cjs.js +1 -0
  98. package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
  99. package/dist/shared/src/api/queries/entities/getEntity.es.js +1 -0
  100. package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
  101. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -0
  102. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  103. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -0
  104. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  105. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +2 -0
  106. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  107. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +2 -0
  108. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  109. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  110. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  111. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  112. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  113. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -0
  114. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  115. package/dist/shared/src/api/queries/entityLists/getLists.es.js +1 -0
  116. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  117. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +1 -0
  118. package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -1
  119. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +1 -0
  120. package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -1
  121. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -0
  122. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  123. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +1 -0
  124. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  125. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -0
  126. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  127. package/dist/shared/src/api/queries/folders/getFolders.es.js +1 -0
  128. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  129. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +47 -0
  130. package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -0
  131. package/dist/shared/src/api/queries/grouping/getGrouping.es.js +47 -0
  132. package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -0
  133. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +4 -5
  134. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  135. package/dist/shared/src/api/queries/overview/getOverview.es.js +4 -5
  136. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  137. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
  138. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  139. package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
  140. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  141. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js +1 -0
  142. package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js.map +1 -1
  143. package/dist/shared/src/api/queries/permissions/getPermissions.es.js +1 -0
  144. package/dist/shared/src/api/queries/permissions/getPermissions.es.js.map +1 -1
  145. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -0
  146. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  147. package/dist/shared/src/api/queries/project/getProject.es.js +1 -0
  148. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  149. package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -0
  150. package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
  151. package/dist/shared/src/api/queries/review/getReview.es.js +1 -0
  152. package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
  153. package/dist/shared/src/api/queries/review/updateReview.cjs.js +1 -0
  154. package/dist/shared/src/api/queries/review/updateReview.cjs.js.map +1 -1
  155. package/dist/shared/src/api/queries/review/updateReview.es.js +1 -0
  156. package/dist/shared/src/api/queries/review/updateReview.es.js.map +1 -1
  157. package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -0
  158. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  159. package/dist/shared/src/api/queries/system/getSystem.es.js +1 -0
  160. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  161. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -0
  162. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  163. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -0
  164. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  165. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
  166. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  167. package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
  168. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  169. package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -0
  170. package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
  171. package/dist/shared/src/api/queries/users/updateUsers.es.js +1 -0
  172. package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
  173. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js +1 -0
  174. package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
  175. package/dist/shared/src/api/queries/watchers/getWatchers.es.js +1 -0
  176. package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
  177. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +2 -2
  178. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  179. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +2 -2
  180. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  181. package/dist/shared/src/components/Badge/Badge.cjs.js +31 -0
  182. package/dist/shared/src/components/Badge/Badge.cjs.js.map +1 -0
  183. package/dist/shared/src/components/Badge/Badge.es.js +31 -0
  184. package/dist/shared/src/components/Badge/Badge.es.js.map +1 -0
  185. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  186. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  187. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  188. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  189. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
  190. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  191. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
  192. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  193. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +3 -0
  194. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  195. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +3 -0
  196. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  197. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +138 -3
  198. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  199. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +138 -3
  200. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  201. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js +5 -1
  202. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js.map +1 -1
  203. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js +5 -1
  204. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js.map +1 -1
  205. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js +5 -5
  206. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js.map +1 -1
  207. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js +5 -5
  208. package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js.map +1 -1
  209. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  210. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  211. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  212. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  213. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +93 -79
  214. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  215. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +93 -79
  216. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  217. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +87 -17
  218. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  219. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +88 -18
  220. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  221. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js +4 -0
  222. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js.map +1 -1
  223. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js +4 -0
  224. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js.map +1 -1
  225. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +3 -0
  226. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  227. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +3 -0
  228. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  229. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  230. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  231. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  232. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  233. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +223 -19
  234. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  235. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +224 -20
  236. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  237. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  238. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  239. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  240. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  241. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +3 -0
  242. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  243. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -0
  244. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  245. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  246. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  247. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  248. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  249. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +3 -0
  250. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -0
  252. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  253. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +22 -0
  254. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +22 -0
  256. package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
  257. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js +26 -7
  258. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js +26 -7
  260. package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js.map +1 -1
  261. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +3 -0
  262. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +3 -0
  264. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  265. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +13 -10
  266. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +13 -10
  268. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  269. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +3 -0
  270. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +3 -0
  272. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  273. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +3 -0
  274. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +3 -0
  276. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  277. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  278. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  280. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  281. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  282. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  284. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  285. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  286. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +1 -1
  288. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  289. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js +8 -1
  290. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js +9 -2
  292. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js.map +1 -1
  293. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +9 -0
  294. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +10 -1
  296. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  298. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  300. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  302. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  304. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  305. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +25 -26
  306. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +26 -27
  308. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  309. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +7 -0
  310. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +7 -0
  312. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +9 -8
  314. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -8
  316. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +3 -0
  318. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +3 -0
  320. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +11 -6
  322. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +11 -6
  324. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  326. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  328. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +33 -9
  330. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +34 -10
  332. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +37 -16
  334. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +38 -17
  336. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  338. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  339. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  340. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  341. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +84 -34
  342. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +85 -35
  344. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  346. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +1 -1
  348. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +26 -13
  350. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +26 -13
  352. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +24 -0
  354. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +1 -0
  355. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +24 -0
  356. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +1 -0
  357. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +16 -9
  358. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +16 -9
  360. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  361. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js +17 -0
  362. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js.map +1 -0
  363. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js +17 -0
  364. package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js.map +1 -0
  365. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js +30 -0
  366. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js.map +1 -0
  367. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js +30 -0
  368. package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js.map +1 -0
  369. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +363 -0
  370. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -0
  371. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +363 -0
  372. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -0
  373. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +16 -12
  374. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +16 -13
  376. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +239 -0
  378. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -0
  379. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +239 -0
  380. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -0
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +82 -0
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -0
  383. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +82 -0
  384. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -0
  385. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +40 -0
  386. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -0
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +40 -0
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -0
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js +19 -0
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js.map +1 -0
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js +19 -0
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js.map +1 -0
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +26 -0
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -0
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +26 -0
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -0
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +7 -4
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +7 -4
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  401. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +12 -1
  402. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  403. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +12 -1
  404. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  405. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
  406. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js +8 -0
  408. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js.map +1 -0
  409. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js +8 -0
  410. package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js.map +1 -0
  411. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js +7 -0
  412. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js.map +1 -0
  413. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js +7 -0
  414. package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js.map +1 -0
  415. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +0 -1
  416. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
  417. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +0 -1
  418. package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
  419. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +2 -1
  420. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  421. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +2 -1
  422. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  423. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +0 -8
  424. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  425. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +0 -8
  426. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  427. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +3 -0
  428. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  429. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -0
  430. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  431. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  432. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  433. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  434. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  435. package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
  436. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  437. package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
  438. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  439. package/dist/shared/src/context/PowerpackContext.cjs.js +122 -17
  440. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  441. package/dist/shared/src/context/PowerpackContext.es.js +123 -18
  442. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  443. package/dist/shared/src/context/RemoteModulesContext.cjs.js +7 -1
  444. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  445. package/dist/shared/src/context/RemoteModulesContext.es.js +8 -2
  446. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  447. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  448. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  449. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  450. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  451. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  452. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  453. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  454. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  455. package/dist/shared/src/hooks/useLoadModule.cjs.js +8 -2
  456. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  457. package/dist/shared/src/hooks/useLoadModule.es.js +8 -2
  458. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  459. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  460. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  461. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  462. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  463. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  464. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  465. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  466. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  467. package/dist/types/api/generated/graphql.d.ts +33 -38
  468. package/dist/types/api/generated/grouping.d.ts +40 -0
  469. package/dist/types/api/generated/index.d.ts +3 -1
  470. package/dist/types/api/generated/tasks.d.ts +8 -33
  471. package/dist/types/api/queries/activities/getActivities.d.ts +4 -0
  472. package/dist/types/api/queries/activities/updateActivities.d.ts +8 -0
  473. package/dist/types/api/queries/entities/getEntity.d.ts +4 -0
  474. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -0
  475. package/dist/types/api/queries/entities/updateEntity.d.ts +4 -0
  476. package/dist/types/api/queries/entityLists/getLists.d.ts +4 -0
  477. package/dist/types/api/queries/grouping/getGrouping.d.ts +137 -0
  478. package/dist/types/api/queries/grouping/index.d.ts +1 -0
  479. package/dist/types/api/queries/index.d.ts +1 -0
  480. package/dist/types/api/queries/overview/getOverview.d.ts +5 -133
  481. package/dist/types/api/queries/project/getProject.d.ts +2 -2
  482. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -0
  483. package/dist/types/api/queries/users/getUsers.d.ts +4 -0
  484. package/dist/types/components/Badge/Badge.d.ts +10 -0
  485. package/dist/types/components/Badge/index.d.ts +1 -0
  486. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +1 -1
  487. package/dist/types/components/ReviewableProgressCard/ReviewableProgressCard.d.ts +1 -1
  488. package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +19 -3
  489. package/dist/types/components/index.d.ts +1 -0
  490. package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +4 -0
  491. package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +2 -1
  492. package/dist/types/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.d.ts +1 -0
  493. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -5
  494. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +14 -3
  495. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +22 -2
  496. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +13 -0
  497. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +8 -3
  498. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +13 -2
  499. package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +12 -0
  500. package/dist/types/containers/ProjectTreeTable/hooks/useEntitiesMap.d.ts +7 -0
  501. package/dist/types/containers/ProjectTreeTable/hooks/useExpandedState.d.ts +11 -0
  502. package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +37 -0
  503. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
  504. package/dist/types/containers/ProjectTreeTable/hooks/useGetGroupedFields.d.ts +9 -0
  505. package/dist/types/containers/ProjectTreeTable/hooks/useGetTaskGroups.d.ts +10 -0
  506. package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +14 -0
  507. package/dist/types/containers/ProjectTreeTable/hooks/useScopedAttributeFields.d.ts +10 -0
  508. package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +10 -0
  509. package/dist/types/containers/ProjectTreeTable/index.d.ts +1 -4
  510. package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
  511. package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +46 -0
  512. package/dist/types/containers/ProjectTreeTable/utils/errorExtraction.d.ts +4 -0
  513. package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
  514. package/dist/types/containers/ProjectTreeTable/utils/localStorageKeys.d.ts +4 -0
  515. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +2 -1
  516. package/dist/types/context/PowerpackContext.d.ts +2 -1
  517. package/dist/types/hooks/useLoadModule.d.ts +2 -1
  518. package/dist/types/utils/extractVersionFromFilename.d.ts +5 -0
  519. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"updateUsers.es.js","sources":["../../../../../../src/api/queries/users/updateUsers.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport { usersApi } from '@shared/api/generated'\n\nconst updateUserApi = usersApi.enhanceEndpoints({\n endpoints: {\n deleteUser: {\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n },\n setFrontendPreferences: {\n // @ts-expect-error - disableInvalidations is not in the api\n invalidatesTags: (_result, _error, { userName, disableInvalidations }) =>\n !disableInvalidations ? [{ type: 'user', id: userName }, 'info'] : [],\n async onQueryStarted({ patchData }, { dispatch, queryFulfilled, getState }) {\n // get current preferences\n\n // optimistic update the user cache\n const patch = dispatch(\n usersApi.util.updateQueryData('getCurrentUser', undefined, (draft) => {\n if (draft?.data) {\n draft.data.frontendPreferences = { ...draft.data.frontendPreferences, ...patchData }\n }\n }),\n )\n try {\n await queryFulfilled\n } catch {\n // rollback the optimistic update if the query fails\n patch.undo()\n }\n }, // onQueryStarted\n },\n },\n})\n\nconst updateUser = updateUserApi.injectEndpoints({\n endpoints: (build) => ({\n updateUser: build.mutation({\n query: ({ name, patch }) => ({\n url: `/api/users/${name}`,\n method: 'PATCH',\n body: patch,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n { type: 'userPool', id: 'LIST' },\n { type: 'feedback', id: 'LIST' },\n 'info',\n ],\n }),\n updateUserName: build.mutation({\n query: ({ name, newName }) => ({\n url: `/api/users/${name}/rename`,\n method: 'PATCH',\n body: { newName },\n }),\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n ],\n transformErrorResponse: (res) => res.data,\n }),\n updateUserPassword: build.mutation({\n query: ({ name, password }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { password },\n }),\n invalidatesTags: () => ['user'],\n transformErrorResponse: (res) => res.data,\n }),\n addUser: build.mutation({\n query: ({ name, user }) => ({\n url: `/api/users/${name}`,\n method: 'PUT',\n body: user,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: [{ type: 'user', id: 'LIST' }],\n }),\n updateUserAPIKey: build.mutation({\n query: ({ name, apiKey }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { apiKey },\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n }),\n invalidateUserSession: build.mutation({\n query: ({ name, token }) => ({\n url: `/api/users/${name}/sessions/${token}`,\n method: 'DELETE',\n }),\n invalidatesTags: (_res, _err, { token }) => [{ type: 'session', id: token }],\n }),\n }),\n overrideExisting: true,\n})\n\nconst updateUser2 = updateUser.injectEndpoints({\n endpoints: (build) => ({\n // update multiple users at once\n updateUsers: build.mutation<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any[],\n { name: string; patch: object }[]\n >({\n //\n queryFn: async (updates, { dispatch }) => {\n const results = await Promise.all(\n updates.map(({ name, patch }: { name: string; patch: object }) => {\n return dispatch(updateUser.endpoints.updateUser.initiate({ name, patch }))\n }),\n )\n\n // Check if any of the results have an error\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const firstError = results.find((result: any) => result.error)\n if (firstError) {\n return { error: firstError.error as FetchBaseQueryError }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { data: results.map((result: any) => result.data) }\n },\n }),\n }),\n})\n\nexport const {\n useUpdateUserMutation,\n useUpdateUsersMutation,\n useUpdateUserNameMutation,\n useUpdateUserPasswordMutation,\n useAddUserMutation,\n useDeleteUserMutation,\n useUpdateUserAPIKeyMutation,\n useInvalidateUserSessionMutation,\n useSetFrontendPreferencesMutation,\n} = updateUser2\nexport { updateUser2 as userQueries }\n"],"names":["usersApi"],"mappings":"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"}
1
+ {"version":3,"file":"updateUsers.es.js","sources":["../../../../../../src/api/queries/users/updateUsers.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport { usersApi } from '@shared/api/generated'\n\nconst updateUserApi = usersApi.enhanceEndpoints({\n endpoints: {\n deleteUser: {\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n },\n setFrontendPreferences: {\n // @ts-expect-error - disableInvalidations is not in the api\n invalidatesTags: (_result, _error, { userName, disableInvalidations }) =>\n !disableInvalidations ? [{ type: 'user', id: userName }, 'info'] : [],\n async onQueryStarted({ patchData }, { dispatch, queryFulfilled, getState }) {\n // get current preferences\n\n // optimistic update the user cache\n const patch = dispatch(\n usersApi.util.updateQueryData('getCurrentUser', undefined, (draft) => {\n if (draft?.data) {\n draft.data.frontendPreferences = { ...draft.data.frontendPreferences, ...patchData }\n }\n }),\n )\n try {\n await queryFulfilled\n } catch {\n // rollback the optimistic update if the query fails\n patch.undo()\n }\n }, // onQueryStarted\n },\n },\n})\n\nconst updateUser = updateUserApi.injectEndpoints({\n endpoints: (build) => ({\n updateUser: build.mutation({\n query: ({ name, patch }) => ({\n url: `/api/users/${name}`,\n method: 'PATCH',\n body: patch,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n { type: 'userPool', id: 'LIST' },\n { type: 'feedback', id: 'LIST' },\n 'info',\n ],\n }),\n updateUserName: build.mutation({\n query: ({ name, newName }) => ({\n url: `/api/users/${name}/rename`,\n method: 'PATCH',\n body: { newName },\n }),\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n ],\n transformErrorResponse: (res) => res.data,\n }),\n updateUserPassword: build.mutation({\n query: ({ name, password }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { password },\n }),\n invalidatesTags: () => ['user'],\n transformErrorResponse: (res) => res.data,\n }),\n addUser: build.mutation({\n query: ({ name, user }) => ({\n url: `/api/users/${name}`,\n method: 'PUT',\n body: user,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: [{ type: 'user', id: 'LIST' }],\n }),\n updateUserAPIKey: build.mutation({\n query: ({ name, apiKey }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { apiKey },\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n }),\n invalidateUserSession: build.mutation({\n query: ({ name, token }) => ({\n url: `/api/users/${name}/sessions/${token}`,\n method: 'DELETE',\n }),\n invalidatesTags: (_res, _err, { token }) => [{ type: 'session', id: token }],\n }),\n }),\n overrideExisting: true,\n})\n\nconst updateUser2 = updateUser.injectEndpoints({\n endpoints: (build) => ({\n // update multiple users at once\n updateUsers: build.mutation<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any[],\n { name: string; patch: object }[]\n >({\n //\n queryFn: async (updates, { dispatch }) => {\n const results = await Promise.all(\n updates.map(({ name, patch }: { name: string; patch: object }) => {\n return dispatch(updateUser.endpoints.updateUser.initiate({ name, patch }))\n }),\n )\n\n // Check if any of the results have an error\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const firstError = results.find((result: any) => result.error)\n if (firstError) {\n return { error: firstError.error as FetchBaseQueryError }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { data: results.map((result: any) => result.data) }\n },\n }),\n }),\n})\n\nexport const {\n useUpdateUserMutation,\n useUpdateUsersMutation,\n useUpdateUserNameMutation,\n useUpdateUserPasswordMutation,\n useAddUserMutation,\n useDeleteUserMutation,\n useUpdateUserAPIKeyMutation,\n useInvalidateUserSessionMutation,\n useSetFrontendPreferencesMutation,\n} = updateUser2\nexport { updateUser2 as userQueries }\n"],"names":["usersApi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAM,gBAAgBA,eAAS,iBAAiB;AAAA,EAC9C,WAAW;AAAA,IACT,YAAY;AAAA,MACV,wBAAwB,CAAC,QAAQ,IAAI;AAAA,MACrC,iBAAiB,MAAM,CAAC,EAAE,MAAM,QAAQ,IAAI,OAAQ,CAAA;AAAA,IACtD;AAAA,IACA,wBAAwB;AAAA;AAAA,MAEtB,iBAAiB,CAAC,SAAS,QAAQ,EAAE,UAAU,2BAC7C,CAAC,uBAAuB,CAAC,EAAE,MAAM,QAAQ,IAAI,SAAY,GAAA,MAAM,IAAI,CAAC;AAAA,MACtE,MAAM,eAAe,EAAE,aAAa,EAAE,UAAU,gBAAgB,YAAY;AAI1E,cAAM,QAAQ;AAAA,UACZA,eAAS,KAAK,gBAAgB,kBAAkB,QAAW,CAAC,UAAU;AACpE,gBAAI,+BAAO,MAAM;AACT,oBAAA,KAAK,sBAAsB,EAAE,GAAG,MAAM,KAAK,qBAAqB,GAAG,UAAU;AAAA,YAAA;AAAA,UAEtF,CAAA;AAAA,QACH;AACI,YAAA;AACI,gBAAA;AAAA,QAAA,QACA;AAEN,gBAAM,KAAK;AAAA,QAAA;AAAA,MACb;AAAA;AAAA,IACF;AAAA,EACF;AAEJ,CAAC;AAED,MAAM,aAAa,cAAc,gBAAgB;AAAA,EAC/C,WAAW,CAAC,WAAW;AAAA,IACrB,YAAY,MAAM,SAAS;AAAA,MACzB,OAAO,CAAC,EAAE,MAAM,aAAa;AAAA,QAC3B,KAAK,cAAc,IAAI;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,MAER,wBAAwB,CAAC,QAAQ,IAAI;AAAA,MACrC,iBAAiB,CAAC,SAAS,QAAQ,EAAE,WAAW;AAAA,QAC9C,EAAE,MAAM,QAAQ,IAAI,KAAK;AAAA,QACzB,EAAE,MAAM,QAAQ,IAAI,OAAO;AAAA,QAC3B,EAAE,MAAM,YAAY,IAAI,OAAO;AAAA,QAC/B,EAAE,MAAM,YAAY,IAAI,OAAO;AAAA,QAC/B;AAAA,MAAA;AAAA,IACF,CACD;AAAA,IACD,gBAAgB,MAAM,SAAS;AAAA,MAC7B,OAAO,CAAC,EAAE,MAAM,eAAe;AAAA,QAC7B,KAAK,cAAc,IAAI;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM,EAAE,QAAQ;AAAA,MAAA;AAAA,MAElB,iBAAiB,CAAC,SAAS,QAAQ,EAAE,WAAW;AAAA,QAC9C,EAAE,MAAM,QAAQ,IAAI,KAAK;AAAA,QACzB,EAAE,MAAM,QAAQ,IAAI,OAAO;AAAA,MAC7B;AAAA,MACA,wBAAwB,CAAC,QAAQ,IAAI;AAAA,IAAA,CACtC;AAAA,IACD,oBAAoB,MAAM,SAAS;AAAA,MACjC,OAAO,CAAC,EAAE,MAAM,gBAAgB;AAAA,QAC9B,KAAK,cAAc,IAAI;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM,EAAE,SAAS;AAAA,MAAA;AAAA,MAEnB,iBAAiB,MAAM,CAAC,MAAM;AAAA,MAC9B,wBAAwB,CAAC,QAAQ,IAAI;AAAA,IAAA,CACtC;AAAA,IACD,SAAS,MAAM,SAAS;AAAA,MACtB,OAAO,CAAC,EAAE,MAAM,YAAY;AAAA,QAC1B,KAAK,cAAc,IAAI;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,MAER,wBAAwB,CAAC,QAAQ,IAAI;AAAA,MACrC,iBAAiB,CAAC,EAAE,MAAM,QAAQ,IAAI,OAAQ,CAAA;AAAA,IAAA,CAC/C;AAAA,IACD,kBAAkB,MAAM,SAAS;AAAA,MAC/B,OAAO,CAAC,EAAE,MAAM,cAAc;AAAA,QAC5B,KAAK,cAAc,IAAI;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM,EAAE,OAAO;AAAA,MAAA;AAAA,MAEjB,wBAAwB,CAAC,QAAQ,IAAI;AAAA,MACrC,iBAAiB,MAAM,CAAC,EAAE,MAAM,QAAQ,IAAI,OAAQ,CAAA;AAAA,IAAA,CACrD;AAAA,IACD,uBAAuB,MAAM,SAAS;AAAA,MACpC,OAAO,CAAC,EAAE,MAAM,aAAa;AAAA,QAC3B,KAAK,cAAc,IAAI,aAAa,KAAK;AAAA,QACzC,QAAQ;AAAA,MAAA;AAAA,MAEV,iBAAiB,CAAC,MAAM,MAAM,EAAE,MAAA,MAAY,CAAC,EAAE,MAAM,WAAW,IAAI,MAAO,CAAA;AAAA,IAC5E,CAAA;AAAA,EAAA;AAAA,EAEH,kBAAkB;AACpB,CAAC;AAEK,MAAA,cAAc,WAAW,gBAAgB;AAAA,EAC7C,WAAW,CAAC,WAAW;AAAA;AAAA,IAErB,aAAa,MAAM,SAIjB;AAAA;AAAA,MAEA,SAAS,OAAO,SAAS,EAAE,eAAe;AAClC,cAAA,UAAU,MAAM,QAAQ;AAAA,UAC5B,QAAQ,IAAI,CAAC,EAAE,MAAM,YAA6C;AACzD,mBAAA,SAAS,WAAW,UAAU,WAAW,SAAS,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,UAC1E,CAAA;AAAA,QACH;AAIA,cAAM,aAAa,QAAQ,KAAK,CAAC,WAAgB,OAAO,KAAK;AAC7D,YAAI,YAAY;AACP,iBAAA,EAAE,OAAO,WAAW,MAA6B;AAAA,QAAA;AAInD,eAAA,EAAE,MAAM,QAAQ,IAAI,CAAC,WAAgB,OAAO,IAAI,EAAE;AAAA,MAAA;AAAA,IAE5D,CAAA;AAAA,EACH;AACF,CAAC;AAEY,MAAA;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI;"}
@@ -35,6 +35,7 @@ require("../../generated/users.cjs.js");
35
35
  require("../../generated/versions.cjs.js");
36
36
  require("../../generated/workfiles.cjs.js");
37
37
  require("../../generated/ynputCloud.cjs.js");
38
+ require("../../generated/grouping.cjs.js");
38
39
  const enhancedApi = activityFeed.api.enhanceEndpoints({
39
40
  endpoints: {
40
41
  getEntityWatchers: {},
@@ -1 +1 @@
1
- {"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"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"}
1
+ {"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"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"}
@@ -33,6 +33,7 @@ import "../../generated/users.es.js";
33
33
  import "../../generated/versions.es.js";
34
34
  import "../../generated/workfiles.es.js";
35
35
  import "../../generated/ynputCloud.es.js";
36
+ import "../../generated/grouping.es.js";
36
37
  const enhancedApi = injectedRtkApi.enhanceEndpoints({
37
38
  endpoints: {
38
39
  getEntityWatchers: {},
@@ -1 +1 @@
1
- {"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"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"}
1
+ {"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"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"}
@@ -61,7 +61,7 @@ const initFormData = {
61
61
  description: "",
62
62
  example: "",
63
63
  default: void 0,
64
- enum: [],
64
+ enum: void 0,
65
65
  minLength: void 0,
66
66
  maxLength: void 0,
67
67
  regex: "",
@@ -195,7 +195,7 @@ const AttributeEditor = ({
195
195
  {
196
196
  values: value,
197
197
  onChange: (val) => {
198
- onChange(val);
198
+ onChange((val == null ? void 0 : val.length) ? val : void 0);
199
199
  }
200
200
  }
201
201
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: [],\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["useState","useEffect","jsxs","jsx","Button","Spacer","SaveButton","_a","EnumEditor","InputSwitch","camelCase","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","upperFirst","MinMaxField","_b"],"mappings":";;;;;;;;AAkBA,MAAM,gBAAgB;AAAA,EACpB,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,kBAAkB,OAAO,iBAAiB;AAAA,EACnD,EAAE,OAAO,QAAQ,OAAO,OAAO;AACjC;AAQA,MAAM,gBAAoC;AAAA,EACxC,EAAE,OAAO,eAAe,OAAO,KAAK;AAAA,EACpC,EAAE,OAAO,WAAW,OAAO,KAAK;AAAA;AAAA,EAEhC,EAAE,OAAO,WAAW,OAAO,CAAC,SAAS,EAAE;AAAA,EACvC,EAAE,OAAO,WAAW,OAAO,KAAK;AAClC;AAaA,MAAM,eAA+B;AAAA,EACnC,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,aAAa,aAAa,QAAQ,OAAO;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,EACjC;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC,YAAY,YAAY,MAAM;AAAA,EACzC;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC,SAAS;AAAA,EAAA;AAEvB;AAOA,MAAM,eAA8B;AAAA,EAClC,MAAM;AAAA,EACN,OAAO,CAAC,UAAU,MAAM;AAAA,EACxB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM,CAAC;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAER;AAGA,MAAM,oBAAoB,CAAC,UAAoB,SAAkC;AAE/E,QAAM,WAAW,KAAK,MAAM,KAAK,UAAU,YAAY,CAAC;AAGlD,QAAA,WAAW,CAAC,MAAM;AACxB,SAAO,KAAK,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAEnC,QAAA,CAAC,SAAS,SAAS,GAAG,KACtB,SAAS,SAAS,GAAyC,KAC3D,QAAQ,QACR;AACA,aAAO,SAAS,GAA0B;AAAA,IAAA;AAAA,EAC5C,CACD;AAGK,QAAA,eAAe,CAAC,OAAO;AAC7B,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,SAAS,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACtC,UAAA,CAAC,aAAa,SAAS,GAAG,KAAK,SAAS,SAAS,GAA0B,GAAG;AACzE,eAAA,SAAS,KAAK,GAA0B;AAAA,MAAA;AAAA,IACjD,CACD;AAAA,EAAA;AAIH,MAAI,MAAM;AAER,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACjC,YAAM,WAAW;AACjB,UAAI,aAAa,UAAU,SAAS,SAAS,QAAQ,EAAG;AAExD,UAAI,aAAa,UAAU,KAAK,QAAQ,SAAS,MAAM;AAErD,iBAAS,OAAO,EAAE,GAAG,SAAS,MAAM,GAAG,KAAK,KAAK;AAAA,MACxC,WAAA,KAAK,QAAQ,MAAM,QAAW;AAE9B,iBAAA,QAAQ,IAAI,KAAK,QAAQ;AAAA,MAAA;AAAA,IACpC,CACD;AAAA,EAAA;AAGI,SAAA;AACT;AAaO,MAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,WAAW,CAAC;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AACF,MAAM;;AACJ,QAAM,WAAW,kBAAkB,UAAU,EAAE,UAAU,cAAc,QAAQ;AAC/E,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAA+B,aAAa,QAAQ;AAEpFC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,CAAC,UAAW,aAAY,SAAS;AAAA,EAAA,GACrC,CAAC,SAAS,CAAC;AAEd,QAAM,QAAQ,CAAC;AAGT,QAAA,kBAAkB,CACtB,KACA,UACG;AACH,gBAAY,CAAC,MAAM;AACjB,UAAI,CAAC,GAAG;AACC,eAAA;AAAA,MAAA;AAET,aAAO,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM;AAAA,IAAA,CAC7B;AAAA,EACH;AAGM,QAAA,UAAU,CAAgC,KAAQ,UAA4B;AAClF,gBAAY,CAAC,MAAM;AAEjB,UAAI,CAAC,KAAK,CAAC,EAAE,MAAM;AACV,eAAA;AAAA,MAAA;AAEH,YAAA,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM;AACrC,aAAO,EAAE,GAAG,GAAG,MAAM,GAAG;AAAA,IAAA,CACzB;AAAA,EACH;AAEA,MAAI,gBAAgB;AACpB,MAAI,UAAU;AACZ,QAAI,OAAO;AACT,UAAI,cAAc,SAAS,SAAS,IAAI,EAAmB,iBAAA;AAAA,eAClD,CAAC,SAAS,KAAK,MAAM,mBAAmB,EAAW,SAAA;AAAA,IAAA;AAAA,EAC9D;AAGF,QAAM,eAAe,MAAM;AACzB,QAAI,UAAU;AACZ,aAAO,QAAQ;AAAA,IAAA;AAAA,EAEnB;AAEM,QAAA,SACHC,2BAAA,kBAAA,KAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,OAAO,QAAQ,eAAe,MAAA,GAC1D,UAAA;AAAA,IAAA,YAAY,aACXC,2BAAA,kBAAA;AAAA,MAACC,oBAAA;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,qDAEDC,oBAAO,QAAA,EAAA;AAAA,IACRF,2BAAA,kBAAA;AAAA,MAACG,oBAAA;AAAA,MAAA;AAAA,QACC,OAAO,QAAQ,qBAAqB;AAAA,QACpC,MAAM;AAAA,QACN,UAAU,CAAC,CAAC,iBAAiB,CAAC;AAAA,QAC9B,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EACX,GACF;AAGF,MAAI,aAAsC,CAAC;AAG7B,gBAAA,QAAQ,CAAC,gBAAgB;;AAErC,QAAI,EAAC,2CAAa,YAASC,MAAA,2CAAa,UAAb,gBAAAA,IAAoB,KAAK,CAAC,MAAA;;AAAM,cAAAA,MAAA,qCAAU,UAAV,gBAAAA,IAAiB,SAAS;AAAA,SAAK;AAC7E,iBAAA,KAAK,YAAY,KAAK;AAAA,IAAA;AAAA,EACnC,CACD;AAED,OAAI,qCAAU,KAAK,SAAQ,aAAa,SAAS,KAAK,IAAI,GAAG;AAC3D,UAAM,UAAU,aAAa,SAAS,KAAK,IAAI;AAC/C,iBAAa,CAAC,GAAG,YAAY,GAAG,QAAQ,MAAM,EAAE,OAAO,CAAC,MAAM;;AAAA,gBAACA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,SAAS;AAAA,KAAE;AAAA,EAAA;AAI7F,QAAM,eAIF;AAAA,IACF,MAAM,CAAC,QAAQ,IAAI,aACjBJ,2BAAA,kBAAA;AAAA,MAACK,WAAA;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,UAAU,CAAC,QAAQ;AACjB,mBAAS,GAAG;AAAA,QAAA;AAAA,MACd;AAAA,IACF;AAAA,IAEF,SAAS,CAAC,OAAO,aACfL,2BAAA,kBAAA;AAAA,MAACM,oBAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU,CAAC,MAAM,SAAU,EAAE,OAA4B,OAAO;AAAA,MAAA;AAAA,IAClE;AAAA,IAEF,gBAAgB,CAAC,OAAO,aACtBN,2BAAA,kBAAA;AAAA,MAACM,oBAAA;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,UAAU,CAAC,MAAM,SAAU,EAAE,OAA4B,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtE;AAEM,QAAA,oBAAoB,CAAC,MAAyB;AAC5C,UAAA,IAAK,EAAE,OAA4B;AACzC,YAAQ,SAAS,CAAC;AAElB,QAAI,OAAO;AACO,sBAAA,QAAQC,iBAAU,CAAC,CAAC;AAAA,IAAA;AAAA,EAExC;AAGE,SAAAP,2BAAA,kBAAA;AAAA,IAACQ,oBAAA;AAAA,IAAA;AAAA,MACC,UAAQ,0CAAU,SAAV,mBAAgB,WAAS,qCAAU,SAAQ;AAAA,MACnD;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,MACjC,MAAK;AAAA,MACL,WAAW,CAAC,MAA2C;AACrD,YAAI,EAAE,QAAQ,YAAY,EAAE,WAAW,EAAE,UAAU;AACjD,YAAE,eAAe;AACJ,uBAAA;AAAA,QAAA;AAAA,MAEjB;AAAA,MAEC,UAAA,8DACEC,oBACE,YAAA,EAAA,UAAA;AAAA,QAAC,CAAA,SAAS,SAAS,OAAO,sDACxBC,6BAAQ,EAAA,OAAO,SACd,UAACV,iDAAAW,oBAAAA,WAAA,EAAU,OAAO,qCAAU,KAAK,UAAU,UAAU,mBAAmB,WAAS,MAAC,KADtD,OAE9B;AAAA,QAED,CAAC,SAAS,SAAS,MAAM,KACvBX,2BAAAA,kBAAAA,IAAAU,oBAAA,SAAA,EAAQ,OAAO,QACd,UAAAV,2BAAA,kBAAA;AAAA,UAACY,oBAAA;AAAA,UAAA;AAAA,YACC,OAAO,SAAS;AAAA,YAChB,UAAU,CAAC;AAAA,YACX,UAAU,CAAC,MAAM,gBAAgB,QAAQ,CAAC;AAAA,YAC1C,OAAM;AAAA,UAAA;AAAA,aALmB,MAO7B;AAAA,QAED,CAAC,SAAS,SAAS,OAAO,KACxBZ,2BAAAA,kBAAAA,IAAAU,oBAAA,SAAA,EAAQ,OAAM,SACb,UAAAV,2BAAA,kBAAA;AAAA,UAACa,oBAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,SAAS;AAAA,YACnB,OAAO,SAAS,SAAS,CAAC;AAAA,YAC1B,UAAU,CAAC,MAAM,gBAAgB,SAAS,CAA4B;AAAA,YACtE,aAAW;AAAA,YACX,aAAW;AAAA,UAAA;AAAA,QAAA,GAEf;AAAA,QAED,CAAC,SAAS,SAAS,MAAM,KACvBb,2BAAAA,kBAAAA,IAAAU,oBAAA,SAAA,EAAQ,OAAM,QACb,UAAAV,2BAAA,kBAAA;AAAA,UAACa,oBAAA;AAAA,UAAA;AAAA,YACC,OAAO,EAAC,0CAAU,SAAV,mBAAgB,IAAI;AAAA,YAC5B,UAAU,SAAS;AAAA,YACnB,SAAS,OAAO,OAAO,YAAY;AAAA,YACnC,UAAU,CAAC,MAAM,QAAQ,QAAQ,EAAE,CAAC,CAA0B;AAAA,YAC9D,aAAa;AAAA,YACb,aAAW;AAAA,UAAA;AAAA,QAAA,GAEf;AAAA,QAED,WAAW,IAAI,CAAC,UAAU;;AAEzB,cAAI,SAAS,SAAS,KAAK,EAAU,QAAA;AAErC,cAAI,YAAY;AACZ,cAAA,aAAaC,kBAAW,KAAK;AAE7B,cAAA,UAAU,UAAU,UAAU,WAAW;AACrC,kBAAA,WAAW,aAAa,KAA2B;AAC7C,wBAAA,SAAS,qCAAU,KAAK,QAAQ,CAAC,UAAU,QAAQ,OAAO,KAAK,CAAC;AAAA,UAAA,WACnE,UAAU,eAAaV,MAAA,qCAAU,SAAV,gBAAAA,IAAgB,UAAS,WAAW;AACpE,wBAAY,aAAa,gBAAgB;AAAA,cACvC,qCAAU,KAAK;AAAA,cACf,CAAC,UAAU,QAAQ,OAAO,KAAiC;AAAA,YAC7D;AAAA,UAAA,WACS,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,KAAK,GAAG;AAEnD,gBAAI,CAAC,MAAM,IAAI,EAAE,SAAS,KAAK,EAAU,QAAA;AAEvC,wBAAAJ,2BAAA,kBAAA;AAAA,cAACe,YAAA;AAAA,cAAA;AAAA,gBACC,OAAO,qCAAU;AAAA,gBACjB,OAAO,UAAU;AAAA,gBACjB,WAASC,MAAA,qCAAU,SAAV,gBAAAA,IAAgB,UAAS;AAAA,gBAClC,UAAU,CAAC,MAAM;AACf,wBAAM,UAAU,EAAE,OAAO,SAAY,OAAO,EAAE,EAAE,IAAI;AACpD,wBAAM,UAAU,EAAE,OAAO,SAAY,OAAO,EAAE,EAAE,IAAI;AAEpD;AAAA;AAAA,oBAEG,EAAE,OAAO,UAAa,MAAM,OAAO;AAAA,oBAEnC,EAAE,OAAO,UAAa,MAAM,OAAO;AAAA,oBACpC;AAEA;AAAA,kBAAA;AAGF,8BAAY,CAAC,MAAM;AACjB,wBAAI,CAAC,KAAK,CAAC,EAAE,KAAa,QAAA;AAC1B,0BAAM,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE;AAC7B,2BAAO,EAAE,GAAG,GAAG,MAAM,GAAG;AAAA,kBAAA,CACzB;AAAA,gBAAA;AAAA,cACH;AAAA,YACF;AAIW,yBAAA,UAAU,OAAO,QAAQ;AAAA,UAAA,OACjC;AACC,kBAAA,oBAAoB,CAAC,MAA2C;AAC9D,oBAAA,WAAW,EAAE,OAAO;AAC1B,sBAAQ,OAAO;AAAA,gBACb,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,KAAK,YAAY;AACT,wBAAA,MAAM,SAAS,UAAU,EAAE;AACjC,0BAAQ,OAAO,MAAM,GAAG,IAAI,SAAY,GAAG;AAC3C;AAAA,gBAAA;AAAA,gBAEF;AAEE,0BAAQ,OAAO,QAAuC;AACtD;AAAA,cAAA;AAAA,YAEN;AAGE,wBAAAhB,2BAAA,kBAAA;AAAA,cAACW,oBAAA;AAAA,cAAA;AAAA,gBACC,OAAO,QAAO,qCAAU,KAAK,WAAU,EAAE;AAAA,gBACzC,UAAU;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA;AAKF,iBAAAX,2BAAA,kBAAA;AAAA,YAACU,oBAAA;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,cAEP,OAAO;AAAA,gBACL,YAAY;AAAA,cACd;AAAA,cAEC,UAAA;AAAA,YAAA;AAAA,YALI;AAAA,UAMP;AAAA,QAAA,CAEH;AAAA,QACDV,2BAAA,kBAAA,IAAC,QACG,EAAA,WAAA,iBAAiB,UACjBA,2BAAA,kBAAA,IAAC,UAAK,WAAU,mBAAmB,UAAiB,iBAAA,MAAM,CAAA,EAE9D,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA;AAAA,EAEJ;AAEJ;;"}
1
+ {"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["useState","useEffect","jsxs","jsx","Button","Spacer","SaveButton","_a","EnumEditor","InputSwitch","camelCase","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","upperFirst","MinMaxField","_b"],"mappings":"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"}
@@ -59,7 +59,7 @@ const initFormData = {
59
59
  description: "",
60
60
  example: "",
61
61
  default: void 0,
62
- enum: [],
62
+ enum: void 0,
63
63
  minLength: void 0,
64
64
  maxLength: void 0,
65
65
  regex: "",
@@ -193,7 +193,7 @@ const AttributeEditor = ({
193
193
  {
194
194
  values: value,
195
195
  onChange: (val) => {
196
- onChange(val);
196
+ onChange((val == null ? void 0 : val.length) ? val : void 0);
197
197
  }
198
198
  }
199
199
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: [],\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["jsxs","jsx","_a","_b"],"mappings":"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"}
1
+ {"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["jsxs","jsx","_a","_b"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("../../../../_virtual/jsx-runtime.cjs.js");
4
+ const styled = require("styled-components");
5
+ const BadgeWrapper = styled.div`
6
+ display: flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ gap: var(--base-gap-small);
10
+ padding: 0 4px;
11
+ margin-left: 12px;
12
+ `;
13
+ const BaseBadge = styled.span`
14
+ font-size: 0.8rem;
15
+ border-radius: 4px;
16
+ color: #161616;
17
+ padding: 0 4px;
18
+ `;
19
+ const WELL_KNOWN_BADGES = ["studio", "project", "producttion", "staging", "development"];
20
+ const Badge = ({ children, hl, style, ...props }) => {
21
+ const nstyle = { ...style };
22
+ if (hl) {
23
+ nstyle.backgroundColor = `var(--color-hl-${hl})`;
24
+ } else if (children && typeof children === "string" && WELL_KNOWN_BADGES.includes(children.toLowerCase())) {
25
+ nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`;
26
+ }
27
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(BaseBadge, { style: nstyle, ...props, children });
28
+ };
29
+ exports.Badge = Badge;
30
+ exports.BadgeWrapper = BadgeWrapper;
31
+ //# sourceMappingURL=Badge.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.cjs.js","sources":["../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import styled from 'styled-components'\nimport { ReactNode, CSSProperties } from 'react'\n\nexport const BadgeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--base-gap-small);\n padding: 0 4px;\n margin-left: 12px;\n`\n\nconst BaseBadge = styled.span`\n font-size: 0.8rem;\n border-radius: 4px;\n color: #161616;\n padding: 0 4px;\n`\n\nconst WELL_KNOWN_BADGES = ['studio', 'project', 'producttion', 'staging', 'development']\n\ninterface BadgeProps {\n children?: ReactNode\n hl?: string\n style?: CSSProperties\n [key: string]: any\n}\n\nexport const Badge = ({ children, hl, style, ...props }: BadgeProps) => {\n const nstyle: CSSProperties = { ...style }\n if (hl) {\n nstyle.backgroundColor = `var(--color-hl-${hl})`\n } else if (\n children &&\n typeof children === 'string' &&\n WELL_KNOWN_BADGES.includes(children.toLowerCase())\n ) {\n nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`\n }\n\n return (\n <BaseBadge style={nstyle} {...props}>\n {children}\n </BaseBadge>\n )\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnC,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,oBAAoB,CAAC,UAAU,WAAW,eAAe,WAAW,aAAa;AAS1E,MAAA,QAAQ,CAAC,EAAE,UAAU,IAAI,OAAO,GAAG,YAAwB;AAChE,QAAA,SAAwB,EAAE,GAAG,MAAM;AACzC,MAAI,IAAI;AACC,WAAA,kBAAkB,kBAAkB,EAAE;AAAA,EAAA,WAE7C,YACA,OAAO,aAAa,YACpB,kBAAkB,SAAS,SAAS,YAAY,CAAC,GACjD;AACA,WAAO,kBAAkB,kBAAkB,SAAS,YAAa,CAAA;AAAA,EAAA;AAGnE,0DACG,WAAU,EAAA,OAAO,QAAS,GAAG,OAC3B,UACH;AAEJ;;;"}
@@ -0,0 +1,31 @@
1
+ import { j as jsxRuntimeExports } from "../../../../_virtual/jsx-runtime.es.js";
2
+ import styled from "styled-components";
3
+ const BadgeWrapper = styled.div`
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: var(--base-gap-small);
8
+ padding: 0 4px;
9
+ margin-left: 12px;
10
+ `;
11
+ const BaseBadge = styled.span`
12
+ font-size: 0.8rem;
13
+ border-radius: 4px;
14
+ color: #161616;
15
+ padding: 0 4px;
16
+ `;
17
+ const WELL_KNOWN_BADGES = ["studio", "project", "producttion", "staging", "development"];
18
+ const Badge = ({ children, hl, style, ...props }) => {
19
+ const nstyle = { ...style };
20
+ if (hl) {
21
+ nstyle.backgroundColor = `var(--color-hl-${hl})`;
22
+ } else if (children && typeof children === "string" && WELL_KNOWN_BADGES.includes(children.toLowerCase())) {
23
+ nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`;
24
+ }
25
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(BaseBadge, { style: nstyle, ...props, children });
26
+ };
27
+ export {
28
+ Badge,
29
+ BadgeWrapper
30
+ };
31
+ //# sourceMappingURL=Badge.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.es.js","sources":["../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import styled from 'styled-components'\nimport { ReactNode, CSSProperties } from 'react'\n\nexport const BadgeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--base-gap-small);\n padding: 0 4px;\n margin-left: 12px;\n`\n\nconst BaseBadge = styled.span`\n font-size: 0.8rem;\n border-radius: 4px;\n color: #161616;\n padding: 0 4px;\n`\n\nconst WELL_KNOWN_BADGES = ['studio', 'project', 'producttion', 'staging', 'development']\n\ninterface BadgeProps {\n children?: ReactNode\n hl?: string\n style?: CSSProperties\n [key: string]: any\n}\n\nexport const Badge = ({ children, hl, style, ...props }: BadgeProps) => {\n const nstyle: CSSProperties = { ...style }\n if (hl) {\n nstyle.backgroundColor = `var(--color-hl-${hl})`\n } else if (\n children &&\n typeof children === 'string' &&\n WELL_KNOWN_BADGES.includes(children.toLowerCase())\n ) {\n nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`\n }\n\n return (\n <BaseBadge style={nstyle} {...props}>\n {children}\n </BaseBadge>\n )\n}\n"],"names":[],"mappings":";;AAGO,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnC,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,oBAAoB,CAAC,UAAU,WAAW,eAAe,WAAW,aAAa;AAS1E,MAAA,QAAQ,CAAC,EAAE,UAAU,IAAI,OAAO,GAAG,YAAwB;AAChE,QAAA,SAAwB,EAAE,GAAG,MAAM;AACzC,MAAI,IAAI;AACC,WAAA,kBAAkB,kBAAkB,EAAE;AAAA,EAAA,WAE7C,YACA,OAAO,aAAa,YACpB,kBAAkB,SAAS,SAAS,YAAY,CAAC,GACjD;AACA,WAAO,kBAAkB,kBAAkB,SAAS,YAAa,CAAA;AAAA,EAAA;AAGnE,+CACG,WAAU,EAAA,OAAO,QAAS,GAAG,OAC3B,UACH;AAEJ;"}
@@ -37,6 +37,7 @@ require("../../api/generated/users.cjs.js");
37
37
  require("../../api/generated/versions.cjs.js");
38
38
  require("../../api/generated/workfiles.cjs.js");
39
39
  require("../../api/generated/ynputCloud.cjs.js");
40
+ require("../../api/generated/grouping.cjs.js");
40
41
  require("../../api/queries/actions/getActions.cjs.js");
41
42
  require("../../api/queries/activities/getActivities.cjs.js");
42
43
  require("../../api/queries/activities/updateActivities.cjs.js");
@@ -67,6 +68,7 @@ require("../../api/queries/users/getUsers.cjs.js");
67
68
  require("../../api/queries/users/updateUsers.cjs.js");
68
69
  require("../../api/queries/watchers/getWatchers.cjs.js");
69
70
  require("../../api/queries/permissions/getPermissions.cjs.js");
71
+ require("../../api/queries/grouping/getGrouping.cjs.js");
70
72
  const ayonReactComponents = require("@ynput/ayon-react-components");
71
73
  const DetailsDialog = ({
72
74
  projectName,
@@ -1 +1 @@
1
- {"version":3,"file":"DetailsDialog.cjs.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["useGetEntityQuery","toast","jsx","Dialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACEA,UAAA;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACLC,oBAAAA,MAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAC,2BAAA,kBAAA;AAAA,IAACC,oBAAA;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,4DAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;;"}
1
+ {"version":3,"file":"DetailsDialog.cjs.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["useGetEntityQuery","toast","jsx","Dialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACEA,UAAA;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACLC,oBAAAA,MAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAC,2BAAA,kBAAA;AAAA,IAACC,oBAAA;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,4DAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;;"}
@@ -35,6 +35,7 @@ import "../../api/generated/users.es.js";
35
35
  import "../../api/generated/versions.es.js";
36
36
  import "../../api/generated/workfiles.es.js";
37
37
  import "../../api/generated/ynputCloud.es.js";
38
+ import "../../api/generated/grouping.es.js";
38
39
  import "../../api/queries/actions/getActions.es.js";
39
40
  import "../../api/queries/activities/getActivities.es.js";
40
41
  import "../../api/queries/activities/updateActivities.es.js";
@@ -65,6 +66,7 @@ import "../../api/queries/users/getUsers.es.js";
65
66
  import "../../api/queries/users/updateUsers.es.js";
66
67
  import "../../api/queries/watchers/getWatchers.es.js";
67
68
  import "../../api/queries/permissions/getPermissions.es.js";
69
+ import "../../api/queries/grouping/getGrouping.es.js";
68
70
  import { Dialog } from "@ynput/ayon-react-components";
69
71
  const DetailsDialog = ({
70
72
  projectName,
@@ -1 +1 @@
1
- {"version":3,"file":"DetailsDialog.es.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACL,YAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,iDAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"DetailsDialog.es.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACL,YAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,iDAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
@@ -42,6 +42,7 @@ require("../../api/generated/users.cjs.js");
42
42
  require("../../api/generated/versions.cjs.js");
43
43
  require("../../api/generated/workfiles.cjs.js");
44
44
  require("../../api/generated/ynputCloud.cjs.js");
45
+ require("../../api/generated/grouping.cjs.js");
45
46
  require("../../api/queries/actions/getActions.cjs.js");
46
47
  require("../../api/queries/activities/getActivities.cjs.js");
47
48
  require("../../api/queries/activities/updateActivities.cjs.js");
@@ -72,6 +73,7 @@ require("../../api/queries/users/getUsers.cjs.js");
72
73
  require("../../api/queries/users/updateUsers.cjs.js");
73
74
  require("../../api/queries/watchers/getWatchers.cjs.js");
74
75
  require("../../api/queries/permissions/getPermissions.cjs.js");
76
+ require("../../api/queries/grouping/getGrouping.cjs.js");
75
77
  const DetailsPanelAttributesEditor = require("./DetailsPanelAttributesEditor.cjs.js");
76
78
  require("../../context/RemoteModulesContext.cjs.js");
77
79
  require("../../../../_virtual/runtime.cjs.js");