@ynput/ayon-frontend-shared 0.2.17 → 0.2.18

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 (385) hide show
  1. package/dist/DetailsPanel.cjs.js +6 -3
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +6 -3
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/_virtual/index.cjs10.js +4 -4
  6. package/dist/_virtual/index.cjs5.js +3 -5
  7. package/dist/_virtual/index.cjs5.js.map +1 -1
  8. package/dist/_virtual/index.cjs6.js +5 -3
  9. package/dist/_virtual/index.cjs6.js.map +1 -1
  10. package/dist/_virtual/index.cjs8.js +4 -4
  11. package/dist/_virtual/index.cjs9.js +4 -4
  12. package/dist/_virtual/index.es10.js +4 -4
  13. package/dist/_virtual/index.es5.js +2 -5
  14. package/dist/_virtual/index.es5.js.map +1 -1
  15. package/dist/_virtual/index.es6.js +5 -2
  16. package/dist/_virtual/index.es6.js.map +1 -1
  17. package/dist/_virtual/index.es8.js +4 -4
  18. package/dist/_virtual/index.es9.js +4 -4
  19. package/dist/api.cjs.js +7 -0
  20. package/dist/api.cjs.js.map +1 -1
  21. package/dist/api.es.js +7 -0
  22. package/dist/api.es.js.map +1 -1
  23. package/dist/components.cjs.js +9 -4
  24. package/dist/components.cjs.js.map +1 -1
  25. package/dist/components.es.js +10 -5
  26. package/dist/components.es.js.map +1 -1
  27. package/dist/index.cjs.js +6 -3
  28. package/dist/index.cjs.js.map +1 -1
  29. package/dist/index.es.js +6 -3
  30. package/dist/index.es.js.map +1 -1
  31. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  32. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  33. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  34. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  35. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  36. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  37. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  38. package/dist/node_modules/remove-accents/index.es.js +1 -1
  39. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  40. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  41. package/dist/shared/src/api/generated/graphql.cjs.js +26 -23
  42. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  43. package/dist/shared/src/api/generated/graphql.es.js +26 -23
  44. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  45. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +4 -1
  46. package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
  47. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +4 -1
  48. package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
  49. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +13 -1
  50. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  51. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +13 -1
  52. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  53. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
  54. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  55. package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
  56. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  57. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
  58. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  59. package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
  60. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  61. package/dist/shared/src/api/queries/products/createProduct.cjs.js +54 -0
  62. package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -0
  63. package/dist/shared/src/api/queries/products/createProduct.es.js +54 -0
  64. package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -0
  65. package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
  66. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  67. package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
  68. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  69. package/dist/shared/src/api/queries/versions/updateVersions.cjs.js +80 -0
  70. package/dist/shared/src/api/queries/versions/updateVersions.cjs.js.map +1 -0
  71. package/dist/shared/src/api/queries/versions/updateVersions.es.js +80 -0
  72. package/dist/shared/src/api/queries/versions/updateVersions.es.js.map +1 -0
  73. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
  74. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  75. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
  76. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  77. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
  78. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  79. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
  80. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  81. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +1 -1
  82. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
  83. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +1 -1
  84. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
  85. package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js +13 -0
  86. package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js.map +1 -0
  87. package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js +14 -0
  88. package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js.map +1 -0
  89. package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.cjs.js → EntityPanelUploader/EntityPanelUploader.cjs.js} +378 -119
  90. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -0
  91. package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.es.js → EntityPanelUploader/EntityPanelUploader.es.js} +378 -119
  92. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -0
  93. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js +95 -0
  94. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js.map +1 -0
  95. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js +95 -0
  96. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js.map +1 -0
  97. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +76 -0
  98. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -0
  99. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +77 -0
  100. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -0
  101. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  102. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  103. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +1 -1
  104. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  105. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -0
  106. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  107. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +2 -0
  108. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  109. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
  110. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  111. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
  112. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  113. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +6 -3
  114. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  115. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +6 -3
  116. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  117. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +29 -102
  118. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  119. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +29 -102
  120. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  121. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +6 -3
  122. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  123. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +6 -3
  124. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  125. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +212 -0
  126. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -0
  127. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +212 -0
  128. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -0
  129. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
  130. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  131. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
  132. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  133. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js +2 -2
  134. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js.map +1 -1
  135. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js +2 -2
  136. package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js.map +1 -1
  137. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +6 -3
  138. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  139. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +6 -3
  140. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  141. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js +85 -0
  142. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js.map +1 -0
  143. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js +85 -0
  144. package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js.map +1 -0
  145. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +401 -0
  146. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -0
  147. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +401 -0
  148. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -0
  149. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +308 -0
  150. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -0
  151. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +308 -0
  152. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -0
  153. package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
  154. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  155. package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
  156. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  157. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +6 -3
  158. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  159. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +6 -3
  160. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  161. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  162. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  163. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  164. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  165. package/dist/shared/src/containers/Actions/Actions.styled.cjs.js +1 -1
  166. package/dist/shared/src/containers/Actions/Actions.styled.cjs.js.map +1 -1
  167. package/dist/shared/src/containers/Actions/Actions.styled.es.js +1 -1
  168. package/dist/shared/src/containers/Actions/Actions.styled.es.js.map +1 -1
  169. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +6 -3
  170. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  171. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +6 -3
  172. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  173. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +9 -4
  174. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  175. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +9 -4
  176. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  177. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +6 -3
  178. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  179. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +6 -3
  180. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  181. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +6 -3
  182. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  183. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -3
  184. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  185. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +10 -5
  186. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  187. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +10 -5
  188. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  189. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js.map +1 -1
  191. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js.map +1 -1
  193. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
  194. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  195. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
  196. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  197. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
  198. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  199. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
  200. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  201. package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js +2 -2
  202. package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js.map +1 -1
  203. package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.es.js +2 -2
  204. package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.es.js.map +1 -1
  205. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +1 -1
  206. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
  207. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +1 -1
  208. package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
  209. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
  210. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  211. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
  212. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  213. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
  214. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  215. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
  216. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  217. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +4 -2
  218. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  219. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +4 -2
  220. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  221. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +6 -3
  222. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  223. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +6 -3
  224. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  225. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js +3 -3
  226. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js.map +1 -1
  227. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js +3 -3
  228. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js.map +1 -1
  229. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
  230. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  231. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
  232. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  233. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  234. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  235. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +7 -1
  236. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  237. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +7 -1
  238. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  239. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
  240. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
  242. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  243. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +2 -0
  244. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +2 -0
  246. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  247. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +2 -0
  248. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +2 -0
  250. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  251. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js +1 -0
  252. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js.map +1 -1
  253. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js +1 -0
  254. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js.map +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +2 -0
  256. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +2 -0
  258. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +2 -0
  260. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
  261. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +2 -0
  262. package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +3 -2
  264. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
  265. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +3 -2
  266. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +1 -1
  268. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
  269. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
  273. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
  275. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +6 -3
  276. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  277. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +6 -3
  278. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  279. package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
  280. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  281. package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
  282. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  283. package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
  284. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  285. package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
  286. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  287. package/dist/shared/src/context/PowerpackContext.cjs.js +2 -0
  288. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  289. package/dist/shared/src/context/PowerpackContext.es.js +2 -0
  290. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  291. package/dist/shared/src/context/RemoteModulesContext.cjs.js +2 -0
  292. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  293. package/dist/shared/src/context/RemoteModulesContext.es.js +2 -0
  294. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  295. package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js +15 -4
  296. package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js.map +1 -1
  297. package/dist/shared/src/context/ThumbnailUploaderContext.es.js +15 -4
  298. package/dist/shared/src/context/ThumbnailUploaderContext.es.js.map +1 -1
  299. package/dist/shared/src/context/pip/PiPWrapper.cjs.js +1 -1
  300. package/dist/shared/src/context/pip/PiPWrapper.cjs.js.map +1 -1
  301. package/dist/shared/src/context/pip/PiPWrapper.es.js +1 -1
  302. package/dist/shared/src/context/pip/PiPWrapper.es.js.map +1 -1
  303. package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
  304. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  305. package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
  306. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  307. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
  308. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  309. package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
  310. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  311. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
  312. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  313. package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
  314. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  315. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
  316. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  317. package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
  318. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  319. package/dist/shared/src/util/productTypes.cjs.js +1 -0
  320. package/dist/shared/src/util/productTypes.cjs.js.map +1 -1
  321. package/dist/shared/src/util/productTypes.es.js +1 -0
  322. package/dist/shared/src/util/productTypes.es.js.map +1 -1
  323. package/dist/shared/src/utils/extractVersionFromFilename.cjs.js +32 -0
  324. package/dist/shared/src/utils/extractVersionFromFilename.cjs.js.map +1 -0
  325. package/dist/shared/src/utils/extractVersionFromFilename.es.js +32 -0
  326. package/dist/shared/src/utils/extractVersionFromFilename.es.js.map +1 -0
  327. package/dist/shared/src/utils/versionUploadHelpers.cjs.js +121 -0
  328. package/dist/shared/src/utils/versionUploadHelpers.cjs.js.map +1 -0
  329. package/dist/shared/src/utils/versionUploadHelpers.es.js +121 -0
  330. package/dist/shared/src/utils/versionUploadHelpers.es.js.map +1 -0
  331. package/dist/types/api/generated/graphql.d.ts +47 -36
  332. package/dist/types/api/queries/activities/getActivities.d.ts +4 -4
  333. package/dist/types/api/queries/activities/updateActivities.d.ts +8 -8
  334. package/dist/types/api/queries/entities/getEntity.d.ts +4 -4
  335. package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -4
  336. package/dist/types/api/queries/entities/updateEntity.d.ts +4 -4
  337. package/dist/types/api/queries/entityLists/getLists.d.ts +4 -4
  338. package/dist/types/api/queries/index.d.ts +2 -0
  339. package/dist/types/api/queries/overview/getOverview.d.ts +4 -4
  340. package/dist/types/api/queries/products/createProduct.d.ts +161 -0
  341. package/dist/types/api/queries/products/index.d.ts +1 -0
  342. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -4
  343. package/dist/types/api/queries/users/getUsers.d.ts +4 -4
  344. package/dist/types/api/queries/versions/index.d.ts +1 -0
  345. package/dist/types/api/queries/versions/updateVersions.d.ts +685 -0
  346. package/dist/types/components/EntityPanelUploader/Dropzone.d.ts +11 -0
  347. package/dist/types/components/{EntityThumbnailUploader/EntityThumbnailUploader.d.ts → EntityPanelUploader/EntityPanelUploader.d.ts} +3 -3
  348. package/dist/types/components/EntityPanelUploader/EntityPanelUploader.styled.d.ts +8 -0
  349. package/dist/types/components/EntityPanelUploader/EntityPanelUploaderDialog.d.ts +10 -0
  350. package/dist/types/components/EntityPanelUploader/index.d.ts +1 -0
  351. package/dist/types/components/ReviewablesList/index.d.ts +1 -0
  352. package/dist/types/components/ReviewablesList/useReviewablesUpload.d.ts +19 -0
  353. package/dist/types/components/VersionUploader/components/UploadVersionDialog.d.ts +5 -0
  354. package/dist/types/components/VersionUploader/components/UploadVersionForm.d.ts +18 -0
  355. package/dist/types/components/VersionUploader/context/VersionUploadContext.d.ts +54 -0
  356. package/dist/types/components/VersionUploader/index.d.ts +2 -0
  357. package/dist/types/components/index.d.ts +2 -2
  358. package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +2 -1
  359. package/dist/types/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.d.ts +3 -1
  360. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +1 -0
  361. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +2 -1
  362. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +2 -1
  363. package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +2 -1
  364. package/dist/types/context/ThumbnailUploaderContext.d.ts +3 -2
  365. package/dist/types/utils/versionUploadHelpers.d.ts +63 -0
  366. package/package.json +1 -1
  367. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +0 -1
  368. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +0 -1
  369. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js +0 -12
  370. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js.map +0 -1
  371. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js +0 -12
  372. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js.map +0 -1
  373. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js +0 -112
  374. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js.map +0 -1
  375. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js +0 -112
  376. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js.map +0 -1
  377. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js +0 -104
  378. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js.map +0 -1
  379. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js +0 -104
  380. package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js.map +0 -1
  381. package/dist/types/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.d.ts +0 -1
  382. package/dist/types/components/EntityThumbnailUploader/index.d.ts +0 -1
  383. package/dist/types/components/ThumbnailUploader/ThumbnailUploader.d.ts +0 -17
  384. package/dist/types/components/ThumbnailUploader/ThumbnailUploader.styled.d.ts +0 -4
  385. package/dist/types/components/ThumbnailUploader/index.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewablesList.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["useDetailsPanelContext","useGetReviewablesForVersionQuery","useHasTranscoderQuery","useState","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","reviewable","getGroupedReviewables","useSortVersionReviewablesMutation","arrayMove","toast","useDeleteReviewableMutation","confirmDelete","useCreateContextMenu","jsxs","Fragment","jsx","ReviewableUpload","Styled.LoadingCard","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ReviewableCard","ReviewableProgressCard","_a"],"mappings":"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"}
