@ynput/ayon-frontend-shared 0.2.17 → 0.2.19

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 +12 -9
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +13 -10
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +6 -0
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +6 -0
  8. package/dist/ProjectTreeTable.es.js.map +1 -1
  9. package/dist/_virtual/index.cjs10.js +4 -4
  10. package/dist/_virtual/index.cjs5.js +3 -5
  11. package/dist/_virtual/index.cjs5.js.map +1 -1
  12. package/dist/_virtual/index.cjs6.js +5 -3
  13. package/dist/_virtual/index.cjs6.js.map +1 -1
  14. package/dist/_virtual/index.cjs8.js +4 -4
  15. package/dist/_virtual/index.cjs9.js +4 -4
  16. package/dist/_virtual/index.es10.js +4 -4
  17. package/dist/_virtual/index.es5.js +2 -5
  18. package/dist/_virtual/index.es5.js.map +1 -1
  19. package/dist/_virtual/index.es6.js +5 -2
  20. package/dist/_virtual/index.es6.js.map +1 -1
  21. package/dist/_virtual/index.es8.js +4 -4
  22. package/dist/_virtual/index.es9.js +4 -4
  23. package/dist/api.cjs.js +13 -0
  24. package/dist/api.cjs.js.map +1 -1
  25. package/dist/api.es.js +17 -4
  26. package/dist/api.es.js.map +1 -1
  27. package/dist/components.cjs.js +9 -4
  28. package/dist/components.cjs.js.map +1 -1
  29. package/dist/components.es.js +10 -5
  30. package/dist/components.es.js.map +1 -1
  31. package/dist/index.cjs.js +12 -8
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/index.es.js +12 -8
  34. package/dist/index.es.js.map +1 -1
  35. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  36. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  37. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  38. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  39. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  40. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  41. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  42. package/dist/node_modules/remove-accents/index.es.js +1 -1
  43. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  44. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  45. package/dist/shared/src/api/generated/folders.cjs.js.map +1 -1
  46. package/dist/shared/src/api/generated/folders.es.js.map +1 -1
  47. package/dist/shared/src/api/generated/graphql.cjs.js +64 -23
  48. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  49. package/dist/shared/src/api/generated/graphql.es.js +64 -23
  50. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  51. package/dist/shared/src/api/queries/actions/getActions.cjs.js +9 -1
  52. package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
  53. package/dist/shared/src/api/queries/actions/getActions.es.js +9 -1
  54. package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
  55. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +5 -1
  56. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  57. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +5 -1
  58. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  59. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +24 -8
  60. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  61. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +24 -8
  62. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  63. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  64. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  65. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  66. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  67. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +67 -0
  68. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  69. package/dist/shared/src/api/queries/entityLists/getLists.es.js +68 -1
  70. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  71. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +19 -3
  72. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  73. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +19 -3
  74. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  75. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +15 -0
  76. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  77. package/dist/shared/src/api/queries/overview/updateOverview.es.js +15 -0
  78. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  79. package/dist/shared/src/api/queries/products/createProduct.cjs.js +54 -0
  80. package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -0
  81. package/dist/shared/src/api/queries/products/createProduct.es.js +54 -0
  82. package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -0
  83. package/dist/shared/src/api/queries/users/getUsers.cjs.js +4 -0
  84. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  85. package/dist/shared/src/api/queries/users/getUsers.es.js +4 -0
  86. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  87. package/dist/shared/src/api/queries/versions/updateVersions.cjs.js +82 -0
  88. package/dist/shared/src/api/queries/versions/updateVersions.cjs.js.map +1 -0
  89. package/dist/shared/src/api/queries/versions/updateVersions.es.js +82 -0
  90. package/dist/shared/src/api/queries/versions/updateVersions.es.js.map +1 -0
  91. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  92. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  93. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  94. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  95. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +7 -5
  96. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  97. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +7 -5
  98. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  99. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +2 -2
  100. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  101. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +2 -2
  102. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  103. package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js +13 -0
  104. package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js.map +1 -0
  105. package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js +14 -0
  106. package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js.map +1 -0
  107. package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.cjs.js → EntityPanelUploader/EntityPanelUploader.cjs.js} +374 -114
  108. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -0
  109. package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.es.js → EntityPanelUploader/EntityPanelUploader.es.js} +374 -114
  110. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -0
  111. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js +95 -0
  112. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js.map +1 -0
  113. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js +95 -0
  114. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js.map +1 -0
  115. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +76 -0
  116. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -0
  117. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +77 -0
  118. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -0
  119. package/dist/shared/src/components/PlayableIcon/PlayableIcon.cjs.js +43 -0
  120. package/dist/shared/src/components/PlayableIcon/PlayableIcon.cjs.js.map +1 -0
  121. package/dist/shared/src/components/PlayableIcon/PlayableIcon.es.js +43 -0
  122. package/dist/shared/src/components/PlayableIcon/PlayableIcon.es.js.map +1 -0
  123. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  124. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  125. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +1 -1
  126. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  127. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +1 -1
  128. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -1
  129. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +1 -1
  130. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -1
  131. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +17 -15
  132. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  133. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +17 -15
  134. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  135. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  136. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  137. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  138. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  139. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +12 -8
  140. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  141. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +12 -8
  142. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  143. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +35 -107
  144. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  145. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +35 -107
  146. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  147. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +12 -8
  148. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  149. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +12 -8
  150. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  151. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +212 -0
  152. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -0
  153. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +212 -0
  154. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -0
  155. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  156. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  157. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  158. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  159. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +12 -8
  160. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  161. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +12 -8
  162. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  163. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js +85 -0
  164. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js.map +1 -0
  165. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js +85 -0
  166. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js.map +1 -0
  167. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +402 -0
  168. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -0
  169. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +402 -0
  170. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -0
  171. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +308 -0
  172. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -0
  173. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +308 -0
  174. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -0
  175. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  176. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  177. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  178. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  179. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +12 -8
  180. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  181. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +12 -8
  182. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  183. package/dist/shared/src/containers/Actions/Actions.cjs.js +10 -2
  184. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  185. package/dist/shared/src/containers/Actions/Actions.es.js +10 -2
  186. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  187. package/dist/shared/src/containers/Actions/Actions.styled.cjs.js +1 -1
  188. package/dist/shared/src/containers/Actions/Actions.styled.cjs.js.map +1 -1
  189. package/dist/shared/src/containers/Actions/Actions.styled.es.js +1 -1
  190. package/dist/shared/src/containers/Actions/Actions.styled.es.js.map +1 -1
  191. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js +10 -3
  192. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js.map +1 -1
  193. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js +10 -3
  194. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js.map +1 -1
  195. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js +14 -0
  196. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js.map +1 -1
  197. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js +14 -0
  198. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js.map +1 -1
  199. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +12 -8
  200. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  201. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +12 -8
  202. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  203. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +14 -9
  204. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  205. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +14 -9
  206. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  207. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +12 -8
  208. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  209. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +12 -8
  210. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  211. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +12 -8
  212. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  213. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +12 -8
  214. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  215. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +16 -9
  216. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  217. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +17 -10
  218. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  219. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js +0 -30
  220. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js.map +1 -1
  221. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js +0 -30
  222. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js.map +1 -1
  223. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  224. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  225. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  226. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  227. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  228. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  229. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  230. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  231. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  232. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  233. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  234. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  235. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  236. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  237. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  238. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  239. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +51 -5
  240. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +53 -7
  242. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  243. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +47 -11
  244. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +47 -11
  246. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  247. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +11 -7
  248. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +11 -7
  250. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  251. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js +6 -4
  252. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js.map +1 -1
  253. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js +6 -4
  254. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js.map +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.cjs.js +106 -2
  256. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.cjs.js.map +1 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.es.js +106 -2
  258. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingContext.es.js.map +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +14 -2
  260. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  261. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +14 -2
  262. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  264. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  265. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  266. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  268. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  269. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +22 -4
  270. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +22 -4
  272. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  273. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +106 -0
  274. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +106 -0
  276. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  277. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  278. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  280. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  281. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +4 -2
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +4 -2
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +28 -4
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +28 -4
  288. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  289. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +135 -0
  290. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -0
  291. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +135 -0
  292. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -0
  293. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +8 -6
  294. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +8 -6
  296. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
  297. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +2 -0
  298. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +2 -0
  300. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  301. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js +1 -1
  302. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js +1 -1
  304. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js.map +1 -1
  305. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +88 -0
  306. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +88 -0
  308. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  309. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +2 -0
  310. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +2 -0
  312. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
  313. package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.cjs.js +1 -1
  314. package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.es.js +1 -1
  316. package/dist/shared/src/containers/ProjectTreeTable/hooks/useHistory.es.js.map +1 -1
  317. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +35 -4
  318. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +35 -4
  320. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  321. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +2 -0
  322. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +2 -0
  324. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +88 -0
  326. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +88 -0
  328. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  330. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +1 -1
  332. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +90 -0
  334. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +90 -0
  336. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.cjs.js +19 -0
  338. package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.cjs.js.map +1 -0
  339. package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.es.js +19 -0
  340. package/dist/shared/src/containers/ProjectTreeTable/utils/getEntityViewerIds.es.js.map +1 -0
  341. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +3 -2
  342. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +3 -2
  344. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.cjs.js +26 -0
  346. package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.cjs.js.map +1 -0
  347. package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.es.js +26 -0
  348. package/dist/shared/src/containers/ProjectTreeTable/utils/getTypeDefaultValue.es.js.map +1 -0
  349. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +9 -8
  350. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +10 -9
  352. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +8 -2
  354. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +8 -2
  356. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +190 -0
  358. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -0
  359. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +190 -0
  360. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -0
  361. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +4 -147
  362. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +2 -145
  364. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +1 -1
  366. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  367. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +1 -1
  368. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  369. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +12 -2
  370. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +12 -2
  372. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  373. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +12 -8
  374. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +12 -8
  376. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  377. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  378. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  379. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  380. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  381. package/dist/shared/src/context/DetailsPanelContext.cjs.js +7 -1
  382. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  383. package/dist/shared/src/context/DetailsPanelContext.es.js +7 -1
  384. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  385. package/dist/shared/src/context/PowerpackContext.cjs.js +2 -0
  386. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  387. package/dist/shared/src/context/PowerpackContext.es.js +2 -0
  388. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  389. package/dist/shared/src/context/RemoteModulesContext.cjs.js +2 -0
  390. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  391. package/dist/shared/src/context/RemoteModulesContext.es.js +2 -0
  392. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  393. package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js +15 -4
  394. package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js.map +1 -1
  395. package/dist/shared/src/context/ThumbnailUploaderContext.es.js +15 -4
  396. package/dist/shared/src/context/ThumbnailUploaderContext.es.js.map +1 -1
  397. package/dist/shared/src/context/pip/PiPWrapper.cjs.js +1 -1
  398. package/dist/shared/src/context/pip/PiPWrapper.cjs.js.map +1 -1
  399. package/dist/shared/src/context/pip/PiPWrapper.es.js +1 -1
  400. package/dist/shared/src/context/pip/PiPWrapper.es.js.map +1 -1
  401. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  402. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  403. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  404. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  405. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  406. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  407. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  408. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  409. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  410. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  411. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  412. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  413. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  414. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  415. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  416. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  417. package/dist/shared/src/util/confirmDelete.cjs.js +1 -0
  418. package/dist/shared/src/util/confirmDelete.cjs.js.map +1 -1
  419. package/dist/shared/src/util/confirmDelete.es.js +2 -0
  420. package/dist/shared/src/util/confirmDelete.es.js.map +1 -1
  421. package/dist/shared/src/util/productTypes.cjs.js +1 -0
  422. package/dist/shared/src/util/productTypes.cjs.js.map +1 -1
  423. package/dist/shared/src/util/productTypes.es.js +1 -0
  424. package/dist/shared/src/util/productTypes.es.js.map +1 -1
  425. package/dist/shared/src/utils/extractVersionFromFilename.cjs.js +32 -0
  426. package/dist/shared/src/utils/extractVersionFromFilename.cjs.js.map +1 -0
  427. package/dist/shared/src/utils/extractVersionFromFilename.es.js +32 -0
  428. package/dist/shared/src/utils/extractVersionFromFilename.es.js.map +1 -0
  429. package/dist/shared/src/utils/versionUploadHelpers.cjs.js +121 -0
  430. package/dist/shared/src/utils/versionUploadHelpers.cjs.js.map +1 -0
  431. package/dist/shared/src/utils/versionUploadHelpers.es.js +121 -0
  432. package/dist/shared/src/utils/versionUploadHelpers.es.js.map +1 -0
  433. package/dist/types/SimpleTable/SimpleTable.d.ts +1 -0
  434. package/dist/types/SimpleTable/SimpleTableRowTemplate.d.ts +1 -1
  435. package/dist/types/SimpleTable/context/SimpleTableContext.d.ts +5 -1
  436. package/dist/types/api/generated/folders.d.ts +1 -0
  437. package/dist/types/api/generated/graphql.d.ts +113 -41
  438. package/dist/types/api/queries/actions/getActions.d.ts +132 -1
  439. package/dist/types/api/queries/activities/getActivities.d.ts +10 -4
  440. package/dist/types/api/queries/activities/updateActivities.d.ts +20 -8
  441. package/dist/types/api/queries/entities/getEntity.d.ts +10 -4
  442. package/dist/types/api/queries/entities/getEntityPanel.d.ts +10 -4
  443. package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +1 -0
  444. package/dist/types/api/queries/entities/updateEntity.d.ts +10 -4
  445. package/dist/types/api/queries/entityLists/getLists.d.ts +1521 -6
  446. package/dist/types/api/queries/entityLists/types.d.ts +30 -1
  447. package/dist/types/api/queries/entityLists/updateLists.d.ts +166 -3
  448. package/dist/types/api/queries/index.d.ts +2 -0
  449. package/dist/types/api/queries/overview/getOverview.d.ts +10 -4
  450. package/dist/types/api/queries/products/createProduct.d.ts +161 -0
  451. package/dist/types/api/queries/products/index.d.ts +1 -0
  452. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +10 -4
  453. package/dist/types/api/queries/users/getUsers.d.ts +10 -4
  454. package/dist/types/api/queries/versions/index.d.ts +1 -0
  455. package/dist/types/api/queries/versions/updateVersions.d.ts +685 -0
  456. package/dist/types/components/EntityPanelUploader/Dropzone.d.ts +11 -0
  457. package/dist/types/components/{EntityThumbnailUploader/EntityThumbnailUploader.d.ts → EntityPanelUploader/EntityPanelUploader.d.ts} +3 -3
  458. package/dist/types/components/EntityPanelUploader/EntityPanelUploader.styled.d.ts +8 -0
  459. package/dist/types/components/EntityPanelUploader/EntityPanelUploaderDialog.d.ts +10 -0
  460. package/dist/types/components/EntityPanelUploader/index.d.ts +1 -0
  461. package/dist/types/components/PlayableIcon/PlayableIcon.d.ts +4 -0
  462. package/dist/types/components/ReviewablesList/index.d.ts +1 -0
  463. package/dist/types/components/ReviewablesList/useReviewablesUpload.d.ts +19 -0
  464. package/dist/types/components/VersionUploader/components/UploadVersionDialog.d.ts +5 -0
  465. package/dist/types/components/VersionUploader/components/UploadVersionForm.d.ts +18 -0
  466. package/dist/types/components/VersionUploader/context/VersionUploadContext.d.ts +54 -0
  467. package/dist/types/components/VersionUploader/index.d.ts +2 -0
  468. package/dist/types/components/index.d.ts +2 -2
  469. package/dist/types/containers/Actions/Actions.d.ts +7 -1
  470. package/dist/types/containers/Actions/ActionsDropdown/ActionsDropdown.d.ts +5 -3
  471. package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +2 -1
  472. package/dist/types/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.d.ts +3 -1
  473. package/dist/types/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.d.ts +0 -1
  474. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +6 -2
  475. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +5 -1
  476. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +12 -2
  477. package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +1 -0
  478. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +3 -2
  479. package/dist/types/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.d.ts +9 -0
  480. package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +2 -2
  481. package/dist/types/containers/ProjectTreeTable/hooks/useKeyboardNavigation.d.ts +3 -3
  482. package/dist/types/containers/ProjectTreeTable/hooks/useUpdateTableData.d.ts +1 -1
  483. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +10 -1
  484. package/dist/types/containers/ProjectTreeTable/utils/getEntityViewerIds.d.ts +4 -0
  485. package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +2 -1
  486. package/dist/types/containers/ProjectTreeTable/utils/getTypeDefaultValue.d.ts +2 -0
  487. package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
  488. package/dist/types/containers/ProjectTreeTable/widgets/CellWidget.d.ts +2 -1
  489. package/dist/types/containers/ProjectTreeTable/widgets/EnumCellValue.d.ts +20 -0
  490. package/dist/types/containers/ProjectTreeTable/widgets/EnumWidget.d.ts +1 -11
  491. package/dist/types/containers/ProjectTreeTable/widgets/ThumbnailWidget.d.ts +1 -0
  492. package/dist/types/context/DetailsPanelContext.d.ts +1 -0
  493. package/dist/types/context/ThumbnailUploaderContext.d.ts +3 -2
  494. package/dist/types/util/confirmDelete.d.ts +2 -1
  495. package/dist/types/utils/versionUploadHelpers.d.ts +63 -0
  496. package/dist/util.cjs.js +2 -0
  497. package/dist/util.cjs.js.map +1 -1
  498. package/dist/util.es.js +2 -0
  499. package/dist/util.es.js.map +1 -1
  500. package/package.json +1 -1
  501. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +0 -1
  502. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +0 -1
  503. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js +0 -12
  504. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js.map +0 -1
  505. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js +0 -12
  506. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js.map +0 -1
  507. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js +0 -112
  508. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js.map +0 -1
  509. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js +0 -112
  510. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js.map +0 -1
  511. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js +0 -104
  512. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js.map +0 -1
  513. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js +0 -104
  514. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js.map +0 -1
  515. package/dist/types/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.d.ts +0 -1
  516. package/dist/types/components/EntityThumbnailUploader/index.d.ts +0 -1
  517. package/dist/types/components/ThumbnailUploader/ThumbnailUploader.d.ts +0 -17
  518. package/dist/types/components/ThumbnailUploader/ThumbnailUploader.styled.d.ts +0 -4
  519. package/dist/types/components/ThumbnailUploader/index.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionUploadContext.es.js","sources":["../../../../../../src/components/VersionUploader/context/VersionUploadContext.tsx"],"sourcesContent":["import {\n GetLatestVersionResult,\n useCreateVersionMutation,\n useGetLatestProductVersionQuery,\n} from '@shared/api'\nimport React, {\n createContext,\n useContext,\n useState,\n ReactNode,\n useMemo,\n useCallback,\n useEffect,\n} from 'react'\nimport { useCreateProductMutation } from '@shared/api'\nimport { extractVersionFromFilename } from '@shared/utils/extractVersionFromFilename'\nimport { productTypes } from '@shared/util'\nimport { toast } from 'react-toastify'\nimport {\n validateFormData as validateFormDataHelper,\n createProductAndVersion,\n createVersionHelper,\n handleUploadError,\n getNextVersionNumber,\n type ProductCreationData,\n type VersionCreationData,\n} from '@shared/utils/versionUploadHelpers'\n\nexport interface FormData {\n version: number\n name: string\n productType: string\n}\ninterface VersionUploadContextType {\n productId: string\n folderId: string\n taskId: string\n setProductId: (productId: string) => void\n setFolderId: (folderId: string) => void\n isOpen: boolean\n projectName: string\n version: GetLatestVersionResult | undefined\n pendingFiles: Array<{ file: File; preview?: string }>\n setPendingFiles: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n extractAndSetVersionFromFiles: (files: File[]) => void\n form: FormData\n setForm: React.Dispatch<React.SetStateAction<FormData>>\n isSubmitting: boolean\n error: string\n createdProductId: string | null\n createdVersionId: string | null\n onOpenVersionUpload: (params: { productId?: string; folderId?: string; taskId?: string }) => void\n onCloseVersionUpload: () => void\n onUploadVersion: (data: FormData) => Promise<{ productId: string; versionId: string }>\n handleFormChange: (key: keyof FormData, value: string | number) => void\n handleFormSubmit: (formData: FormData) => Promise<void>\n // pass through\n dispatch: any\n}\n\nconst VersionUploadContext = createContext<VersionUploadContextType | undefined>(undefined)\n\ninterface VersionUploadProviderProps {\n children: ReactNode\n projectName: string\n onVersionCreated: (productId: string, versionId: string) => void\n dispatch: any\n}\n\nconst defaultFormData: FormData = {\n version: 1,\n name: productTypes.review.name,\n productType: 'review',\n}\n\nexport const VersionUploadProvider: React.FC<VersionUploadProviderProps> = ({\n children,\n projectName,\n onVersionCreated,\n dispatch,\n}) => {\n const [folderId, setFolderId] = useState<string>('')\n const [productId, setProductId] = useState<string>('')\n // optional taskId to link the version to\n const [taskId, setTaskId] = useState<string>('')\n const [isOpen, setIsOpen] = useState<boolean>(false)\n const [pendingFiles, setPendingFiles] = useState<Array<{ file: File; preview?: string }>>([])\n const [form, setForm] = useState<FormData>(defaultFormData)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [error, setError] = useState<string>('')\n const [createdProductId, setCreatedProductId] = useState<string | null>(null)\n const [createdVersionId, setCreatedVersionId] = useState<string | null>(null)\n\n const { currentData: version } = useGetLatestProductVersionQuery(\n {\n projectName,\n productId,\n },\n { skip: !productId || !isOpen },\n )\n\n const onOpenVersionUpload = useCallback<VersionUploadContextType['onOpenVersionUpload']>(\n ({ productId, folderId, taskId }) => {\n setProductId(productId || '')\n setFolderId(folderId || '')\n setTaskId(taskId || '')\n setIsOpen(true)\n },\n [],\n )\n\n const onCloseVersionUpload = useCallback<VersionUploadContextType['onCloseVersionUpload']>(() => {\n // Clean up pending files\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n setForm(defaultFormData)\n setCreatedProductId(null)\n setCreatedVersionId(null)\n setError('')\n setIsSubmitting(false)\n setIsOpen(false)\n setProductId('')\n setFolderId('')\n setTaskId('')\n }, [pendingFiles])\n\n const [createProduct] = useCreateProductMutation()\n const [createVersion] = useCreateVersionMutation()\n\n const onUploadVersion = useCallback<VersionUploadContextType['onUploadVersion']>(\n async (data: FormData) => {\n console.log('Uploading version with data:', data)\n try {\n if (version && productId) {\n // product already exists, create new version for it\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n version: data.version,\n })\n\n // select the new version\n onVersionCreated(productId, versionRes.id)\n\n return {\n productId,\n versionId: versionRes.id,\n }\n } else {\n // product does not exist, create new product with version\n const { product: productRes, version: versionRes } = await createProductAndVersion(\n createProduct,\n createVersion,\n projectName,\n {\n folderId,\n name: data.name,\n productType: data.productType || 'review',\n },\n {\n version: data.version,\n taskId: taskId || undefined,\n },\n )\n\n // select the new product and version\n onVersionCreated(productRes.id, versionRes.id)\n\n toast.success('Created new version')\n\n return {\n productId: productRes.id,\n versionId: versionRes.id,\n }\n }\n } catch (error: any) {\n console.error('Error uploading version:', error)\n throw error.message || error\n }\n },\n [onCloseVersionUpload, productId, folderId, taskId, version, projectName],\n )\n\n const extractAndSetVersionFromFiles = useCallback(\n (files: File[]) => {\n // Only extract version if we don't already have a product (new product workflow)\n if (productId) return\n\n // Try to extract version from the first file\n const firstFile = files[0]\n if (firstFile) {\n const extractedVersion = extractVersionFromFilename(firstFile.name)\n if (extractedVersion && extractedVersion !== form.version) {\n setForm((prev) => ({\n ...prev,\n version: extractedVersion,\n }))\n }\n }\n },\n [productId, form.version],\n )\n\n // Handle form changes\n const handleFormChange = useCallback((key: keyof FormData, value: string | number) => {\n setForm((prev) => ({\n ...prev,\n [key]: value,\n }))\n }, [])\n\n const validateFormData = () => {\n const validation = validateFormDataHelper(form, version?.version, !version)\n if (!validation.isValid) {\n throw validation.error\n }\n }\n\n // Handle form submission\n const handleFormSubmit = useCallback(\n async (formData: FormData) => {\n try {\n setIsSubmitting(true)\n setError('')\n\n // validate the form data\n validateFormData()\n\n const response = await onUploadVersion(formData)\n\n // Extract productId and versionId from response\n if (response?.productId) {\n setCreatedProductId(response.productId)\n }\n if (response?.versionId) {\n setCreatedVersionId(response.versionId)\n }\n\n if (pendingFiles.length < 1) {\n setIsSubmitting(false)\n onCloseVersionUpload()\n }\n } catch (error: any) {\n setError(error)\n setIsSubmitting(false)\n }\n },\n [onUploadVersion, pendingFiles.length, onCloseVersionUpload],\n )\n\n // Update form when version data changes\n useEffect(() => {\n if (!isOpen) return\n\n if (version) {\n setForm({\n ...defaultFormData,\n version: getNextVersionNumber(version),\n })\n } else {\n setForm(defaultFormData)\n }\n\n return () => {\n setForm(defaultFormData)\n }\n }, [isOpen, version])\n\n const value = useMemo(\n () => ({\n productId,\n setProductId,\n folderId,\n taskId,\n setFolderId,\n isOpen,\n projectName,\n version: productId ? version : undefined,\n pendingFiles,\n setPendingFiles,\n onOpenVersionUpload,\n onCloseVersionUpload,\n onUploadVersion,\n extractAndSetVersionFromFiles,\n form,\n setForm,\n isSubmitting,\n error,\n createdProductId,\n createdVersionId,\n handleFormChange,\n handleFormSubmit,\n dispatch,\n }),\n [\n folderId,\n setFolderId,\n productId,\n taskId,\n setProductId,\n isOpen,\n projectName,\n version,\n pendingFiles,\n setPendingFiles,\n onOpenVersionUpload,\n onCloseVersionUpload,\n onUploadVersion,\n extractAndSetVersionFromFiles,\n form,\n isSubmitting,\n error,\n createdProductId,\n createdVersionId,\n handleFormChange,\n handleFormSubmit,\n dispatch,\n ],\n )\n\n return <VersionUploadContext.Provider value={value}>{children}</VersionUploadContext.Provider>\n}\n\nexport const useVersionUploadContext = (): VersionUploadContextType => {\n const context = useContext(VersionUploadContext)\n if (context === undefined) {\n throw new Error('useVersionUploadContext must be used within a VersionUploadProvider')\n }\n return context\n}\n"],"names":["productId","folderId","taskId","error","value","validateFormData","validateFormDataHelper","jsx"],"mappings":"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"}
@@ -68,6 +68,8 @@ require("../../api/queries/users/updateUsers.cjs.js");
68
68
  const getWatchers = require("../../api/queries/watchers/getWatchers.cjs.js");
69
69
  require("../../api/queries/permissions/getPermissions.cjs.js");
70
70
  require("../../api/queries/grouping/getGrouping.cjs.js");
71
+ require("../../api/queries/versions/updateVersions.cjs.js");
72
+ require("../../api/queries/products/createProduct.cjs.js");
71
73
  const ayonReactComponents = require("@ynput/ayon-react-components");
72
74
  const React = require("react");
73
75
  const reactToastify = require("react-toastify");
@@ -1 +1 @@
1
- {"version":3,"file":"Watchers.cjs.js","sources":["../../../../../src/components/Watchers/Watchers.tsx"],"sourcesContent":["import { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } from '@shared/api'\nimport { DropdownRef, WatcherSelect, WatcherSelectProps } from '@ynput/ayon-react-components'\nimport { forwardRef } from 'react'\nimport { toast } from 'react-toastify'\n\ninterface WatchersProps extends Omit<WatcherSelectProps, 'currentUser' | 'value'> {\n entities: { id: string; projectName: string }[]\n entityType: string\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n userName: string\n}\n\nexport const Watchers = forwardRef<DropdownRef, WatchersProps>(\n ({ entities, entityType, onWatchersUpdate, userName, ...props }, ref) => {\n const entitiesQuery = entities.map((entity) => ({\n entityId: entity.id,\n entityType,\n projectName: entity.projectName,\n }))\n\n const { data: watchers = [] } = useGetEntitiesWatchersQuery(\n {\n entities: entitiesQuery,\n },\n { skip: !entities.length },\n )\n\n // merge all watchers into a single unique array\n const uniqueWatchers = Array.from(new Set(watchers.flatMap((watcher) => watcher.watchers)))\n\n const [setEntitiesWatchers] = useSetEntitiesWatchersMutation()\n\n const handleChange = async (value: string[]) => {\n // find the difference between the current watchers and the new watchers\n // which users were added and which were removed\n const added = value.filter((watcher) => !uniqueWatchers.includes(watcher))\n const removed = uniqueWatchers.filter((watcher) => !value.includes(watcher))\n\n // for each entity, add or remove the watchers\n // we do this to preserve the unique watchers for each entity (rather than setting the same watchers for all entities)\n const updatedEntities = watchers.map((entity) => {\n // first remove\n const newWatchers = entity.watchers.filter((watcher) => !removed.includes(watcher))\n // then add\n newWatchers.push(...added)\n\n return {\n ...entity,\n watchers: newWatchers,\n }\n })\n\n // update\n try {\n await setEntitiesWatchers({ entities: updatedEntities }).unwrap()\n onWatchersUpdate && onWatchersUpdate(added, removed)\n } catch (error) {\n toast.error('Failed to update watchers')\n }\n }\n\n return (\n <WatcherSelect\n align=\"right\"\n {...props}\n value={uniqueWatchers}\n currentUser={userName}\n onChange={handleChange}\n ref={ref}\n // @ts-expect-error\n buttonProps={{ 'data-tooltip': 'Watchers' }}\n />\n )\n },\n)\n"],"names":["forwardRef","useGetEntitiesWatchersQuery","useSetEntitiesWatchersMutation","toast","jsx","WatcherSelect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAWA,MAAA;AAAA,EACtB,CAAC,EAAE,UAAU,YAAY,kBAAkB,UAAU,GAAG,MAAM,GAAG,QAAQ;AACvE,UAAM,gBAAgB,SAAS,IAAI,CAAC,YAAY;AAAA,MAC9C,UAAU,OAAO;AAAA,MACjB;AAAA,MACA,aAAa,OAAO;AAAA,IAAA,EACpB;AAEF,UAAM,EAAE,MAAM,WAAW,CAAA,EAAO,IAAAC,YAAA;AAAA,MAC9B;AAAA,QACE,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,CAAC,SAAS,OAAO;AAAA,IAC3B;AAGA,UAAM,iBAAiB,MAAM,KAAK,IAAI,IAAI,SAAS,QAAQ,CAAC,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAEpF,UAAA,CAAC,mBAAmB,IAAIC,2CAA+B;AAEvD,UAAA,eAAe,OAAO,UAAoB;AAGxC,YAAA,QAAQ,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,SAAS,OAAO,CAAC;AACnE,YAAA,UAAU,eAAe,OAAO,CAAC,YAAY,CAAC,MAAM,SAAS,OAAO,CAAC;AAI3E,YAAM,kBAAkB,SAAS,IAAI,CAAC,WAAW;AAEzC,cAAA,cAAc,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS,OAAO,CAAC;AAEtE,oBAAA,KAAK,GAAG,KAAK;AAElB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MAAA,CACD;AAGG,UAAA;AACF,cAAM,oBAAoB,EAAE,UAAU,gBAAiB,CAAA,EAAE,OAAO;AAC5C,4BAAA,iBAAiB,OAAO,OAAO;AAAA,eAC5C,OAAO;AACdC,sBAAA,MAAM,MAAM,2BAA2B;AAAA,MAAA;AAAA,IAE3C;AAGE,WAAAC,2BAAA,kBAAA;AAAA,MAACC,oBAAA;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACL,GAAG;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV;AAAA,QAEA,aAAa,EAAE,gBAAgB,WAAW;AAAA,MAAA;AAAA,IAC5C;AAAA,EAAA;AAGN;;"}
1
+ {"version":3,"file":"Watchers.cjs.js","sources":["../../../../../src/components/Watchers/Watchers.tsx"],"sourcesContent":["import { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } from '@shared/api'\nimport { DropdownRef, WatcherSelect, WatcherSelectProps } from '@ynput/ayon-react-components'\nimport { forwardRef } from 'react'\nimport { toast } from 'react-toastify'\n\ninterface WatchersProps extends Omit<WatcherSelectProps, 'currentUser' | 'value'> {\n entities: { id: string; projectName: string }[]\n entityType: string\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n userName: string\n}\n\nexport const Watchers = forwardRef<DropdownRef, WatchersProps>(\n ({ entities, entityType, onWatchersUpdate, userName, ...props }, ref) => {\n const entitiesQuery = entities.map((entity) => ({\n entityId: entity.id,\n entityType,\n projectName: entity.projectName,\n }))\n\n const { data: watchers = [] } = useGetEntitiesWatchersQuery(\n {\n entities: entitiesQuery,\n },\n { skip: !entities.length },\n )\n\n // merge all watchers into a single unique array\n const uniqueWatchers = Array.from(new Set(watchers.flatMap((watcher) => watcher.watchers)))\n\n const [setEntitiesWatchers] = useSetEntitiesWatchersMutation()\n\n const handleChange = async (value: string[]) => {\n // find the difference between the current watchers and the new watchers\n // which users were added and which were removed\n const added = value.filter((watcher) => !uniqueWatchers.includes(watcher))\n const removed = uniqueWatchers.filter((watcher) => !value.includes(watcher))\n\n // for each entity, add or remove the watchers\n // we do this to preserve the unique watchers for each entity (rather than setting the same watchers for all entities)\n const updatedEntities = watchers.map((entity) => {\n // first remove\n const newWatchers = entity.watchers.filter((watcher) => !removed.includes(watcher))\n // then add\n newWatchers.push(...added)\n\n return {\n ...entity,\n watchers: newWatchers,\n }\n })\n\n // update\n try {\n await setEntitiesWatchers({ entities: updatedEntities }).unwrap()\n onWatchersUpdate && onWatchersUpdate(added, removed)\n } catch (error) {\n toast.error('Failed to update watchers')\n }\n }\n\n return (\n <WatcherSelect\n align=\"right\"\n {...props}\n value={uniqueWatchers}\n currentUser={userName}\n onChange={handleChange}\n ref={ref}\n // @ts-expect-error\n buttonProps={{ 'data-tooltip': 'Watchers' }}\n />\n )\n },\n)\n"],"names":["forwardRef","useGetEntitiesWatchersQuery","useSetEntitiesWatchersMutation","toast","jsx","WatcherSelect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAWA,MAAA;AAAA,EACtB,CAAC,EAAE,UAAU,YAAY,kBAAkB,UAAU,GAAG,MAAM,GAAG,QAAQ;AACvE,UAAM,gBAAgB,SAAS,IAAI,CAAC,YAAY;AAAA,MAC9C,UAAU,OAAO;AAAA,MACjB;AAAA,MACA,aAAa,OAAO;AAAA,IAAA,EACpB;AAEF,UAAM,EAAE,MAAM,WAAW,CAAA,EAAO,IAAAC,YAAA;AAAA,MAC9B;AAAA,QACE,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,CAAC,SAAS,OAAO;AAAA,IAC3B;AAGA,UAAM,iBAAiB,MAAM,KAAK,IAAI,IAAI,SAAS,QAAQ,CAAC,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAEpF,UAAA,CAAC,mBAAmB,IAAIC,2CAA+B;AAEvD,UAAA,eAAe,OAAO,UAAoB;AAGxC,YAAA,QAAQ,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,SAAS,OAAO,CAAC;AACnE,YAAA,UAAU,eAAe,OAAO,CAAC,YAAY,CAAC,MAAM,SAAS,OAAO,CAAC;AAI3E,YAAM,kBAAkB,SAAS,IAAI,CAAC,WAAW;AAEzC,cAAA,cAAc,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS,OAAO,CAAC;AAEtE,oBAAA,KAAK,GAAG,KAAK;AAElB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MAAA,CACD;AAGG,UAAA;AACF,cAAM,oBAAoB,EAAE,UAAU,gBAAiB,CAAA,EAAE,OAAO;AAC5C,4BAAA,iBAAiB,OAAO,OAAO;AAAA,eAC5C,OAAO;AACdC,sBAAA,MAAM,MAAM,2BAA2B;AAAA,MAAA;AAAA,IAE3C;AAGE,WAAAC,2BAAA,kBAAA;AAAA,MAACC,oBAAA;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACL,GAAG;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV;AAAA,QAEA,aAAa,EAAE,gBAAgB,WAAW;AAAA,MAAA;AAAA,IAC5C;AAAA,EAAA;AAGN;;"}
@@ -66,6 +66,8 @@ import "../../api/queries/users/updateUsers.es.js";
66
66
  import { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } from "../../api/queries/watchers/getWatchers.es.js";
67
67
  import "../../api/queries/permissions/getPermissions.es.js";
68
68
  import "../../api/queries/grouping/getGrouping.es.js";
69
+ import "../../api/queries/versions/updateVersions.es.js";
70
+ import "../../api/queries/products/createProduct.es.js";
69
71
  import { WatcherSelect } from "@ynput/ayon-react-components";
70
72
  import { forwardRef } from "react";
71
73
  import { toast } from "react-toastify";
@@ -1 +1 @@
1
- {"version":3,"file":"Watchers.es.js","sources":["../../../../../src/components/Watchers/Watchers.tsx"],"sourcesContent":["import { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } from '@shared/api'\nimport { DropdownRef, WatcherSelect, WatcherSelectProps } from '@ynput/ayon-react-components'\nimport { forwardRef } from 'react'\nimport { toast } from 'react-toastify'\n\ninterface WatchersProps extends Omit<WatcherSelectProps, 'currentUser' | 'value'> {\n entities: { id: string; projectName: string }[]\n entityType: string\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n userName: string\n}\n\nexport const Watchers = forwardRef<DropdownRef, WatchersProps>(\n ({ entities, entityType, onWatchersUpdate, userName, ...props }, ref) => {\n const entitiesQuery = entities.map((entity) => ({\n entityId: entity.id,\n entityType,\n projectName: entity.projectName,\n }))\n\n const { data: watchers = [] } = useGetEntitiesWatchersQuery(\n {\n entities: entitiesQuery,\n },\n { skip: !entities.length },\n )\n\n // merge all watchers into a single unique array\n const uniqueWatchers = Array.from(new Set(watchers.flatMap((watcher) => watcher.watchers)))\n\n const [setEntitiesWatchers] = useSetEntitiesWatchersMutation()\n\n const handleChange = async (value: string[]) => {\n // find the difference between the current watchers and the new watchers\n // which users were added and which were removed\n const added = value.filter((watcher) => !uniqueWatchers.includes(watcher))\n const removed = uniqueWatchers.filter((watcher) => !value.includes(watcher))\n\n // for each entity, add or remove the watchers\n // we do this to preserve the unique watchers for each entity (rather than setting the same watchers for all entities)\n const updatedEntities = watchers.map((entity) => {\n // first remove\n const newWatchers = entity.watchers.filter((watcher) => !removed.includes(watcher))\n // then add\n newWatchers.push(...added)\n\n return {\n ...entity,\n watchers: newWatchers,\n }\n })\n\n // update\n try {\n await setEntitiesWatchers({ entities: updatedEntities }).unwrap()\n onWatchersUpdate && onWatchersUpdate(added, removed)\n } catch (error) {\n toast.error('Failed to update watchers')\n }\n }\n\n return (\n <WatcherSelect\n align=\"right\"\n {...props}\n value={uniqueWatchers}\n currentUser={userName}\n onChange={handleChange}\n ref={ref}\n // @ts-expect-error\n buttonProps={{ 'data-tooltip': 'Watchers' }}\n />\n )\n },\n)\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAW;AAAA,EACtB,CAAC,EAAE,UAAU,YAAY,kBAAkB,UAAU,GAAG,MAAM,GAAG,QAAQ;AACvE,UAAM,gBAAgB,SAAS,IAAI,CAAC,YAAY;AAAA,MAC9C,UAAU,OAAO;AAAA,MACjB;AAAA,MACA,aAAa,OAAO;AAAA,IAAA,EACpB;AAEF,UAAM,EAAE,MAAM,WAAW,CAAA,EAAO,IAAA;AAAA,MAC9B;AAAA,QACE,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,CAAC,SAAS,OAAO;AAAA,IAC3B;AAGA,UAAM,iBAAiB,MAAM,KAAK,IAAI,IAAI,SAAS,QAAQ,CAAC,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAEpF,UAAA,CAAC,mBAAmB,IAAI,+BAA+B;AAEvD,UAAA,eAAe,OAAO,UAAoB;AAGxC,YAAA,QAAQ,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,SAAS,OAAO,CAAC;AACnE,YAAA,UAAU,eAAe,OAAO,CAAC,YAAY,CAAC,MAAM,SAAS,OAAO,CAAC;AAI3E,YAAM,kBAAkB,SAAS,IAAI,CAAC,WAAW;AAEzC,cAAA,cAAc,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS,OAAO,CAAC;AAEtE,oBAAA,KAAK,GAAG,KAAK;AAElB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MAAA,CACD;AAGG,UAAA;AACF,cAAM,oBAAoB,EAAE,UAAU,gBAAiB,CAAA,EAAE,OAAO;AAC5C,4BAAA,iBAAiB,OAAO,OAAO;AAAA,eAC5C,OAAO;AACd,cAAM,MAAM,2BAA2B;AAAA,MAAA;AAAA,IAE3C;AAGE,WAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACL,GAAG;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV;AAAA,QAEA,aAAa,EAAE,gBAAgB,WAAW;AAAA,MAAA;AAAA,IAC5C;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"Watchers.es.js","sources":["../../../../../src/components/Watchers/Watchers.tsx"],"sourcesContent":["import { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } from '@shared/api'\nimport { DropdownRef, WatcherSelect, WatcherSelectProps } from '@ynput/ayon-react-components'\nimport { forwardRef } from 'react'\nimport { toast } from 'react-toastify'\n\ninterface WatchersProps extends Omit<WatcherSelectProps, 'currentUser' | 'value'> {\n entities: { id: string; projectName: string }[]\n entityType: string\n onWatchersUpdate?: (added: any[], removed: any[]) => void\n userName: string\n}\n\nexport const Watchers = forwardRef<DropdownRef, WatchersProps>(\n ({ entities, entityType, onWatchersUpdate, userName, ...props }, ref) => {\n const entitiesQuery = entities.map((entity) => ({\n entityId: entity.id,\n entityType,\n projectName: entity.projectName,\n }))\n\n const { data: watchers = [] } = useGetEntitiesWatchersQuery(\n {\n entities: entitiesQuery,\n },\n { skip: !entities.length },\n )\n\n // merge all watchers into a single unique array\n const uniqueWatchers = Array.from(new Set(watchers.flatMap((watcher) => watcher.watchers)))\n\n const [setEntitiesWatchers] = useSetEntitiesWatchersMutation()\n\n const handleChange = async (value: string[]) => {\n // find the difference between the current watchers and the new watchers\n // which users were added and which were removed\n const added = value.filter((watcher) => !uniqueWatchers.includes(watcher))\n const removed = uniqueWatchers.filter((watcher) => !value.includes(watcher))\n\n // for each entity, add or remove the watchers\n // we do this to preserve the unique watchers for each entity (rather than setting the same watchers for all entities)\n const updatedEntities = watchers.map((entity) => {\n // first remove\n const newWatchers = entity.watchers.filter((watcher) => !removed.includes(watcher))\n // then add\n newWatchers.push(...added)\n\n return {\n ...entity,\n watchers: newWatchers,\n }\n })\n\n // update\n try {\n await setEntitiesWatchers({ entities: updatedEntities }).unwrap()\n onWatchersUpdate && onWatchersUpdate(added, removed)\n } catch (error) {\n toast.error('Failed to update watchers')\n }\n }\n\n return (\n <WatcherSelect\n align=\"right\"\n {...props}\n value={uniqueWatchers}\n currentUser={userName}\n onChange={handleChange}\n ref={ref}\n // @ts-expect-error\n buttonProps={{ 'data-tooltip': 'Watchers' }}\n />\n )\n },\n)\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAW;AAAA,EACtB,CAAC,EAAE,UAAU,YAAY,kBAAkB,UAAU,GAAG,MAAM,GAAG,QAAQ;AACvE,UAAM,gBAAgB,SAAS,IAAI,CAAC,YAAY;AAAA,MAC9C,UAAU,OAAO;AAAA,MACjB;AAAA,MACA,aAAa,OAAO;AAAA,IAAA,EACpB;AAEF,UAAM,EAAE,MAAM,WAAW,CAAA,EAAO,IAAA;AAAA,MAC9B;AAAA,QACE,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,CAAC,SAAS,OAAO;AAAA,IAC3B;AAGA,UAAM,iBAAiB,MAAM,KAAK,IAAI,IAAI,SAAS,QAAQ,CAAC,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAEpF,UAAA,CAAC,mBAAmB,IAAI,+BAA+B;AAEvD,UAAA,eAAe,OAAO,UAAoB;AAGxC,YAAA,QAAQ,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,SAAS,OAAO,CAAC;AACnE,YAAA,UAAU,eAAe,OAAO,CAAC,YAAY,CAAC,MAAM,SAAS,OAAO,CAAC;AAI3E,YAAM,kBAAkB,SAAS,IAAI,CAAC,WAAW;AAEzC,cAAA,cAAc,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,QAAQ,SAAS,OAAO,CAAC;AAEtE,oBAAA,KAAK,GAAG,KAAK;AAElB,eAAA;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MAAA,CACD;AAGG,UAAA;AACF,cAAM,oBAAoB,EAAE,UAAU,gBAAiB,CAAA,EAAE,OAAO;AAC5C,4BAAA,iBAAiB,OAAO,OAAO;AAAA,eAC5C,OAAO;AACd,cAAM,MAAM,2BAA2B;AAAA,MAAA;AAAA,IAE3C;AAGE,WAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACL,GAAG;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV;AAAA,QAEA,aAAa,EAAE,gBAAgB,WAAW;AAAA,MAAA;AAAA,IAC5C;AAAA,EAAA;AAGN;"}
@@ -75,6 +75,8 @@ require("../../api/queries/users/updateUsers.cjs.js");
75
75
  require("../../api/queries/watchers/getWatchers.cjs.js");
76
76
  require("../../api/queries/permissions/getPermissions.cjs.js");
77
77
  require("../../api/queries/grouping/getGrouping.cjs.js");
78
+ require("../../api/queries/versions/updateVersions.cjs.js");
79
+ require("../../api/queries/products/createProduct.cjs.js");
78
80
  require("@dnd-kit/core");
79
81
  require("@dnd-kit/sortable");
80
82
  require("../../components/ReviewablesList/ReviewablesList.styled.cjs.js");
@@ -82,8 +84,8 @@ require("../ContextMenu/ContextMenuContext.cjs.js");
82
84
  ;/* empty css */
83
85
  require("lodash");
84
86
  require("../../util/pubsub.cjs.js");
85
- require("axios");
86
87
  require("../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");
88
+ require("axios");
87
89
  require("../../context/RemoteModulesContext.cjs.js");
88
90
  require("../../context/DetailsPanelContext.cjs.js");
89
91
  require("../../context/ThumbnailUploaderContext.cjs.js");
@@ -136,6 +138,11 @@ require("../ProjectTreeTable/context/ColumnSettingsContext.cjs.js");
136
138
  require("../ProjectTreeTable/context/ProjectTableContext.cjs.js");
137
139
  require("../ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");
138
140
  require("../ProjectTreeTable/context/SelectedRowsContext.cjs.js");
141
+ require("../../../../_virtual/runtime.cjs.js");
142
+ require("../../../../_virtual/semver.cjs.js");
143
+ require("react-redux");
144
+ require("custom-protocol-check");
145
+ require("../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");
139
146
  require("../ProjectTreeTable/context/ProjectDataContext.cjs.js");
140
147
  require("../ProjectTreeTable/widgets/CollapsedWidget.cjs.js");
141
148
  require("../ProjectTreeTable/widgets/DateWidget.cjs.js");
@@ -150,22 +157,17 @@ require("../ProjectTreeTable/ProjectTreeTable.styled.cjs.js");
150
157
  require("../ProjectTreeTable/components/SelectionCell.cjs.js");
151
158
  require("../ProjectTreeTable/components/RowSelectionHeader.cjs.js");
152
159
  require("../ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");
153
- require("../../../../_virtual/runtime.cjs.js");
154
- require("../../../../_virtual/semver.cjs.js");
155
- require("react-redux");
156
- require("custom-protocol-check");
157
- require("../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");
158
160
  require("../DetailsPanel/DetailsPanel.styled.cjs.js");
159
161
  require("../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");
160
162
  require("../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");
163
+ require("../../components/PlayableIcon/PlayableIcon.cjs.js");
161
164
  require("../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");
162
165
  require("../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");
163
166
  require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");
164
167
  require("./Actions.styled.cjs.js");
165
168
  require("./ActionsDropdown/ActionsDropdown.cjs.js");
166
169
  require("./ActionIcon.cjs.js");
167
- require("../../components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js");
168
- require("../../components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js");
170
+ require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");
169
171
  const SimpleFormDialog = require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");
170
172
  require("../../components/EntityPath/EntityPath.styled.cjs.js");
171
173
  require("../../components/EntityPath/SegmentProvider.cjs.js");
@@ -181,6 +183,8 @@ require("../../components/AttributeEditor/components/MinMaxField.cjs.js");
181
183
  require("../../components/EnumEditor/EnumEditor.styled.cjs.js");
182
184
  require("../../components/SearchFilter/filterDates.cjs.js");
183
185
  require("../../components/Badge/Badge.cjs.js");
186
+ require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js");
187
+ require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");
184
188
  const ActionConfigDialog = ({ action, onClose, context }) => {
185
189
  const requestParams = React.useMemo(() => {
186
190
  if (!action) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionConfigDialog.cjs.js","sources":["../../../../../src/containers/Actions/ActionConfigDialog.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { toast } from 'react-toastify'\nimport { SimpleFormDialog } from '@shared/components'\nimport type { SimpleFormValueDict } from '@shared/components'\n\nimport { useGetActionConfigQuery, useSetActionConfigMutation } from '@shared/api'\nimport type { ActionContext, BaseActionManifest } from '@shared/api'\n\ntype ConfigData = Record<string, any>\n\ninterface ActionConfigDialogProps {\n action: BaseActionManifest\n context: ActionContext\n onClose: () => void\n}\n\ninterface ActionConfigRequestQueryParams {\n addonName: string\n addonVersion: string\n variant?: string\n identifier: string\n}\n\nexport const ActionConfigDialog = ({ action, onClose, context }: ActionConfigDialogProps) => {\n const requestParams: ActionConfigRequestQueryParams | null =\n useMemo<ActionConfigRequestQueryParams | null>(() => {\n if (!action) return null\n if (!(action.addonName && action.addonVersion)) return null // this should never happen\n return {\n addonName: action.addonName,\n addonVersion: action.addonVersion,\n variant: action.variant,\n identifier: action.identifier,\n }\n }, [action])\n\n const [configureAction] = useSetActionConfigMutation()\n\n // make typescript happily unknowing about the type\n // because even if we pass skip, arguments are still required in the right type. that's cursed\n const qp: any = { actionConfig: context, ...(requestParams || {}) }\n const { data: initValues } = useGetActionConfigQuery(qp, { skip: !requestParams })\n\n // it would be sooo cool if i could do this BEFORE the query and ommit that\n // qp thing, but i can't. because it would change the hook order. ffs\n if (!(initValues && action?.configFields && action && requestParams)) {\n return null\n }\n\n const handleSubmit = async (data: ConfigData) => {\n try {\n await configureAction({\n actionConfig: { ...context, value: data },\n ...requestParams,\n }).unwrap()\n onClose()\n } catch (error) {\n console.warn('Error configuring action', error)\n toast.error('Unable to set the action configuration')\n }\n }\n\n return (\n <SimpleFormDialog\n isOpen\n title={`Configure action ${action.label}`}\n fields={action.configFields}\n values={initValues as SimpleFormValueDict}\n onClose={onClose}\n onSubmit={handleSubmit}\n submitLabel=\"Save action config\"\n cancelLabel=\"Cancel\"\n submitIcon=\"check\"\n cancelIcon=\"close\"\n />\n )\n}\n"],"names":["useMemo","useSetActionConfigMutation","useGetActionConfigQuery","toast","jsx","SimpleFormDialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAS,cAAuC;AACrF,QAAA,gBACJA,MAAAA,QAA+C,MAAM;AAC/C,QAAA,CAAC,OAAe,QAAA;AACpB,QAAI,EAAE,OAAO,aAAa,OAAO,cAAsB,QAAA;AAChD,WAAA;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEP,QAAA,CAAC,eAAe,IAAIC,sCAA2B;AAIrD,QAAM,KAAU,EAAE,cAAc,SAAS,GAAI,iBAAiB,CAAA,EAAI;AAC5D,QAAA,EAAE,MAAM,eAAeC,WAAAA,wBAAwB,IAAI,EAAE,MAAM,CAAC,eAAe;AAIjF,MAAI,EAAE,eAAc,iCAAQ,iBAAgB,UAAU,gBAAgB;AAC7D,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,OAAO,SAAqB;AAC3C,QAAA;AACF,YAAM,gBAAgB;AAAA,QACpB,cAAc,EAAE,GAAG,SAAS,OAAO,KAAK;AAAA,QACxC,GAAG;AAAA,MACJ,CAAA,EAAE,OAAO;AACF,cAAA;AAAA,aACD,OAAO;AACN,cAAA,KAAK,4BAA4B,KAAK;AAC9CC,oBAAA,MAAM,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAExD;AAGE,SAAAC,2BAAA,kBAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAM;AAAA,MACN,OAAO,oBAAoB,OAAO,KAAK;AAAA,MACvC,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,YAAW;AAAA,MACX,YAAW;AAAA,IAAA;AAAA,EACb;AAEJ;;"}
1
+ {"version":3,"file":"ActionConfigDialog.cjs.js","sources":["../../../../../src/containers/Actions/ActionConfigDialog.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { toast } from 'react-toastify'\nimport { SimpleFormDialog } from '@shared/components'\nimport type { SimpleFormValueDict } from '@shared/components'\n\nimport { useGetActionConfigQuery, useSetActionConfigMutation } from '@shared/api'\nimport type { ActionContext, BaseActionManifest } from '@shared/api'\n\ntype ConfigData = Record<string, any>\n\ninterface ActionConfigDialogProps {\n action: BaseActionManifest\n context: ActionContext\n onClose: () => void\n}\n\ninterface ActionConfigRequestQueryParams {\n addonName: string\n addonVersion: string\n variant?: string\n identifier: string\n}\n\nexport const ActionConfigDialog = ({ action, onClose, context }: ActionConfigDialogProps) => {\n const requestParams: ActionConfigRequestQueryParams | null =\n useMemo<ActionConfigRequestQueryParams | null>(() => {\n if (!action) return null\n if (!(action.addonName && action.addonVersion)) return null // this should never happen\n return {\n addonName: action.addonName,\n addonVersion: action.addonVersion,\n variant: action.variant,\n identifier: action.identifier,\n }\n }, [action])\n\n const [configureAction] = useSetActionConfigMutation()\n\n // make typescript happily unknowing about the type\n // because even if we pass skip, arguments are still required in the right type. that's cursed\n const qp: any = { actionConfig: context, ...(requestParams || {}) }\n const { data: initValues } = useGetActionConfigQuery(qp, { skip: !requestParams })\n\n // it would be sooo cool if i could do this BEFORE the query and ommit that\n // qp thing, but i can't. because it would change the hook order. ffs\n if (!(initValues && action?.configFields && action && requestParams)) {\n return null\n }\n\n const handleSubmit = async (data: ConfigData) => {\n try {\n await configureAction({\n actionConfig: { ...context, value: data },\n ...requestParams,\n }).unwrap()\n onClose()\n } catch (error) {\n console.warn('Error configuring action', error)\n toast.error('Unable to set the action configuration')\n }\n }\n\n return (\n <SimpleFormDialog\n isOpen\n title={`Configure action ${action.label}`}\n fields={action.configFields}\n values={initValues as SimpleFormValueDict}\n onClose={onClose}\n onSubmit={handleSubmit}\n submitLabel=\"Save action config\"\n cancelLabel=\"Cancel\"\n submitIcon=\"check\"\n cancelIcon=\"close\"\n />\n )\n}\n"],"names":["useMemo","useSetActionConfigMutation","useGetActionConfigQuery","toast","jsx","SimpleFormDialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAS,cAAuC;AACrF,QAAA,gBACJA,MAAAA,QAA+C,MAAM;AAC/C,QAAA,CAAC,OAAe,QAAA;AACpB,QAAI,EAAE,OAAO,aAAa,OAAO,cAAsB,QAAA;AAChD,WAAA;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEP,QAAA,CAAC,eAAe,IAAIC,sCAA2B;AAIrD,QAAM,KAAU,EAAE,cAAc,SAAS,GAAI,iBAAiB,CAAA,EAAI;AAC5D,QAAA,EAAE,MAAM,eAAeC,WAAAA,wBAAwB,IAAI,EAAE,MAAM,CAAC,eAAe;AAIjF,MAAI,EAAE,eAAc,iCAAQ,iBAAgB,UAAU,gBAAgB;AAC7D,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,OAAO,SAAqB;AAC3C,QAAA;AACF,YAAM,gBAAgB;AAAA,QACpB,cAAc,EAAE,GAAG,SAAS,OAAO,KAAK;AAAA,QACxC,GAAG;AAAA,MACJ,CAAA,EAAE,OAAO;AACF,cAAA;AAAA,aACD,OAAO;AACN,cAAA,KAAK,4BAA4B,KAAK;AAC9CC,oBAAA,MAAM,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAExD;AAGE,SAAAC,2BAAA,kBAAA;AAAA,IAACC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAM;AAAA,MACN,OAAO,oBAAoB,OAAO,KAAK;AAAA,MACvC,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,YAAW;AAAA,MACX,YAAW;AAAA,IAAA;AAAA,EACb;AAEJ;;"}
@@ -73,6 +73,8 @@ import "../../api/queries/users/updateUsers.es.js";
73
73
  import "../../api/queries/watchers/getWatchers.es.js";
74
74
  import "../../api/queries/permissions/getPermissions.es.js";
75
75
  import "../../api/queries/grouping/getGrouping.es.js";
76
+ import "../../api/queries/versions/updateVersions.es.js";
77
+ import "../../api/queries/products/createProduct.es.js";
76
78
  import "@dnd-kit/core";
77
79
  import "@dnd-kit/sortable";
78
80
  import "../../components/ReviewablesList/ReviewablesList.styled.es.js";
@@ -80,8 +82,8 @@ import "../ContextMenu/ContextMenuContext.es.js";
80
82
  /* empty css */
81
83
  import "lodash";
82
84
  import "../../util/pubsub.es.js";
83
- import "axios";
84
85
  import "../../components/ReviewablesList/ReviewablesUpload.styled.es.js";
86
+ import "axios";
85
87
  import "../../context/RemoteModulesContext.es.js";
86
88
  import "../../context/DetailsPanelContext.es.js";
87
89
  import "../../context/ThumbnailUploaderContext.es.js";
@@ -134,6 +136,11 @@ import "../ProjectTreeTable/context/ColumnSettingsContext.es.js";
134
136
  import "../ProjectTreeTable/context/ProjectTableContext.es.js";
135
137
  import "../ProjectTreeTable/context/ProjectTableQueriesContext.es.js";
136
138
  import "../ProjectTreeTable/context/SelectedRowsContext.es.js";
139
+ import "../../../../_virtual/runtime.es.js";
140
+ import "../../../../_virtual/semver.es.js";
141
+ import "react-redux";
142
+ import "custom-protocol-check";
143
+ import "../ProjectTreeTable/components/GroupSettingsFallback.es.js";
137
144
  import "../ProjectTreeTable/context/ProjectDataContext.es.js";
138
145
  import "../ProjectTreeTable/widgets/CollapsedWidget.es.js";
139
146
  import "../ProjectTreeTable/widgets/DateWidget.es.js";
@@ -148,22 +155,17 @@ import "../ProjectTreeTable/ProjectTreeTable.styled.es.js";
148
155
  import "../ProjectTreeTable/components/SelectionCell.es.js";
149
156
  import "../ProjectTreeTable/components/RowSelectionHeader.es.js";
150
157
  import "../ProjectTreeTable/widgets/LoadMoreWidget.es.js";
151
- import "../../../../_virtual/runtime.es.js";
152
- import "../../../../_virtual/semver.es.js";
153
- import "react-redux";
154
- import "custom-protocol-check";
155
- import "../ProjectTreeTable/components/GroupSettingsFallback.es.js";
156
158
  import "../DetailsPanel/DetailsPanel.styled.es.js";
157
159
  import "../DetailsPanel/FeedFilters/FeedFilters.styled.es.js";
158
160
  import "../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
161
+ import "../../components/PlayableIcon/PlayableIcon.es.js";
159
162
  import "../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js";
160
163
  import "../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.es.js";
161
164
  import "../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.es.js";
162
165
  import "./Actions.styled.es.js";
163
166
  import "./ActionsDropdown/ActionsDropdown.es.js";
164
167
  import "./ActionIcon.es.js";
165
- import "../../components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js";
166
- import "../../components/ThumbnailUploader/ThumbnailUploader.styled.es.js";
168
+ import "../../components/EntityPanelUploader/EntityPanelUploader.styled.es.js";
167
169
  import { SimpleFormDialog } from "../../components/SimpleFormDialog/SimpleFormDialog.es.js";
168
170
  import "../../components/EntityPath/EntityPath.styled.es.js";
169
171
  import "../../components/EntityPath/SegmentProvider.es.js";
@@ -179,6 +181,8 @@ import "../../components/AttributeEditor/components/MinMaxField.es.js";
179
181
  import "../../components/EnumEditor/EnumEditor.styled.es.js";
180
182
  import "../../components/SearchFilter/filterDates.es.js";
181
183
  import "../../components/Badge/Badge.es.js";
184
+ import "../../components/VersionUploader/components/UploadVersionDialog.es.js";
185
+ import "../../components/VersionUploader/context/VersionUploadContext.es.js";
182
186
  const ActionConfigDialog = ({ action, onClose, context }) => {
183
187
  const requestParams = useMemo(() => {
184
188
  if (!action) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionConfigDialog.es.js","sources":["../../../../../src/containers/Actions/ActionConfigDialog.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { toast } from 'react-toastify'\nimport { SimpleFormDialog } from '@shared/components'\nimport type { SimpleFormValueDict } from '@shared/components'\n\nimport { useGetActionConfigQuery, useSetActionConfigMutation } from '@shared/api'\nimport type { ActionContext, BaseActionManifest } from '@shared/api'\n\ntype ConfigData = Record<string, any>\n\ninterface ActionConfigDialogProps {\n action: BaseActionManifest\n context: ActionContext\n onClose: () => void\n}\n\ninterface ActionConfigRequestQueryParams {\n addonName: string\n addonVersion: string\n variant?: string\n identifier: string\n}\n\nexport const ActionConfigDialog = ({ action, onClose, context }: ActionConfigDialogProps) => {\n const requestParams: ActionConfigRequestQueryParams | null =\n useMemo<ActionConfigRequestQueryParams | null>(() => {\n if (!action) return null\n if (!(action.addonName && action.addonVersion)) return null // this should never happen\n return {\n addonName: action.addonName,\n addonVersion: action.addonVersion,\n variant: action.variant,\n identifier: action.identifier,\n }\n }, [action])\n\n const [configureAction] = useSetActionConfigMutation()\n\n // make typescript happily unknowing about the type\n // because even if we pass skip, arguments are still required in the right type. that's cursed\n const qp: any = { actionConfig: context, ...(requestParams || {}) }\n const { data: initValues } = useGetActionConfigQuery(qp, { skip: !requestParams })\n\n // it would be sooo cool if i could do this BEFORE the query and ommit that\n // qp thing, but i can't. because it would change the hook order. ffs\n if (!(initValues && action?.configFields && action && requestParams)) {\n return null\n }\n\n const handleSubmit = async (data: ConfigData) => {\n try {\n await configureAction({\n actionConfig: { ...context, value: data },\n ...requestParams,\n }).unwrap()\n onClose()\n } catch (error) {\n console.warn('Error configuring action', error)\n toast.error('Unable to set the action configuration')\n }\n }\n\n return (\n <SimpleFormDialog\n isOpen\n title={`Configure action ${action.label}`}\n fields={action.configFields}\n values={initValues as SimpleFormValueDict}\n onClose={onClose}\n onSubmit={handleSubmit}\n submitLabel=\"Save action config\"\n cancelLabel=\"Cancel\"\n submitIcon=\"check\"\n cancelIcon=\"close\"\n />\n )\n}\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAS,cAAuC;AACrF,QAAA,gBACJ,QAA+C,MAAM;AAC/C,QAAA,CAAC,OAAe,QAAA;AACpB,QAAI,EAAE,OAAO,aAAa,OAAO,cAAsB,QAAA;AAChD,WAAA;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEP,QAAA,CAAC,eAAe,IAAI,2BAA2B;AAIrD,QAAM,KAAU,EAAE,cAAc,SAAS,GAAI,iBAAiB,CAAA,EAAI;AAC5D,QAAA,EAAE,MAAM,eAAe,wBAAwB,IAAI,EAAE,MAAM,CAAC,eAAe;AAIjF,MAAI,EAAE,eAAc,iCAAQ,iBAAgB,UAAU,gBAAgB;AAC7D,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,OAAO,SAAqB;AAC3C,QAAA;AACF,YAAM,gBAAgB;AAAA,QACpB,cAAc,EAAE,GAAG,SAAS,OAAO,KAAK;AAAA,QACxC,GAAG;AAAA,MACJ,CAAA,EAAE,OAAO;AACF,cAAA;AAAA,aACD,OAAO;AACN,cAAA,KAAK,4BAA4B,KAAK;AAC9C,YAAM,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAExD;AAGE,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAM;AAAA,MACN,OAAO,oBAAoB,OAAO,KAAK;AAAA,MACvC,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,YAAW;AAAA,MACX,YAAW;AAAA,IAAA;AAAA,EACb;AAEJ;"}
1
+ {"version":3,"file":"ActionConfigDialog.es.js","sources":["../../../../../src/containers/Actions/ActionConfigDialog.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { toast } from 'react-toastify'\nimport { SimpleFormDialog } from '@shared/components'\nimport type { SimpleFormValueDict } from '@shared/components'\n\nimport { useGetActionConfigQuery, useSetActionConfigMutation } from '@shared/api'\nimport type { ActionContext, BaseActionManifest } from '@shared/api'\n\ntype ConfigData = Record<string, any>\n\ninterface ActionConfigDialogProps {\n action: BaseActionManifest\n context: ActionContext\n onClose: () => void\n}\n\ninterface ActionConfigRequestQueryParams {\n addonName: string\n addonVersion: string\n variant?: string\n identifier: string\n}\n\nexport const ActionConfigDialog = ({ action, onClose, context }: ActionConfigDialogProps) => {\n const requestParams: ActionConfigRequestQueryParams | null =\n useMemo<ActionConfigRequestQueryParams | null>(() => {\n if (!action) return null\n if (!(action.addonName && action.addonVersion)) return null // this should never happen\n return {\n addonName: action.addonName,\n addonVersion: action.addonVersion,\n variant: action.variant,\n identifier: action.identifier,\n }\n }, [action])\n\n const [configureAction] = useSetActionConfigMutation()\n\n // make typescript happily unknowing about the type\n // because even if we pass skip, arguments are still required in the right type. that's cursed\n const qp: any = { actionConfig: context, ...(requestParams || {}) }\n const { data: initValues } = useGetActionConfigQuery(qp, { skip: !requestParams })\n\n // it would be sooo cool if i could do this BEFORE the query and ommit that\n // qp thing, but i can't. because it would change the hook order. ffs\n if (!(initValues && action?.configFields && action && requestParams)) {\n return null\n }\n\n const handleSubmit = async (data: ConfigData) => {\n try {\n await configureAction({\n actionConfig: { ...context, value: data },\n ...requestParams,\n }).unwrap()\n onClose()\n } catch (error) {\n console.warn('Error configuring action', error)\n toast.error('Unable to set the action configuration')\n }\n }\n\n return (\n <SimpleFormDialog\n isOpen\n title={`Configure action ${action.label}`}\n fields={action.configFields}\n values={initValues as SimpleFormValueDict}\n onClose={onClose}\n onSubmit={handleSubmit}\n submitLabel=\"Save action config\"\n cancelLabel=\"Cancel\"\n submitIcon=\"check\"\n cancelIcon=\"close\"\n />\n )\n}\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,MAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAS,cAAuC;AACrF,QAAA,gBACJ,QAA+C,MAAM;AAC/C,QAAA,CAAC,OAAe,QAAA;AACpB,QAAI,EAAE,OAAO,aAAa,OAAO,cAAsB,QAAA;AAChD,WAAA;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEP,QAAA,CAAC,eAAe,IAAI,2BAA2B;AAIrD,QAAM,KAAU,EAAE,cAAc,SAAS,GAAI,iBAAiB,CAAA,EAAI;AAC5D,QAAA,EAAE,MAAM,eAAe,wBAAwB,IAAI,EAAE,MAAM,CAAC,eAAe;AAIjF,MAAI,EAAE,eAAc,iCAAQ,iBAAgB,UAAU,gBAAgB;AAC7D,WAAA;AAAA,EAAA;AAGH,QAAA,eAAe,OAAO,SAAqB;AAC3C,QAAA;AACF,YAAM,gBAAgB;AAAA,QACpB,cAAc,EAAE,GAAG,SAAS,OAAO,KAAK;AAAA,QACxC,GAAG;AAAA,MACJ,CAAA,EAAE,OAAO;AACF,cAAA;AAAA,aACD,OAAO;AACN,cAAA,KAAK,4BAA4B,KAAK;AAC9C,YAAM,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAExD;AAGE,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAM;AAAA,MACN,OAAO,oBAAoB,OAAO,KAAK;AAAA,MACvC,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,YAAW;AAAA,MACX,YAAW;AAAA,IAAA;AAAA,EACb;AAEJ;"}
@@ -72,6 +72,8 @@ require("../../api/queries/users/updateUsers.cjs.js");
72
72
  require("../../api/queries/watchers/getWatchers.cjs.js");
73
73
  require("../../api/queries/permissions/getPermissions.cjs.js");
74
74
  require("../../api/queries/grouping/getGrouping.cjs.js");
75
+ require("../../api/queries/versions/updateVersions.cjs.js");
76
+ require("../../api/queries/products/createProduct.cjs.js");
75
77
  const ActionsDropdown = require("./ActionsDropdown/ActionsDropdown.cjs.js");
76
78
  const ActionIcon = require("./ActionIcon.cjs.js");
77
79
  require("../../context/RemoteModulesContext.cjs.js");
@@ -105,8 +107,11 @@ const Actions = ({
105
107
  projectActionsProjectName,
106
108
  searchParams,
107
109
  featuredCount = 2,
110
+ isDeveloperMode,
108
111
  onNavigate,
109
- onSetSearchParams
112
+ onSetSearchParams,
113
+ align,
114
+ pt
110
115
  }) => {
111
116
  const { handleActionPayload } = useActionTriggers.useActionTriggers({ onNavigate, onSetSearchParams, searchParams });
112
117
  const [actionBeingConfigured, setActionBeingConfigured] = React.useState(null);
@@ -306,7 +311,10 @@ const Actions = ({
306
311
  options: dropdownOptions,
307
312
  isLoading: isLoading && featuredCount > 0,
308
313
  onAction: handleExecuteAction,
309
- onConfig: handleConfigureAction
314
+ onConfig: handleConfigureAction,
315
+ isDeveloperMode,
316
+ align,
317
+ ...pt == null ? void 0 : pt.dropdown
310
318
  }
311
319
  ),
312
320
  /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.cjs.js","sources":["../../../../../src/containers/Actions/Actions.tsx"],"sourcesContent":["import * as Styled from './Actions.styled'\nimport { MouseEvent, useState } from 'react'\nimport clsx from 'clsx'\nimport { toast } from 'react-toastify'\nimport { useMemo, useEffect } from 'react'\nimport { ActionContext, useExecuteActionMutation, useGetActionsFromContextQuery } from '@shared/api'\nimport { ActionsDropdown } from './ActionsDropdown'\nimport ActionIcon from './ActionIcon'\nimport { ActionTriggersProps, useActionTriggers } from '@shared/hooks'\nimport { ActionConfigDialog } from './ActionConfigDialog'\nimport { InteractiveActionDialog, InteractiveForm } from './InteractiveActionDialog'\n\nconst placeholder = {\n identifier: 'placeholder',\n label: 'Featured action slot',\n isPlaceholder: true,\n icon: { type: 'material-symbols', name: 'sync' },\n groupLabel: '',\n}\n\ninterface ActionsProps extends ActionTriggersProps {\n entities: { id: string; projectName: string; entitySubType?: string }[]\n entityType: ActionContext['entityType']\n entitySubTypes?: string[]\n isLoadingEntity: boolean\n projectActionsProjectName?: string\n featuredCount?: number\n}\n\nexport const Actions = ({\n entities,\n entityType,\n entitySubTypes,\n isLoadingEntity,\n projectActionsProjectName,\n searchParams,\n featuredCount = 2,\n onNavigate,\n onSetSearchParams,\n}: ActionsProps) => {\n // special triggers the actions can make to perform stuff on the client\n const { handleActionPayload } = useActionTriggers({ onNavigate, onSetSearchParams, searchParams })\n const [actionBeingConfigured, setActionBeingConfigured] = useState<any>(null)\n const [interactiveForm, setInteractiveForm] = useState<any>(null)\n\n const context: ActionContext | null = useMemo(() => {\n if (projectActionsProjectName){\n return {\n entityType: 'project',\n projectName: projectActionsProjectName,\n }\n }\n if (!entities.length) return null\n if (!entities[0].projectName) return null\n\n // get a list of unique entity subtypes from loaded data\n const entitySubtypesLoaded = entities\n .filter((entity) => entity.entitySubType)\n .map((entity) => entity.entitySubType as string)\n .filter((value, index, self) => self.indexOf(value) === index && value)\n\n // try and use the passed in entitySubTypes, if not use the loaded ones\n const entitySubTypesToUse = entitySubTypes?.length ? entitySubTypes : entitySubtypesLoaded\n\n // all types except version/representation should have subtypes\n if (\n !entitySubTypesToUse?.length &&\n entityType !== 'version' &&\n entityType !== 'representation'\n ) {\n console.warn('No entity subtypes found')\n return null\n }\n\n return {\n projectName: entities[0].projectName,\n entityType: entityType,\n entityIds: entities.map((entity) => entity.id),\n entitySubtypes: entitySubTypesToUse,\n }\n }, [entities, entityType])\n\n useEffect(() => {\n setInteractiveForm(null)\n }, [context])\n\n const { data, isFetching: isFetchingActions } = useGetActionsFromContextQuery(\n { mode: 'simple', actionContext: context as ActionContext },\n { skip: !context },\n )\n\n const actions = data?.actions || []\n\n const categoryOrder = ['application', 'admin', 'workflow']\n // group actions by category\n // sort by hardcoded category, this will changing the future\n const groupedActions = useMemo(() => {\n // Step 1: Group actions by category\n const grouped = actions.reduce((acc: { [key: string]: any[] }, action) => {\n const category = action.category || 'uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(action)\n return acc\n }, {})\n\n // Step 5: Return the ordered groups\n return grouped\n }, [actions])\n\n // get categories that don't have a specific order (not in categoryOrder)\n // then sort them alphabetically\n const unorderedCategories = useMemo(\n () => [\n ...new Set(\n Object.keys(groupedActions)\n .filter((category) => !categoryOrder.includes(category))\n .sort((a, b) => a.localeCompare(b)),\n ),\n ],\n [groupedActions],\n )\n\n const categories = [...categoryOrder, ...unorderedCategories]\n\n // create the options for the dropdown, each category is separated by a divider and a title\n // for the divider we will use a custom dropdown item template\n const dropdownOptions = useMemo(() => {\n const options = []\n\n categories.forEach((category) => {\n if (!groupedActions[category] || !groupedActions[category].length) return\n\n options.push({\n label: category,\n header: true,\n value: category,\n disabled: true,\n })\n\n const groupOptions = groupedActions[category].map((action) => ({\n value: action.identifier,\n label: action.groupLabel ? action.groupLabel + ' ' + action.label : action.label,\n icon: action.icon,\n hasConfig: !!action.configFields,\n }))\n\n options.push(...groupOptions)\n })\n\n // if no actions, add placeholder\n if (!options.length) {\n options.push({\n label: 'No actions available',\n value: 'no-actions',\n disabled: true,\n header: true,\n })\n }\n\n return options\n }, [groupedActions, unorderedCategories, categoryOrder])\n\n const featuredActions = useMemo(() => {\n // Filter and sort to get initial featured actions\n let tempFeaturedActions = actions\n .filter((action) => action.featured)\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .slice(0, featuredCount)\n\n // Check if we need to add more actions to reach featuredCount\n if (tempFeaturedActions.length < featuredCount) {\n categories.forEach((category) => {\n if (tempFeaturedActions.length >= featuredCount) return\n const actions = groupedActions[category]\n if (!actions || !actions.length) return\n\n for (let i = tempFeaturedActions.length; i < featuredCount; i++) {\n const action = actions[i]\n if (!action) break\n if (!action.icon) continue\n tempFeaturedActions.push(action)\n }\n })\n }\n\n return tempFeaturedActions\n }, [actions, groupedActions, placeholder])\n\n const [executeAction, { isLoading: isLoadingExecution, originalArgs }] =\n useExecuteActionMutation()\n const executingAction = isLoadingExecution && originalArgs?.identifier\n\n const handleExecuteAction = async (\n identifier: string,\n e?: MouseEvent<HTMLElement> | null,\n formData?: InteractiveForm,\n ) => {\n e?.preventDefault()\n const action = actions.find((option) => option.identifier === identifier)\n\n if (!action) {\n toast.error('Action not found')\n console.warn('Action not found', identifier)\n return\n }\n\n const params = {\n addonName: action.addonName as string,\n addonVersion: action.addonVersion as string,\n variant: action.variant,\n identifier: action.identifier,\n }\n\n const actionContext = { ...context }\n if (formData) {\n actionContext.formData = formData\n }\n\n let response = null\n\n try {\n response = await executeAction({ actionContext, ...params }).unwrap()\n } catch (error: any) {\n console.error('Error executing action', error)\n toast.error(error?.data?.detail || 'Error executing action')\n return\n }\n\n try {\n // Toast the message if it is available\n if (response?.message) {\n if (response?.success) {\n toast.success(response.message, { autoClose: 2000 })\n } else {\n toast.error(response.message, { autoClose: 2000 })\n }\n }\n\n // Even if response?.success is false, we still want to handle the payload\n // as it may contain useful information - complex error messages in form,\n // redirect to another page etc. If the action just needs to abort,\n // it raises exception instead of returning a response with success: false\n\n // Use the new hook to handle payload\n if (response?.payload) {\n if (response.type === 'form') {\n // action requests additional information from the user.\n // we show a dialog with the form and when the user submits it we call the action again\n\n // It probably does not make sense to move to the useActionTriggers hook\n // as it need contexts and the dialog\n const intf = {\n identifier,\n // @ts-expect-error\n title: response.payload['title'],\n // @ts-expect-error\n fields: response.payload['fields'],\n // @ts-expect-error\n submitLabel: response.payload['submit_label'],\n // @ts-expect-error\n cancelLabel: response.payload['cancel_label'],\n // @ts-expect-error\n submitIcon: response.payload['submit_icon'],\n // @ts-expect-error\n cancelIcon: response.payload['cancel_icon'],\n }\n setInteractiveForm(intf)\n } else {\n handleActionPayload(response.type as string, response.payload)\n }\n }\n } catch (error) {\n // got response, but failed to process it\n console.warn('Error during action response processing', error)\n toast.error('Error occured during action processing')\n }\n }\n\n const handleConfigureAction = (identifier: string) => {\n const action = actions.find((data) => data.identifier === identifier)\n if (!action) return\n setActionBeingConfigured(action)\n }\n\n const handleSubmitInteractiveForm = async (identifier: string, formData: InteractiveForm) => {\n handleExecuteAction(identifier, null, formData)\n }\n\n const loadingActions = useMemo(\n () => Array(featuredCount).fill(placeholder),\n [featuredCount, placeholder],\n )\n\n const isLoading = isFetchingActions || isLoadingEntity\n const featuredActionsToDisplay = isLoading ? loadingActions : featuredActions\n\n return (\n <Styled.Actions className=\"actions\">\n {featuredActionsToDisplay.map((action, i) => (\n <Styled.FeaturedAction\n key={action.identifier + '-' + i}\n className={clsx('action', {\n loading: isLoading,\n isPlaceholder: action.isPlaceholder,\n })}\n data-tooltip={action.groupLabel ? action.groupLabel + ' ' + action.label : action.label}\n disabled={action.isPlaceholder}\n onClick={(e) => handleExecuteAction(action.identifier, e)}\n >\n {/* @ts-ignore */}\n <ActionIcon icon={action.icon} isExecuting={executingAction === action.identifier} />\n </Styled.FeaturedAction>\n ))}\n <ActionsDropdown\n options={dropdownOptions}\n isLoading={isLoading && featuredCount > 0}\n onAction={handleExecuteAction}\n onConfig={handleConfigureAction}\n />\n <ActionConfigDialog\n action={actionBeingConfigured}\n // @ts-expect-error\n context={context}\n onClose={() => setActionBeingConfigured(null)}\n />\n <InteractiveActionDialog\n interactiveForm={interactiveForm}\n onClose={() => setInteractiveForm(null)}\n // @ts-expect-error\n onSubmit={handleSubmitInteractiveForm}\n />\n </Styled.Actions>\n )\n}\n"],"names":["useActionTriggers","useState","useMemo","useEffect","useGetActionsFromContextQuery","actions","useExecuteActionMutation","toast","data","jsxs","Styled.Actions","jsx","Styled.FeaturedAction","ActionsDropdown","ActionConfigDialog","InteractiveActionDialog"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.cjs.js","sources":["../../../../../src/containers/Actions/Actions.tsx"],"sourcesContent":["import * as Styled from './Actions.styled'\nimport { MouseEvent, useState } from 'react'\nimport clsx from 'clsx'\nimport { toast } from 'react-toastify'\nimport { useMemo, useEffect } from 'react'\nimport { ActionContext, useExecuteActionMutation, useGetActionsFromContextQuery } from '@shared/api'\nimport { ActionsDropdown, ActionsDropdownProps } from './ActionsDropdown'\nimport ActionIcon from './ActionIcon'\nimport { ActionTriggersProps, useActionTriggers } from '@shared/hooks'\nimport { ActionConfigDialog } from './ActionConfigDialog'\nimport { InteractiveActionDialog, InteractiveForm } from './InteractiveActionDialog'\n\nconst placeholder = {\n identifier: 'placeholder',\n label: 'Featured action slot',\n isPlaceholder: true,\n icon: { type: 'material-symbols', name: 'sync' },\n groupLabel: '',\n}\n\ninterface ActionsProps extends ActionTriggersProps {\n entities: { id: string; projectName: string; entitySubType?: string }[]\n entityType: ActionContext['entityType']\n entitySubTypes?: string[]\n isLoadingEntity: boolean\n projectActionsProjectName?: string\n featuredCount?: number\n isDeveloperMode: boolean\n align?: ActionsDropdownProps['align']\n pt?: {\n dropdown?: Partial<ActionsDropdownProps>\n }\n}\n\nexport const Actions = ({\n entities,\n entityType,\n entitySubTypes,\n isLoadingEntity,\n projectActionsProjectName,\n searchParams,\n featuredCount = 2,\n isDeveloperMode,\n onNavigate,\n onSetSearchParams,\n align,\n pt,\n}: ActionsProps) => {\n // special triggers the actions can make to perform stuff on the client\n const { handleActionPayload } = useActionTriggers({ onNavigate, onSetSearchParams, searchParams })\n const [actionBeingConfigured, setActionBeingConfigured] = useState<any>(null)\n const [interactiveForm, setInteractiveForm] = useState<any>(null)\n\n const context: ActionContext | null = useMemo(() => {\n if (projectActionsProjectName) {\n return {\n entityType: 'project',\n projectName: projectActionsProjectName,\n }\n }\n if (!entities.length) return null\n if (!entities[0].projectName) return null\n\n // get a list of unique entity subtypes from loaded data\n const entitySubtypesLoaded = entities\n .filter((entity) => entity.entitySubType)\n .map((entity) => entity.entitySubType as string)\n .filter((value, index, self) => self.indexOf(value) === index && value)\n\n // try and use the passed in entitySubTypes, if not use the loaded ones\n const entitySubTypesToUse = entitySubTypes?.length ? entitySubTypes : entitySubtypesLoaded\n\n // all types except version/representation should have subtypes\n if (\n !entitySubTypesToUse?.length &&\n entityType !== 'version' &&\n entityType !== 'representation'\n ) {\n console.warn('No entity subtypes found')\n return null\n }\n\n return {\n projectName: entities[0].projectName,\n entityType: entityType,\n entityIds: entities.map((entity) => entity.id),\n entitySubtypes: entitySubTypesToUse,\n }\n }, [entities, entityType])\n\n useEffect(() => {\n setInteractiveForm(null)\n }, [context])\n\n const { data, isFetching: isFetchingActions } = useGetActionsFromContextQuery(\n { mode: 'simple', actionContext: context as ActionContext },\n { skip: !context },\n )\n\n const actions = data?.actions || []\n\n const categoryOrder = ['application', 'admin', 'workflow']\n // group actions by category\n // sort by hardcoded category, this will changing the future\n const groupedActions = useMemo(() => {\n // Step 1: Group actions by category\n const grouped = actions.reduce((acc: { [key: string]: any[] }, action) => {\n const category = action.category || 'uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(action)\n return acc\n }, {})\n\n // Step 5: Return the ordered groups\n return grouped\n }, [actions])\n\n // get categories that don't have a specific order (not in categoryOrder)\n // then sort them alphabetically\n const unorderedCategories = useMemo(\n () => [\n ...new Set(\n Object.keys(groupedActions)\n .filter((category) => !categoryOrder.includes(category))\n .sort((a, b) => a.localeCompare(b)),\n ),\n ],\n [groupedActions],\n )\n\n const categories = [...categoryOrder, ...unorderedCategories]\n\n // create the options for the dropdown, each category is separated by a divider and a title\n // for the divider we will use a custom dropdown item template\n const dropdownOptions = useMemo(() => {\n const options = []\n\n categories.forEach((category) => {\n if (!groupedActions[category] || !groupedActions[category].length) return\n\n options.push({\n label: category,\n header: true,\n value: category,\n disabled: true,\n })\n\n const groupOptions = groupedActions[category].map((action) => ({\n value: action.identifier,\n label: action.groupLabel ? action.groupLabel + ' ' + action.label : action.label,\n icon: action.icon,\n hasConfig: !!action.configFields,\n }))\n\n options.push(...groupOptions)\n })\n\n // if no actions, add placeholder\n if (!options.length) {\n options.push({\n label: 'No actions available',\n value: 'no-actions',\n disabled: true,\n header: true,\n })\n }\n\n return options\n }, [groupedActions, unorderedCategories, categoryOrder])\n\n const featuredActions = useMemo(() => {\n // Filter and sort to get initial featured actions\n let tempFeaturedActions = actions\n .filter((action) => action.featured)\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .slice(0, featuredCount)\n\n // Check if we need to add more actions to reach featuredCount\n if (tempFeaturedActions.length < featuredCount) {\n categories.forEach((category) => {\n if (tempFeaturedActions.length >= featuredCount) return\n const actions = groupedActions[category]\n if (!actions || !actions.length) return\n\n for (let i = tempFeaturedActions.length; i < featuredCount; i++) {\n const action = actions[i]\n if (!action) break\n if (!action.icon) continue\n tempFeaturedActions.push(action)\n }\n })\n }\n\n return tempFeaturedActions\n }, [actions, groupedActions, placeholder])\n\n const [executeAction, { isLoading: isLoadingExecution, originalArgs }] =\n useExecuteActionMutation()\n const executingAction = isLoadingExecution && originalArgs?.identifier\n\n const handleExecuteAction = async (\n identifier: string,\n e?: MouseEvent<HTMLElement> | null,\n formData?: InteractiveForm,\n ) => {\n e?.preventDefault()\n const action = actions.find((option) => option.identifier === identifier)\n\n if (!action) {\n toast.error('Action not found')\n console.warn('Action not found', identifier)\n return\n }\n\n const params = {\n addonName: action.addonName as string,\n addonVersion: action.addonVersion as string,\n variant: action.variant,\n identifier: action.identifier,\n }\n\n const actionContext = { ...context }\n if (formData) {\n actionContext.formData = formData\n }\n\n let response = null\n\n try {\n response = await executeAction({ actionContext, ...params }).unwrap()\n } catch (error: any) {\n console.error('Error executing action', error)\n toast.error(error?.data?.detail || 'Error executing action')\n return\n }\n\n try {\n // Toast the message if it is available\n if (response?.message) {\n if (response?.success) {\n toast.success(response.message, { autoClose: 2000 })\n } else {\n toast.error(response.message, { autoClose: 2000 })\n }\n }\n\n // Even if response?.success is false, we still want to handle the payload\n // as it may contain useful information - complex error messages in form,\n // redirect to another page etc. If the action just needs to abort,\n // it raises exception instead of returning a response with success: false\n\n // Use the new hook to handle payload\n if (response?.payload) {\n if (response.type === 'form') {\n // action requests additional information from the user.\n // we show a dialog with the form and when the user submits it we call the action again\n\n // It probably does not make sense to move to the useActionTriggers hook\n // as it need contexts and the dialog\n const intf = {\n identifier,\n // @ts-expect-error\n title: response.payload['title'],\n // @ts-expect-error\n fields: response.payload['fields'],\n // @ts-expect-error\n submitLabel: response.payload['submit_label'],\n // @ts-expect-error\n cancelLabel: response.payload['cancel_label'],\n // @ts-expect-error\n submitIcon: response.payload['submit_icon'],\n // @ts-expect-error\n cancelIcon: response.payload['cancel_icon'],\n }\n setInteractiveForm(intf)\n } else {\n handleActionPayload(response.type as string, response.payload)\n }\n }\n } catch (error) {\n // got response, but failed to process it\n console.warn('Error during action response processing', error)\n toast.error('Error occured during action processing')\n }\n }\n\n const handleConfigureAction = (identifier: string) => {\n const action = actions.find((data) => data.identifier === identifier)\n if (!action) return\n setActionBeingConfigured(action)\n }\n\n const handleSubmitInteractiveForm = async (identifier: string, formData: InteractiveForm) => {\n handleExecuteAction(identifier, null, formData)\n }\n\n const loadingActions = useMemo(\n () => Array(featuredCount).fill(placeholder),\n [featuredCount, placeholder],\n )\n\n const isLoading = isFetchingActions || isLoadingEntity\n const featuredActionsToDisplay = isLoading ? loadingActions : featuredActions\n\n return (\n <Styled.Actions className=\"actions\">\n {featuredActionsToDisplay.map((action, i) => (\n <Styled.FeaturedAction\n key={action.identifier + '-' + i}\n className={clsx('action', {\n loading: isLoading,\n isPlaceholder: action.isPlaceholder,\n })}\n data-tooltip={action.groupLabel ? action.groupLabel + ' ' + action.label : action.label}\n disabled={action.isPlaceholder}\n onClick={(e) => handleExecuteAction(action.identifier, e)}\n >\n {/* @ts-ignore */}\n <ActionIcon icon={action.icon} isExecuting={executingAction === action.identifier} />\n </Styled.FeaturedAction>\n ))}\n <ActionsDropdown\n options={dropdownOptions}\n isLoading={isLoading && featuredCount > 0}\n onAction={handleExecuteAction}\n onConfig={handleConfigureAction}\n isDeveloperMode={isDeveloperMode}\n align={align}\n {...pt?.dropdown}\n />\n <ActionConfigDialog\n action={actionBeingConfigured}\n // @ts-expect-error\n context={context}\n onClose={() => setActionBeingConfigured(null)}\n />\n <InteractiveActionDialog\n interactiveForm={interactiveForm}\n onClose={() => setInteractiveForm(null)}\n // @ts-expect-error\n onSubmit={handleSubmitInteractiveForm}\n />\n </Styled.Actions>\n )\n}\n"],"names":["useActionTriggers","useState","useMemo","useEffect","useGetActionsFromContextQuery","actions","useExecuteActionMutation","toast","data","jsxs","Styled.Actions","jsx","Styled.FeaturedAction","ActionsDropdown","ActionConfigDialog","InteractiveActionDialog"],"mappings":"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"}
@@ -70,6 +70,8 @@ import "../../api/queries/users/updateUsers.es.js";
70
70
  import "../../api/queries/watchers/getWatchers.es.js";
71
71
  import "../../api/queries/permissions/getPermissions.es.js";
72
72
  import "../../api/queries/grouping/getGrouping.es.js";
73
+ import "../../api/queries/versions/updateVersions.es.js";
74
+ import "../../api/queries/products/createProduct.es.js";
73
75
  import { ActionsDropdown } from "./ActionsDropdown/ActionsDropdown.es.js";
74
76
  import ActionIcon from "./ActionIcon.es.js";
75
77
  import "../../context/RemoteModulesContext.es.js";
@@ -103,8 +105,11 @@ const Actions = ({
103
105
  projectActionsProjectName,
104
106
  searchParams,
105
107
  featuredCount = 2,
108
+ isDeveloperMode,
106
109
  onNavigate,
107
- onSetSearchParams
110
+ onSetSearchParams,
111
+ align,
112
+ pt
108
113
  }) => {
109
114
  const { handleActionPayload } = useActionTriggers({ onNavigate, onSetSearchParams, searchParams });
110
115
  const [actionBeingConfigured, setActionBeingConfigured] = useState(null);
@@ -304,7 +309,10 @@ const Actions = ({
304
309
  options: dropdownOptions,
305
310
  isLoading: isLoading && featuredCount > 0,
306
311
  onAction: handleExecuteAction,
307
- onConfig: handleConfigureAction
312
+ onConfig: handleConfigureAction,
313
+ isDeveloperMode,
314
+ align,
315
+ ...pt == null ? void 0 : pt.dropdown
308
316
  }
309
317
  ),
310
318
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.es.js","sources":["../../../../../src/containers/Actions/Actions.tsx"],"sourcesContent":["import * as Styled from './Actions.styled'\nimport { MouseEvent, useState } from 'react'\nimport clsx from 'clsx'\nimport { toast } from 'react-toastify'\nimport { useMemo, useEffect } from 'react'\nimport { ActionContext, useExecuteActionMutation, useGetActionsFromContextQuery } from '@shared/api'\nimport { ActionsDropdown } from './ActionsDropdown'\nimport ActionIcon from './ActionIcon'\nimport { ActionTriggersProps, useActionTriggers } from '@shared/hooks'\nimport { ActionConfigDialog } from './ActionConfigDialog'\nimport { InteractiveActionDialog, InteractiveForm } from './InteractiveActionDialog'\n\nconst placeholder = {\n identifier: 'placeholder',\n label: 'Featured action slot',\n isPlaceholder: true,\n icon: { type: 'material-symbols', name: 'sync' },\n groupLabel: '',\n}\n\ninterface ActionsProps extends ActionTriggersProps {\n entities: { id: string; projectName: string; entitySubType?: string }[]\n entityType: ActionContext['entityType']\n entitySubTypes?: string[]\n isLoadingEntity: boolean\n projectActionsProjectName?: string\n featuredCount?: number\n}\n\nexport const Actions = ({\n entities,\n entityType,\n entitySubTypes,\n isLoadingEntity,\n projectActionsProjectName,\n searchParams,\n featuredCount = 2,\n onNavigate,\n onSetSearchParams,\n}: ActionsProps) => {\n // special triggers the actions can make to perform stuff on the client\n const { handleActionPayload } = useActionTriggers({ onNavigate, onSetSearchParams, searchParams })\n const [actionBeingConfigured, setActionBeingConfigured] = useState<any>(null)\n const [interactiveForm, setInteractiveForm] = useState<any>(null)\n\n const context: ActionContext | null = useMemo(() => {\n if (projectActionsProjectName){\n return {\n entityType: 'project',\n projectName: projectActionsProjectName,\n }\n }\n if (!entities.length) return null\n if (!entities[0].projectName) return null\n\n // get a list of unique entity subtypes from loaded data\n const entitySubtypesLoaded = entities\n .filter((entity) => entity.entitySubType)\n .map((entity) => entity.entitySubType as string)\n .filter((value, index, self) => self.indexOf(value) === index && value)\n\n // try and use the passed in entitySubTypes, if not use the loaded ones\n const entitySubTypesToUse = entitySubTypes?.length ? entitySubTypes : entitySubtypesLoaded\n\n // all types except version/representation should have subtypes\n if (\n !entitySubTypesToUse?.length &&\n entityType !== 'version' &&\n entityType !== 'representation'\n ) {\n console.warn('No entity subtypes found')\n return null\n }\n\n return {\n projectName: entities[0].projectName,\n entityType: entityType,\n entityIds: entities.map((entity) => entity.id),\n entitySubtypes: entitySubTypesToUse,\n }\n }, [entities, entityType])\n\n useEffect(() => {\n setInteractiveForm(null)\n }, [context])\n\n const { data, isFetching: isFetchingActions } = useGetActionsFromContextQuery(\n { mode: 'simple', actionContext: context as ActionContext },\n { skip: !context },\n )\n\n const actions = data?.actions || []\n\n const categoryOrder = ['application', 'admin', 'workflow']\n // group actions by category\n // sort by hardcoded category, this will changing the future\n const groupedActions = useMemo(() => {\n // Step 1: Group actions by category\n const grouped = actions.reduce((acc: { [key: string]: any[] }, action) => {\n const category = action.category || 'uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(action)\n return acc\n }, {})\n\n // Step 5: Return the ordered groups\n return grouped\n }, [actions])\n\n // get categories that don't have a specific order (not in categoryOrder)\n // then sort them alphabetically\n const unorderedCategories = useMemo(\n () => [\n ...new Set(\n Object.keys(groupedActions)\n .filter((category) => !categoryOrder.includes(category))\n .sort((a, b) => a.localeCompare(b)),\n ),\n ],\n [groupedActions],\n )\n\n const categories = [...categoryOrder, ...unorderedCategories]\n\n // create the options for the dropdown, each category is separated by a divider and a title\n // for the divider we will use a custom dropdown item template\n const dropdownOptions = useMemo(() => {\n const options = []\n\n categories.forEach((category) => {\n if (!groupedActions[category] || !groupedActions[category].length) return\n\n options.push({\n label: category,\n header: true,\n value: category,\n disabled: true,\n })\n\n const groupOptions = groupedActions[category].map((action) => ({\n value: action.identifier,\n label: action.groupLabel ? action.groupLabel + ' ' + action.label : action.label,\n icon: action.icon,\n hasConfig: !!action.configFields,\n }))\n\n options.push(...groupOptions)\n })\n\n // if no actions, add placeholder\n if (!options.length) {\n options.push({\n label: 'No actions available',\n value: 'no-actions',\n disabled: true,\n header: true,\n })\n }\n\n return options\n }, [groupedActions, unorderedCategories, categoryOrder])\n\n const featuredActions = useMemo(() => {\n // Filter and sort to get initial featured actions\n let tempFeaturedActions = actions\n .filter((action) => action.featured)\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .slice(0, featuredCount)\n\n // Check if we need to add more actions to reach featuredCount\n if (tempFeaturedActions.length < featuredCount) {\n categories.forEach((category) => {\n if (tempFeaturedActions.length >= featuredCount) return\n const actions = groupedActions[category]\n if (!actions || !actions.length) return\n\n for (let i = tempFeaturedActions.length; i < featuredCount; i++) {\n const action = actions[i]\n if (!action) break\n if (!action.icon) continue\n tempFeaturedActions.push(action)\n }\n })\n }\n\n return tempFeaturedActions\n }, [actions, groupedActions, placeholder])\n\n const [executeAction, { isLoading: isLoadingExecution, originalArgs }] =\n useExecuteActionMutation()\n const executingAction = isLoadingExecution && originalArgs?.identifier\n\n const handleExecuteAction = async (\n identifier: string,\n e?: MouseEvent<HTMLElement> | null,\n formData?: InteractiveForm,\n ) => {\n e?.preventDefault()\n const action = actions.find((option) => option.identifier === identifier)\n\n if (!action) {\n toast.error('Action not found')\n console.warn('Action not found', identifier)\n return\n }\n\n const params = {\n addonName: action.addonName as string,\n addonVersion: action.addonVersion as string,\n variant: action.variant,\n identifier: action.identifier,\n }\n\n const actionContext = { ...context }\n if (formData) {\n actionContext.formData = formData\n }\n\n let response = null\n\n try {\n response = await executeAction({ actionContext, ...params }).unwrap()\n } catch (error: any) {\n console.error('Error executing action', error)\n toast.error(error?.data?.detail || 'Error executing action')\n return\n }\n\n try {\n // Toast the message if it is available\n if (response?.message) {\n if (response?.success) {\n toast.success(response.message, { autoClose: 2000 })\n } else {\n toast.error(response.message, { autoClose: 2000 })\n }\n }\n\n // Even if response?.success is false, we still want to handle the payload\n // as it may contain useful information - complex error messages in form,\n // redirect to another page etc. If the action just needs to abort,\n // it raises exception instead of returning a response with success: false\n\n // Use the new hook to handle payload\n if (response?.payload) {\n if (response.type === 'form') {\n // action requests additional information from the user.\n // we show a dialog with the form and when the user submits it we call the action again\n\n // It probably does not make sense to move to the useActionTriggers hook\n // as it need contexts and the dialog\n const intf = {\n identifier,\n // @ts-expect-error\n title: response.payload['title'],\n // @ts-expect-error\n fields: response.payload['fields'],\n // @ts-expect-error\n submitLabel: response.payload['submit_label'],\n // @ts-expect-error\n cancelLabel: response.payload['cancel_label'],\n // @ts-expect-error\n submitIcon: response.payload['submit_icon'],\n // @ts-expect-error\n cancelIcon: response.payload['cancel_icon'],\n }\n setInteractiveForm(intf)\n } else {\n handleActionPayload(response.type as string, response.payload)\n }\n }\n } catch (error) {\n // got response, but failed to process it\n console.warn('Error during action response processing', error)\n toast.error('Error occured during action processing')\n }\n }\n\n const handleConfigureAction = (identifier: string) => {\n const action = actions.find((data) => data.identifier === identifier)\n if (!action) return\n setActionBeingConfigured(action)\n }\n\n const handleSubmitInteractiveForm = async (identifier: string, formData: InteractiveForm) => {\n handleExecuteAction(identifier, null, formData)\n }\n\n const loadingActions = useMemo(\n () => Array(featuredCount).fill(placeholder),\n [featuredCount, placeholder],\n )\n\n const isLoading = isFetchingActions || isLoadingEntity\n const featuredActionsToDisplay = isLoading ? loadingActions : featuredActions\n\n return (\n <Styled.Actions className=\"actions\">\n {featuredActionsToDisplay.map((action, i) => (\n <Styled.FeaturedAction\n key={action.identifier + '-' + i}\n className={clsx('action', {\n loading: isLoading,\n isPlaceholder: action.isPlaceholder,\n })}\n data-tooltip={action.groupLabel ? action.groupLabel + ' ' + action.label : action.label}\n disabled={action.isPlaceholder}\n onClick={(e) => handleExecuteAction(action.identifier, e)}\n >\n {/* @ts-ignore */}\n <ActionIcon icon={action.icon} isExecuting={executingAction === action.identifier} />\n </Styled.FeaturedAction>\n ))}\n <ActionsDropdown\n options={dropdownOptions}\n isLoading={isLoading && featuredCount > 0}\n onAction={handleExecuteAction}\n onConfig={handleConfigureAction}\n />\n <ActionConfigDialog\n action={actionBeingConfigured}\n // @ts-expect-error\n context={context}\n onClose={() => setActionBeingConfigured(null)}\n />\n <InteractiveActionDialog\n interactiveForm={interactiveForm}\n onClose={() => setInteractiveForm(null)}\n // @ts-expect-error\n onSubmit={handleSubmitInteractiveForm}\n />\n </Styled.Actions>\n )\n}\n"],"names":["actions","data","jsxs","Styled.Actions","jsx","Styled.FeaturedAction"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.es.js","sources":["../../../../../src/containers/Actions/Actions.tsx"],"sourcesContent":["import * as Styled from './Actions.styled'\nimport { MouseEvent, useState } from 'react'\nimport clsx from 'clsx'\nimport { toast } from 'react-toastify'\nimport { useMemo, useEffect } from 'react'\nimport { ActionContext, useExecuteActionMutation, useGetActionsFromContextQuery } from '@shared/api'\nimport { ActionsDropdown, ActionsDropdownProps } from './ActionsDropdown'\nimport ActionIcon from './ActionIcon'\nimport { ActionTriggersProps, useActionTriggers } from '@shared/hooks'\nimport { ActionConfigDialog } from './ActionConfigDialog'\nimport { InteractiveActionDialog, InteractiveForm } from './InteractiveActionDialog'\n\nconst placeholder = {\n identifier: 'placeholder',\n label: 'Featured action slot',\n isPlaceholder: true,\n icon: { type: 'material-symbols', name: 'sync' },\n groupLabel: '',\n}\n\ninterface ActionsProps extends ActionTriggersProps {\n entities: { id: string; projectName: string; entitySubType?: string }[]\n entityType: ActionContext['entityType']\n entitySubTypes?: string[]\n isLoadingEntity: boolean\n projectActionsProjectName?: string\n featuredCount?: number\n isDeveloperMode: boolean\n align?: ActionsDropdownProps['align']\n pt?: {\n dropdown?: Partial<ActionsDropdownProps>\n }\n}\n\nexport const Actions = ({\n entities,\n entityType,\n entitySubTypes,\n isLoadingEntity,\n projectActionsProjectName,\n searchParams,\n featuredCount = 2,\n isDeveloperMode,\n onNavigate,\n onSetSearchParams,\n align,\n pt,\n}: ActionsProps) => {\n // special triggers the actions can make to perform stuff on the client\n const { handleActionPayload } = useActionTriggers({ onNavigate, onSetSearchParams, searchParams })\n const [actionBeingConfigured, setActionBeingConfigured] = useState<any>(null)\n const [interactiveForm, setInteractiveForm] = useState<any>(null)\n\n const context: ActionContext | null = useMemo(() => {\n if (projectActionsProjectName) {\n return {\n entityType: 'project',\n projectName: projectActionsProjectName,\n }\n }\n if (!entities.length) return null\n if (!entities[0].projectName) return null\n\n // get a list of unique entity subtypes from loaded data\n const entitySubtypesLoaded = entities\n .filter((entity) => entity.entitySubType)\n .map((entity) => entity.entitySubType as string)\n .filter((value, index, self) => self.indexOf(value) === index && value)\n\n // try and use the passed in entitySubTypes, if not use the loaded ones\n const entitySubTypesToUse = entitySubTypes?.length ? entitySubTypes : entitySubtypesLoaded\n\n // all types except version/representation should have subtypes\n if (\n !entitySubTypesToUse?.length &&\n entityType !== 'version' &&\n entityType !== 'representation'\n ) {\n console.warn('No entity subtypes found')\n return null\n }\n\n return {\n projectName: entities[0].projectName,\n entityType: entityType,\n entityIds: entities.map((entity) => entity.id),\n entitySubtypes: entitySubTypesToUse,\n }\n }, [entities, entityType])\n\n useEffect(() => {\n setInteractiveForm(null)\n }, [context])\n\n const { data, isFetching: isFetchingActions } = useGetActionsFromContextQuery(\n { mode: 'simple', actionContext: context as ActionContext },\n { skip: !context },\n )\n\n const actions = data?.actions || []\n\n const categoryOrder = ['application', 'admin', 'workflow']\n // group actions by category\n // sort by hardcoded category, this will changing the future\n const groupedActions = useMemo(() => {\n // Step 1: Group actions by category\n const grouped = actions.reduce((acc: { [key: string]: any[] }, action) => {\n const category = action.category || 'uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(action)\n return acc\n }, {})\n\n // Step 5: Return the ordered groups\n return grouped\n }, [actions])\n\n // get categories that don't have a specific order (not in categoryOrder)\n // then sort them alphabetically\n const unorderedCategories = useMemo(\n () => [\n ...new Set(\n Object.keys(groupedActions)\n .filter((category) => !categoryOrder.includes(category))\n .sort((a, b) => a.localeCompare(b)),\n ),\n ],\n [groupedActions],\n )\n\n const categories = [...categoryOrder, ...unorderedCategories]\n\n // create the options for the dropdown, each category is separated by a divider and a title\n // for the divider we will use a custom dropdown item template\n const dropdownOptions = useMemo(() => {\n const options = []\n\n categories.forEach((category) => {\n if (!groupedActions[category] || !groupedActions[category].length) return\n\n options.push({\n label: category,\n header: true,\n value: category,\n disabled: true,\n })\n\n const groupOptions = groupedActions[category].map((action) => ({\n value: action.identifier,\n label: action.groupLabel ? action.groupLabel + ' ' + action.label : action.label,\n icon: action.icon,\n hasConfig: !!action.configFields,\n }))\n\n options.push(...groupOptions)\n })\n\n // if no actions, add placeholder\n if (!options.length) {\n options.push({\n label: 'No actions available',\n value: 'no-actions',\n disabled: true,\n header: true,\n })\n }\n\n return options\n }, [groupedActions, unorderedCategories, categoryOrder])\n\n const featuredActions = useMemo(() => {\n // Filter and sort to get initial featured actions\n let tempFeaturedActions = actions\n .filter((action) => action.featured)\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .slice(0, featuredCount)\n\n // Check if we need to add more actions to reach featuredCount\n if (tempFeaturedActions.length < featuredCount) {\n categories.forEach((category) => {\n if (tempFeaturedActions.length >= featuredCount) return\n const actions = groupedActions[category]\n if (!actions || !actions.length) return\n\n for (let i = tempFeaturedActions.length; i < featuredCount; i++) {\n const action = actions[i]\n if (!action) break\n if (!action.icon) continue\n tempFeaturedActions.push(action)\n }\n })\n }\n\n return tempFeaturedActions\n }, [actions, groupedActions, placeholder])\n\n const [executeAction, { isLoading: isLoadingExecution, originalArgs }] =\n useExecuteActionMutation()\n const executingAction = isLoadingExecution && originalArgs?.identifier\n\n const handleExecuteAction = async (\n identifier: string,\n e?: MouseEvent<HTMLElement> | null,\n formData?: InteractiveForm,\n ) => {\n e?.preventDefault()\n const action = actions.find((option) => option.identifier === identifier)\n\n if (!action) {\n toast.error('Action not found')\n console.warn('Action not found', identifier)\n return\n }\n\n const params = {\n addonName: action.addonName as string,\n addonVersion: action.addonVersion as string,\n variant: action.variant,\n identifier: action.identifier,\n }\n\n const actionContext = { ...context }\n if (formData) {\n actionContext.formData = formData\n }\n\n let response = null\n\n try {\n response = await executeAction({ actionContext, ...params }).unwrap()\n } catch (error: any) {\n console.error('Error executing action', error)\n toast.error(error?.data?.detail || 'Error executing action')\n return\n }\n\n try {\n // Toast the message if it is available\n if (response?.message) {\n if (response?.success) {\n toast.success(response.message, { autoClose: 2000 })\n } else {\n toast.error(response.message, { autoClose: 2000 })\n }\n }\n\n // Even if response?.success is false, we still want to handle the payload\n // as it may contain useful information - complex error messages in form,\n // redirect to another page etc. If the action just needs to abort,\n // it raises exception instead of returning a response with success: false\n\n // Use the new hook to handle payload\n if (response?.payload) {\n if (response.type === 'form') {\n // action requests additional information from the user.\n // we show a dialog with the form and when the user submits it we call the action again\n\n // It probably does not make sense to move to the useActionTriggers hook\n // as it need contexts and the dialog\n const intf = {\n identifier,\n // @ts-expect-error\n title: response.payload['title'],\n // @ts-expect-error\n fields: response.payload['fields'],\n // @ts-expect-error\n submitLabel: response.payload['submit_label'],\n // @ts-expect-error\n cancelLabel: response.payload['cancel_label'],\n // @ts-expect-error\n submitIcon: response.payload['submit_icon'],\n // @ts-expect-error\n cancelIcon: response.payload['cancel_icon'],\n }\n setInteractiveForm(intf)\n } else {\n handleActionPayload(response.type as string, response.payload)\n }\n }\n } catch (error) {\n // got response, but failed to process it\n console.warn('Error during action response processing', error)\n toast.error('Error occured during action processing')\n }\n }\n\n const handleConfigureAction = (identifier: string) => {\n const action = actions.find((data) => data.identifier === identifier)\n if (!action) return\n setActionBeingConfigured(action)\n }\n\n const handleSubmitInteractiveForm = async (identifier: string, formData: InteractiveForm) => {\n handleExecuteAction(identifier, null, formData)\n }\n\n const loadingActions = useMemo(\n () => Array(featuredCount).fill(placeholder),\n [featuredCount, placeholder],\n )\n\n const isLoading = isFetchingActions || isLoadingEntity\n const featuredActionsToDisplay = isLoading ? loadingActions : featuredActions\n\n return (\n <Styled.Actions className=\"actions\">\n {featuredActionsToDisplay.map((action, i) => (\n <Styled.FeaturedAction\n key={action.identifier + '-' + i}\n className={clsx('action', {\n loading: isLoading,\n isPlaceholder: action.isPlaceholder,\n })}\n data-tooltip={action.groupLabel ? action.groupLabel + ' ' + action.label : action.label}\n disabled={action.isPlaceholder}\n onClick={(e) => handleExecuteAction(action.identifier, e)}\n >\n {/* @ts-ignore */}\n <ActionIcon icon={action.icon} isExecuting={executingAction === action.identifier} />\n </Styled.FeaturedAction>\n ))}\n <ActionsDropdown\n options={dropdownOptions}\n isLoading={isLoading && featuredCount > 0}\n onAction={handleExecuteAction}\n onConfig={handleConfigureAction}\n isDeveloperMode={isDeveloperMode}\n align={align}\n {...pt?.dropdown}\n />\n <ActionConfigDialog\n action={actionBeingConfigured}\n // @ts-expect-error\n context={context}\n onClose={() => setActionBeingConfigured(null)}\n />\n <InteractiveActionDialog\n interactiveForm={interactiveForm}\n onClose={() => setInteractiveForm(null)}\n // @ts-expect-error\n onSubmit={handleSubmitInteractiveForm}\n />\n </Styled.Actions>\n )\n}\n"],"names":["actions","data","jsxs","Styled.Actions","jsx","Styled.FeaturedAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAM,cAAc;AAAA,EAClB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,eAAe;AAAA,EACf,MAAM,EAAE,MAAM,oBAAoB,MAAM,OAAO;AAAA,EAC/C,YAAY;AACd;AAgBO,MAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAoB;AAEZ,QAAA,EAAE,wBAAwB,kBAAkB,EAAE,YAAY,mBAAmB,cAAc;AACjG,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,SAAc,IAAI;AAC5E,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAc,IAAI;AAE1D,QAAA,UAAgC,QAAQ,MAAM;AAClD,QAAI,2BAA2B;AACtB,aAAA;AAAA,QACL,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IAAA;AAEE,QAAA,CAAC,SAAS,OAAe,QAAA;AAC7B,QAAI,CAAC,SAAS,CAAC,EAAE,YAAoB,QAAA;AAG/B,UAAA,uBAAuB,SAC1B,OAAO,CAAC,WAAW,OAAO,aAAa,EACvC,IAAI,CAAC,WAAW,OAAO,aAAuB,EAC9C,OAAO,CAAC,OAAO,OAAO,SAAS,KAAK,QAAQ,KAAK,MAAM,SAAS,KAAK;AAGlE,UAAA,uBAAsB,iDAAgB,UAAS,iBAAiB;AAGtE,QACE,EAAC,2DAAqB,WACtB,eAAe,aACf,eAAe,kBACf;AACA,cAAQ,KAAK,0BAA0B;AAChC,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,MACL,aAAa,SAAS,CAAC,EAAE;AAAA,MACzB;AAAA,MACA,WAAW,SAAS,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,MAC7C,gBAAgB;AAAA,IAClB;AAAA,EAAA,GACC,CAAC,UAAU,UAAU,CAAC;AAEzB,YAAU,MAAM;AACd,uBAAmB,IAAI;AAAA,EAAA,GACtB,CAAC,OAAO,CAAC;AAEZ,QAAM,EAAE,MAAM,YAAY,kBAAsB,IAAA;AAAA,IAC9C,EAAE,MAAM,UAAU,eAAe,QAAyB;AAAA,IAC1D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEM,QAAA,WAAU,6BAAM,YAAW,CAAC;AAElC,QAAM,gBAAgB,CAAC,eAAe,SAAS,UAAU;AAGnD,QAAA,iBAAiB,QAAQ,MAAM;AAEnC,UAAM,UAAU,QAAQ,OAAO,CAAC,KAA+B,WAAW;AAClE,YAAA,WAAW,OAAO,YAAY;AAChC,UAAA,CAAC,IAAI,QAAQ,GAAG;AACd,YAAA,QAAQ,IAAI,CAAC;AAAA,MAAA;AAEf,UAAA,QAAQ,EAAE,KAAK,MAAM;AAClB,aAAA;AAAA,IACT,GAAG,EAAE;AAGE,WAAA;AAAA,EAAA,GACN,CAAC,OAAO,CAAC;AAIZ,QAAM,sBAAsB;AAAA,IAC1B,MAAM;AAAA,MACJ,GAAG,IAAI;AAAA,QACL,OAAO,KAAK,cAAc,EACvB,OAAO,CAAC,aAAa,CAAC,cAAc,SAAS,QAAQ,CAAC,EACtD,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAAA,MAAA;AAAA,IAExC;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,aAAa,CAAC,GAAG,eAAe,GAAG,mBAAmB;AAItD,QAAA,kBAAkB,QAAQ,MAAM;AACpC,UAAM,UAAU,CAAC;AAEN,eAAA,QAAQ,CAAC,aAAa;AAC3B,UAAA,CAAC,eAAe,QAAQ,KAAK,CAAC,eAAe,QAAQ,EAAE,OAAQ;AAEnE,cAAQ,KAAK;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,MAAA,CACX;AAED,YAAM,eAAe,eAAe,QAAQ,EAAE,IAAI,CAAC,YAAY;AAAA,QAC7D,OAAO,OAAO;AAAA,QACd,OAAO,OAAO,aAAa,OAAO,aAAa,MAAM,OAAO,QAAQ,OAAO;AAAA,QAC3E,MAAM,OAAO;AAAA,QACb,WAAW,CAAC,CAAC,OAAO;AAAA,MAAA,EACpB;AAEM,cAAA,KAAK,GAAG,YAAY;AAAA,IAAA,CAC7B;AAGG,QAAA,CAAC,QAAQ,QAAQ;AACnB,cAAQ,KAAK;AAAA,QACX,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA,CACT;AAAA,IAAA;AAGI,WAAA;AAAA,EACN,GAAA,CAAC,gBAAgB,qBAAqB,aAAa,CAAC;AAEjD,QAAA,kBAAkB,QAAQ,MAAM;AAEhC,QAAA,sBAAsB,QACvB,OAAO,CAAC,WAAW,OAAO,QAAQ,EAClC,KAAK,CAAC,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE,SAAS,EAAE,EAC9C,MAAM,GAAG,aAAa;AAGrB,QAAA,oBAAoB,SAAS,eAAe;AACnC,iBAAA,QAAQ,CAAC,aAAa;AAC3B,YAAA,oBAAoB,UAAU,cAAe;AAC3CA,cAAAA,WAAU,eAAe,QAAQ;AACvC,YAAI,CAACA,YAAW,CAACA,SAAQ,OAAQ;AAEjC,iBAAS,IAAI,oBAAoB,QAAQ,IAAI,eAAe,KAAK;AACzD,gBAAA,SAASA,SAAQ,CAAC;AACxB,cAAI,CAAC,OAAQ;AACT,cAAA,CAAC,OAAO,KAAM;AAClB,8BAAoB,KAAK,MAAM;AAAA,QAAA;AAAA,MACjC,CACD;AAAA,IAAA;AAGI,WAAA;AAAA,EACN,GAAA,CAAC,SAAS,gBAAgB,WAAW,CAAC;AAEnC,QAAA,CAAC,eAAe,EAAE,WAAW,oBAAoB,aAAa,CAAC,IACnE,yBAAyB;AACrB,QAAA,kBAAkB,uBAAsB,6CAAc;AAE5D,QAAM,sBAAsB,OAC1B,YACA,GACA,aACG;;AACH,2BAAG;AACH,UAAM,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,eAAe,UAAU;AAExE,QAAI,CAAC,QAAQ;AACX,YAAM,MAAM,kBAAkB;AACtB,cAAA,KAAK,oBAAoB,UAAU;AAC3C;AAAA,IAAA;AAGF,UAAM,SAAS;AAAA,MACb,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,IACrB;AAEM,UAAA,gBAAgB,EAAE,GAAG,QAAQ;AACnC,QAAI,UAAU;AACZ,oBAAc,WAAW;AAAA,IAAA;AAG3B,QAAI,WAAW;AAEX,QAAA;AACS,iBAAA,MAAM,cAAc,EAAE,eAAe,GAAG,OAAO,CAAC,EAAE,OAAO;AAAA,aAC7D,OAAY;AACX,cAAA,MAAM,0BAA0B,KAAK;AAC7C,YAAM,QAAM,oCAAO,SAAP,mBAAa,WAAU,wBAAwB;AAC3D;AAAA,IAAA;AAGE,QAAA;AAEF,UAAI,qCAAU,SAAS;AACrB,YAAI,qCAAU,SAAS;AACrB,gBAAM,QAAQ,SAAS,SAAS,EAAE,WAAW,KAAM;AAAA,QAAA,OAC9C;AACL,gBAAM,MAAM,SAAS,SAAS,EAAE,WAAW,KAAM;AAAA,QAAA;AAAA,MACnD;AASF,UAAI,qCAAU,SAAS;AACjB,YAAA,SAAS,SAAS,QAAQ;AAM5B,gBAAM,OAAO;AAAA,YACX;AAAA;AAAA,YAEA,OAAO,SAAS,QAAQ,OAAO;AAAA;AAAA,YAE/B,QAAQ,SAAS,QAAQ,QAAQ;AAAA;AAAA,YAEjC,aAAa,SAAS,QAAQ,cAAc;AAAA;AAAA,YAE5C,aAAa,SAAS,QAAQ,cAAc;AAAA;AAAA,YAE5C,YAAY,SAAS,QAAQ,aAAa;AAAA;AAAA,YAE1C,YAAY,SAAS,QAAQ,aAAa;AAAA,UAC5C;AACA,6BAAmB,IAAI;AAAA,QAAA,OAClB;AACe,8BAAA,SAAS,MAAgB,SAAS,OAAO;AAAA,QAAA;AAAA,MAC/D;AAAA,aAEK,OAAO;AAEN,cAAA,KAAK,2CAA2C,KAAK;AAC7D,YAAM,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAExD;AAEM,QAAA,wBAAwB,CAAC,eAAuB;AACpD,UAAM,SAAS,QAAQ,KAAK,CAACC,UAASA,MAAK,eAAe,UAAU;AACpE,QAAI,CAAC,OAAQ;AACb,6BAAyB,MAAM;AAAA,EACjC;AAEM,QAAA,8BAA8B,OAAO,YAAoB,aAA8B;AACvE,wBAAA,YAAY,MAAM,QAAQ;AAAA,EAChD;AAEA,QAAM,iBAAiB;AAAA,IACrB,MAAM,MAAM,aAAa,EAAE,KAAK,WAAW;AAAA,IAC3C,CAAC,eAAe,WAAW;AAAA,EAC7B;AAEA,QAAM,YAAY,qBAAqB;AACjC,QAAA,2BAA2B,YAAY,iBAAiB;AAE9D,SACGC,kCAAA,KAAAC,WAAA,EAAe,WAAU,WACvB,UAAA;AAAA,IAAyB,yBAAA,IAAI,CAAC,QAAQ,MACrCC,kCAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QAEC,WAAW,KAAK,UAAU;AAAA,UACxB,SAAS;AAAA,UACT,eAAe,OAAO;AAAA,QAAA,CACvB;AAAA,QACD,gBAAc,OAAO,aAAa,OAAO,aAAa,MAAM,OAAO,QAAQ,OAAO;AAAA,QAClF,UAAU,OAAO;AAAA,QACjB,SAAS,CAAC,MAAM,oBAAoB,OAAO,YAAY,CAAC;AAAA,QAGxD,UAAAD,kCAAA,IAAC,cAAW,MAAM,OAAO,MAAM,aAAa,oBAAoB,OAAO,WAAY,CAAA;AAAA,MAAA;AAAA,MAV9E,OAAO,aAAa,MAAM;AAAA,IAAA,CAYlC;AAAA,IACDA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW,aAAa,gBAAgB;AAAA,QACxC,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACC,GAAG,yBAAI;AAAA,MAAA;AAAA,IACV;AAAA,IACAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QAER;AAAA,QACA,SAAS,MAAM,yBAAyB,IAAI;AAAA,MAAA;AAAA,IAC9C;AAAA,IACAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,SAAS,MAAM,mBAAmB,IAAI;AAAA,QAEtC,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;"}
@@ -26,7 +26,7 @@ const FeaturedAction = styled(ayonReactComponents.Button)`
26
26
  opacity: 1;
27
27
  overflow: hidden;
28
28
 
29
- background-color: unset;
29
+ background-color: unset !important;
30
30
  }
31
31
  `;
32
32
  exports.Actions = Actions;
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.styled.cjs.js","sources":["../../../../../src/containers/Actions/Actions.styled.ts"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Actions = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n position: relative;\n`\n\nexport const FeaturedAction = styled(Button)`\n padding: 6px;\n user-select: none;\n position: relative;\n max-width: 32px;\n img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n\n &.loading {\n .icon,\n img {\n opacity: 0;\n }\n opacity: 1;\n overflow: hidden;\n\n background-color: unset;\n }\n`\n"],"names":["Button"],"mappings":";;;;AAGO,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAA,iBAAiB,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;"}
1
+ {"version":3,"file":"Actions.styled.cjs.js","sources":["../../../../../src/containers/Actions/Actions.styled.ts"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Actions = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n position: relative;\n`\n\nexport const FeaturedAction = styled(Button)`\n padding: 6px;\n user-select: none;\n position: relative;\n max-width: 32px;\n img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n\n &.loading {\n .icon,\n img {\n opacity: 0;\n }\n opacity: 1;\n overflow: hidden;\n\n background-color: unset !important;\n }\n`\n"],"names":["Button"],"mappings":";;;;AAGO,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAA,iBAAiB,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;"}
@@ -24,7 +24,7 @@ const FeaturedAction = styled(Button)`
24
24
  opacity: 1;
25
25
  overflow: hidden;
26
26
 
27
- background-color: unset;
27
+ background-color: unset !important;
28
28
  }
29
29
  `;
30
30
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.styled.es.js","sources":["../../../../../src/containers/Actions/Actions.styled.ts"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Actions = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n position: relative;\n`\n\nexport const FeaturedAction = styled(Button)`\n padding: 6px;\n user-select: none;\n position: relative;\n max-width: 32px;\n img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n\n &.loading {\n .icon,\n img {\n opacity: 0;\n }\n opacity: 1;\n overflow: hidden;\n\n background-color: unset;\n }\n`\n"],"names":[],"mappings":";;AAGO,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAA,iBAAiB,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
1
+ {"version":3,"file":"Actions.styled.es.js","sources":["../../../../../src/containers/Actions/Actions.styled.ts"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Actions = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n position: relative;\n`\n\nexport const FeaturedAction = styled(Button)`\n padding: 6px;\n user-select: none;\n position: relative;\n max-width: 32px;\n img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n\n &.loading {\n .icon,\n img {\n opacity: 0;\n }\n opacity: 1;\n overflow: hidden;\n\n background-color: unset !important;\n }\n`\n"],"names":[],"mappings":";;AAGO,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAA,iBAAiB,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -59,8 +59,10 @@ const ActionsDropdownItem = ({
59
59
  const ActionsDropdown = ({
60
60
  options,
61
61
  isLoading,
62
+ isDeveloperMode,
62
63
  onAction,
63
- onConfig
64
+ onConfig,
65
+ ...props
64
66
  }) => {
65
67
  const dropdownRef = React.useRef(null);
66
68
  const handleConfigClick = (e) => {
@@ -73,7 +75,7 @@ const ActionsDropdown = ({
73
75
  {
74
76
  ref: dropdownRef,
75
77
  disabled: isLoading,
76
- className: clsx("more", { loading: isLoading }),
78
+ className: clsx("more", { loading: isLoading, dev: isDeveloperMode }),
77
79
  options,
78
80
  maxOptionsShown: 100,
79
81
  value: [],
@@ -81,7 +83,12 @@ const ActionsDropdown = ({
81
83
  itemTemplate: (option) => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(ActionsDropdownItem, { ...option, onConfig: handleConfigClick }),
82
84
  valueTemplate: () => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(ayonReactComponents.DefaultValueTemplate, { placeholder: "", value: [], dropIcon: "category" }),
83
85
  onChange: (v) => onAction(v[0]),
84
- buttonProps: { ["data-tooltip"]: "Actions", ["data-tooltip-delay"]: 0 }
86
+ buttonProps: {
87
+ // @ts-expect-error
88
+ ["data-tooltip"]: isDeveloperMode ? "Actions (dev bundle)" : "Actions",
89
+ ["data-tooltip-delay"]: 0
90
+ },
91
+ ...props
85
92
  }
86
93
  );
87
94
  };