1
+ {"version":3,"file":"ReviewablesList.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["useDetailsPanelContext","useGetReviewablesForVersionQuery","useHasTranscoderQuery","useState","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","reviewable","getGroupedReviewables","useSortVersionReviewablesMutation","arrayMove","toast","useDeleteReviewableMutation","confirmDelete","useCreateContextMenu","jsxs","Fragment","jsx","ReviewableUpload","Styled.LoadingCard","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ReviewableCard","ReviewableProgressCard","_a"],"mappings":"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"}
@@ -67,6 +67,8 @@ import "../../api/queries/users/updateUsers.es.js";
67
67
  import "../../api/queries/watchers/getWatchers.es.js";
68
68
  import "../../api/queries/permissions/getPermissions.es.js";
69
69
  import "../../api/queries/grouping/getGrouping.es.js";
70
+ import "../../api/queries/versions/updateVersions.es.js";
71
+ import "../../api/queries/products/createProduct.es.js";
70
72
  import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter, DragOverlay } from "@dnd-kit/core";
71
73
  import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, arrayMove } from "@dnd-kit/sortable";
72
74
  import "@ynput/ayon-react-components";
@@ -95,6 +97,7 @@ import "../../context/pip/PiPWrapper.es.js";
95
97
  import "../../context/AddonProjectContext.es.js";
96
98
  import "../../context/AddonContext.es.js";
97
99
  import "../../context/PowerpackContext.es.js";
100
+ import "axios";
98
101
  import { ReviewableCard } from "../ReviewableCard/ReviewableCard.es.js";
99
102
  import { ReviewableProgressCard } from "../ReviewableProgressCard/ReviewableProgressCard.es.js";
100
103
  import "../FileThumbnail/FileThumbnail.es.js";
@@ -166,9 +169,7 @@ import "../../containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.
166
169
  import "../../containers/Actions/Actions.styled.es.js";
167
170
  import "../../containers/Actions/ActionsDropdown/ActionsDropdown.es.js";
168
171
  import "../../containers/Actions/ActionIcon.es.js";
169
- import "../EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js";
170
- import "../ThumbnailUploader/ThumbnailUploader.styled.es.js";
171
- import "axios";
172
+ import "../EntityPanelUploader/EntityPanelUploader.styled.es.js";
172
173
  import "../SimpleFormDialog/SimpleFormDialog.es.js";
173
174
  import "../EntityPath/EntityPath.styled.es.js";
174
175
  import "../EntityPath/SegmentProvider.es.js";
@@ -184,6 +185,8 @@ import "../AttributeEditor/components/MinMaxField.es.js";
184
185
  import "../EnumEditor/EnumEditor.styled.es.js";
185
186
  import "../SearchFilter/filterDates.es.js";
186
187
  import "../Badge/Badge.es.js";
188
+ import "../VersionUploader/components/UploadVersionDialog.es.js";
189
+ import "../VersionUploader/context/VersionUploadContext.es.js";
187
190
  const ReviewablesList = ({
188
191
  projectName,
189
192
  versionId,
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewablesList.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["reviewable","jsxs","Fragment","jsx","Styled.LoadingCard","_a"],"mappings":"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"}
1
+ {"version":3,"file":"ReviewablesList.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["reviewable","jsxs","Fragment","jsx","Styled.LoadingCard","_a"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const jsxRuntime = require("../../../../_virtual/jsx-runtime.cjs.js");
4
- const axios = require("axios");
5
- const reactToastify = require("react-toastify");
6
4
  const React = require("react");
7
5
  const clsx = require("clsx");
8
6
  const ayonReactComponents = require("@ynput/ayon-react-components");
9
- const client = require("../../api/base/client.cjs.js");
7
+ require("../ThumbnailSimple/ThumbnailSimple.cjs.js");
8
+ require("../EmptyPlaceholder/EmptyPlaceholder.cjs.js");
9
+ require("../EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");
10
+ require("react-toastify");
11
+ require("../../api/base/client.cjs.js");
10
12
  require("../../api/generated/graphql.cjs.js");
11
13
  require("../../api/generated/access.cjs.js");
12
14
  require("../../api/generated/actions.cjs.js");
@@ -65,7 +67,7 @@ require("../../api/queries/overview/updateOverview.cjs.js");
65
67
  require("../../api/queries/project/getProject.cjs.js");
66
68
  require("../../api/queries/project/updateProject.cjs.js");
67
69
  require("../../api/queries/review/getReview.cjs.js");
68
- const updateReview = require("../../api/queries/review/updateReview.cjs.js");
70
+ require("../../api/queries/review/updateReview.cjs.js");
69
71
  require("../../api/queries/system/getSystem.cjs.js");
70
72
  require("../../api/queries/userDashboard/getUserDashboard.cjs.js");
71
73
  require("../../api/queries/users/getUsers.cjs.js");
@@ -73,9 +75,8 @@ require("../../api/queries/users/updateUsers.cjs.js");
73
75
  require("../../api/queries/watchers/getWatchers.cjs.js");
74
76
  require("../../api/queries/permissions/getPermissions.cjs.js");
75
77
  require("../../api/queries/grouping/getGrouping.cjs.js");
76
- require("../ThumbnailSimple/ThumbnailSimple.cjs.js");
77
- require("../EmptyPlaceholder/EmptyPlaceholder.cjs.js");
78
- require("../EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");
78
+ require("../../api/queries/versions/updateVersions.cjs.js");
79
+ require("../../api/queries/products/createProduct.cjs.js");
79
80
  require("@dnd-kit/core");
80
81
  require("@dnd-kit/sortable");
81
82
  require("./ReviewablesList.styled.cjs.js");
@@ -84,6 +85,7 @@ require("../../containers/ContextMenu/ContextMenuContext.cjs.js");
84
85
  require("lodash");
85
86
  require("../../util/pubsub.cjs.js");
86
87
  const ReviewablesUpload_styled = require("./ReviewablesUpload.styled.cjs.js");
88
+ const useReviewablesUpload = require("./useReviewablesUpload.cjs.js");
87
89
  require("../../context/RemoteModulesContext.cjs.js");
88
90
  require("../../context/DetailsPanelContext.cjs.js");
89
91
  require("../../context/ThumbnailUploaderContext.cjs.js");
@@ -164,8 +166,8 @@ require("../../containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating
164
166
  require("../../containers/Actions/Actions.styled.cjs.js");
165
167
  require("../../containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js");
166
168
  require("../../containers/Actions/ActionIcon.cjs.js");
167
- require("../EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js");
168
- require("../ThumbnailUploader/ThumbnailUploader.styled.cjs.js");
169
+ require("../EntityPanelUploader/EntityPanelUploader.styled.cjs.js");
170
+ require("axios");
169
171
  require("../SimpleFormDialog/SimpleFormDialog.cjs.js");
170
172
  require("../EntityPath/EntityPath.styled.cjs.js");
171
173
  require("../EntityPath/SegmentProvider.cjs.js");
@@ -181,6 +183,8 @@ require("../AttributeEditor/components/MinMaxField.cjs.js");
181
183
  require("../EnumEditor/EnumEditor.styled.cjs.js");
182
184
  require("../SearchFilter/filterDates.cjs.js");
183
185
  require("../Badge/Badge.cjs.js");
186
+ require("../VersionUploader/components/UploadVersionDialog.cjs.js");
187
+ require("../VersionUploader/context/VersionUploadContext.cjs.js");
184
188
  const ReviewableUpload = ({
185
189
  projectName,
186
190
  taskId,
@@ -200,7 +204,19 @@ const ReviewableUpload = ({
200
204
  }) => {
201
205
  var _a;
202
206
  const [isDraggingFile, setIsDraggingFile] = React.useState(false);
203
- const [uploading, setUploads] = React.useState({});
207
+ const {
208
+ handleFileUpload: uploadFiles,
209
+ handleRemoveUpload,
210
+ uploading
211
+ } = useReviewablesUpload.useReviewablesUpload({
212
+ projectName,
213
+ versionId,
214
+ taskId,
215
+ folderId,
216
+ productId,
217
+ dispatch,
218
+ onUpload
219
+ });
204
220
  const canUpload = Boolean(versionId);
205
221
  React.useEffect(() => {
206
222
  if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {
@@ -211,9 +227,9 @@ const ReviewableUpload = ({
211
227
  }
212
228
  });
213
229
  setPendingFiles([]);
214
- handleFileUpload(files);
230
+ uploadFiles(files);
215
231
  }
216
- }, [canUpload, versionId, pendingFiles.length]);
232
+ }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles]);
217
233
  const isImageFile = (file) => {
218
234
  return file.type.startsWith("image/");
219
235
  };
@@ -223,16 +239,6 @@ const ReviewableUpload = ({
223
239
  preview: isImageFile(file) ? URL.createObjectURL(file) : void 0
224
240
  }));
225
241
  };
226
- const handleRemoveUpload = (name) => {
227
- if (!versionId) return;
228
- setUploads((uploads) => {
229
- var _a2;
230
- return {
231
- ...uploads,
232
- [versionId]: ((_a2 = uploads[versionId]) == null ? void 0 : _a2.filter((upload) => upload.name !== name)) || []
233
- };
234
- });
235
- };
236
242
  const handleFileUpload = async (files) => {
237
243
  const fileArray = Array.from(files);
238
244
  onFilesAdded == null ? void 0 : onFilesAdded(fileArray);
@@ -242,86 +248,7 @@ const ReviewableUpload = ({
242
248
  }
243
249
  return;
244
250
  }
245
- const uploadingFiles = fileArray.map((file) => ({
246
- name: file.name,
247
- size: file.size,
248
- progress: 0
249
- }));
250
- const newUploadsForVersion = [...uploading[versionId] || [], ...uploadingFiles];
251
- setUploads({ ...uploading, [versionId]: newUploadsForVersion });
252
- const successHandler = (file) => (response) => {
253
- if (!versionId) return;
254
- console.log(`Upload successful for ${file.name}`);
255
- const data = response.data;
256
- if (!projectName) return;
257
- dispatch(
258
- // @ts-ignore
259
- updateReview.reviewablesQueries.util.updateQueryData(
260
- "getReviewablesForVersion",
261
- { projectName, versionId },
262
- (draft) => {
263
- if (!draft.reviewables) {
264
- draft.reviewables = [];
265
- }
266
- draft.reviewables.push(data);
267
- }
268
- )
269
- );
270
- productId && dispatch(client.api.util.invalidateTags([{ type: "viewer", id: productId }]));
271
- dispatch(client.api.util.invalidateTags([{ type: "viewer", id: versionId }]));
272
- folderId && dispatch(client.api.util.invalidateTags([{ type: "viewer", id: folderId }]));
273
- taskId && dispatch(client.api.util.invalidateTags([{ type: "viewer", id: taskId }]));
274
- handleRemoveUpload(file.name);
275
- };
276
- const errorHandler = (file) => (error) => {
277
- if (!versionId) return;
278
- console.error(`Upload failed for ${file.name}: ${error}`);
279
- reactToastify.toast.error(`Failed to upload file: ${file.name}`);
280
- setUploads((uploads) => {
281
- const currentUploads = uploads[versionId] || [];
282
- const updatedUploads = currentUploads.map((upload) => {
283
- if (upload.name !== file.name) return upload;
284
- return {
285
- ...upload,
286
- error: error.response.data.detail || error.message
287
- };
288
- });
289
- return {
290
- ...uploads,
291
- [versionId]: updatedUploads
292
- };
293
- });
294
- };
295
- const progressHandler = (file) => {
296
- if (!versionId) return () => {
297
- };
298
- return (progressEvent) => setUploads((uploads) => {
299
- const currentUploads = uploads[versionId] || [];
300
- const updatedUploads = currentUploads.map((upload) => {
301
- if (upload.name !== file.name) return upload;
302
- return {
303
- ...upload,
304
- progress: progressEvent.total ? Math.round(progressEvent.loaded / progressEvent.total * 100) : 0
305
- };
306
- });
307
- return {
308
- ...uploads,
309
- [versionId]: updatedUploads
310
- };
311
- });
312
- };
313
- try {
314
- for (const file of fileArray) {
315
- const autoLabel = file.name.split(".").slice(0, -1).join(".");
316
- const url = `/api/projects/${projectName}/versions/${versionId}/reviewables?label=${autoLabel}`;
317
- const headers = { "content-type": file.type, "x-file-name": file.name };
318
- axios.post(url, file, { headers, onUploadProgress: progressHandler(file) }).then(successHandler(file)).catch(errorHandler(file));
319
- }
320
- onUpload && onUpload();
321
- } catch (error) {
322
- console.error(error);
323
- reactToastify.toast.error("Failed to upload file/s");
324
- }
251
+ await uploadFiles(files);
325
252
  };
326
253
  const handleInputChange = (event) => {
327
254
  const files = event.target.files;
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import axios, { AxiosProgressEvent, AxiosResponse } from 'axios'\nimport { toast } from 'react-toastify'\nimport { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\nimport api, { reviewablesQueries } from '@shared/api'\nimport type { UploadReviewableApiResponse } from '@shared/api'\n\n// components\nimport { ReviewableProgress, ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [uploading, setUploads] = useState<{ [key: string]: ReviewableProgress[] }>({})\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n handleFileUpload(files)\n }\n }, [canUpload, versionId, pendingFiles.length])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleRemoveUpload = (name: string) => {\n if (!versionId) return\n setUploads((uploads) => ({\n ...uploads,\n [versionId]: uploads[versionId]?.filter((upload) => upload.name !== name) || [],\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n const uploadingFiles = fileArray.map((file) => ({\n name: file.name,\n size: file.size,\n progress: 0,\n }))\n\n const newUploadsForVersion = [...(uploading[versionId] || []), ...uploadingFiles]\n\n setUploads({ ...uploading, [versionId]: newUploadsForVersion })\n\n const successHandler = (file: File) => (response: AxiosResponse) => {\n if (!versionId) return\n // Handle successful upload\n console.log(`Upload successful for ${file.name}`)\n // patch the new data into the reviewables cache\n const data = response.data as UploadReviewableApiResponse\n\n if (!projectName) return\n\n dispatch(\n // @ts-ignore\n reviewablesQueries.util.updateQueryData(\n 'getReviewablesForVersion',\n { projectName, versionId },\n (draft) => {\n if (!draft.reviewables) {\n draft.reviewables = []\n }\n // @ts-ignore\n draft.reviewables.push(data)\n },\n ),\n )\n\n // also invalidate the viewer cache\n productId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: productId }]))\n dispatch(api.util.invalidateTags([{ type: 'viewer', id: versionId }]))\n folderId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: folderId }]))\n taskId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: taskId }]))\n // remove the file from the list\n handleRemoveUpload(file.name)\n }\n\n const errorHandler = (file: File) => (error: any) => {\n if (!versionId) return\n console.error(`Upload failed for ${file.name}: ${error}`)\n toast.error(`Failed to upload file: ${file.name}`)\n // add error to the file\n setUploads((uploads) => {\n // current uploads for versionId\n const currentUploads = uploads[versionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n error: error.response.data.detail || error.message,\n }\n })\n\n // update state\n return {\n ...uploads,\n [versionId]: updatedUploads,\n }\n })\n }\n\n const progressHandler = (file: File) => {\n if (!versionId) return () => {}\n return (progressEvent: AxiosProgressEvent) =>\n setUploads((uploads) => {\n // current uploads for versionId\n const currentUploads = uploads[versionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n progress: progressEvent.total\n ? Math.round((progressEvent.loaded / progressEvent.total) * 100)\n : 0,\n }\n })\n\n // update state\n return {\n ...uploads,\n [versionId]: updatedUploads,\n }\n })\n }\n\n try {\n // upload the files\n for (const file of fileArray) {\n const autoLabel = file.name.split('.').slice(0, -1).join('.')\n\n const url = `/api/projects/${projectName}/versions/${versionId}/reviewables?label=${autoLabel}`\n const headers = { 'content-type': file.type, 'x-file-name': file.name }\n axios\n .post(url, file, { headers, onUploadProgress: progressHandler(file) })\n .then(successHandler(file))\n .catch(errorHandler(file))\n }\n // Callback after successful uploads\n onUpload && onUpload()\n } catch (error) {\n // something went wrong with everything, EEEEK!\n console.error(error)\n toast.error('Failed to upload file/s')\n }\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["useState","useEffect","_a","reviewablesQueries","api","toast","jsxs","Fragment","jsx","Styled.ReviewablesList","ReviewableProgressCard","Styled.Upload","Styled.Dropzone","Icon"],"mappings":"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"}
1
+ {"version":3,"file":"ReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\n// components\nimport { ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\nimport { useReviewablesUpload } from './useReviewablesUpload'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n\n // Use the custom hook for upload logic\n const {\n handleFileUpload: uploadFiles,\n handleRemoveUpload,\n uploading,\n } = useReviewablesUpload({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n })\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n uploadFiles(files)\n }\n }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n // Use the hook's upload function for actual uploading\n await uploadFiles(files)\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["useState","useReviewablesUpload","useEffect","jsxs","Fragment","jsx","Styled.ReviewablesList","ReviewableProgressCard","Styled.Upload","Styled.Dropzone","Icon"],"mappings":"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"}