@ynput/ayon-frontend-shared 0.2.45 → 0.3.0

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 +1 -1
  2. package/dist/DetailsPanel.es.js +72 -65
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +104 -102
  6. package/dist/Slicer.cjs.js +1 -1
  7. package/dist/Slicer.es.js +113 -4
  8. package/dist/Slicer.es.js.map +1 -1
  9. package/dist/Views.cjs.js.map +1 -1
  10. package/dist/Views.es.js.map +1 -1
  11. package/dist/_virtual/index.cjs10.js +1 -1
  12. package/dist/_virtual/index.cjs11.js +1 -1
  13. package/dist/_virtual/index.cjs12.js +1 -1
  14. package/dist/_virtual/index.es10.js +3 -3
  15. package/dist/_virtual/index.es11.js +5 -5
  16. package/dist/_virtual/index.es12.js +5 -5
  17. package/dist/components.cjs.js +1 -1
  18. package/dist/components.es.js +141 -139
  19. package/dist/components.es.js.map +1 -1
  20. package/dist/index.cjs.js +1 -1
  21. package/dist/index.es.js +61 -54
  22. package/dist/index.es.js.map +1 -1
  23. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.cjs.js +5 -5
  24. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.cjs.js.map +1 -1
  25. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.es.js +313 -305
  26. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.es.js.map +1 -1
  27. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  28. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  29. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  30. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  31. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  32. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  33. package/dist/shared/src/api/queries/views/updateViews.cjs.js +1 -1
  34. package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
  35. package/dist/shared/src/api/queries/views/updateViews.es.js +1 -1
  36. package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
  37. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  38. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  39. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +57 -50
  40. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  41. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  42. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  43. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +45 -38
  44. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  45. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  46. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  47. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +47 -40
  48. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  49. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  50. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  51. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +49 -42
  52. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  53. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  54. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  55. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +44 -37
  56. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  57. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  58. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  59. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +48 -41
  60. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  61. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +2 -0
  62. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -0
  63. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +279 -0
  64. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -0
  65. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  66. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  67. package/dist/shared/src/components/RenameForm/RenameForm.es.js +48 -41
  68. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  69. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  70. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  71. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +64 -57
  72. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  73. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  74. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  75. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +54 -47
  76. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  77. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  78. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  79. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +53 -46
  80. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  81. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  82. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  83. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +52 -45
  84. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  85. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +2 -2
  86. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  87. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +56 -49
  88. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  89. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  90. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  91. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +53 -46
  92. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  93. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  94. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  95. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +54 -47
  96. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  97. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  98. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  99. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +70 -63
  100. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  101. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  102. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  103. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +49 -42
  104. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  105. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  106. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  107. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +68 -61
  108. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  109. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  110. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  111. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +93 -86
  112. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  113. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  114. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  115. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +47 -40
  116. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  117. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  118. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  119. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +46 -43
  120. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  121. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  122. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  123. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +49 -46
  124. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  125. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  126. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  127. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +49 -46
  128. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  129. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  130. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  131. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +49 -46
  132. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  133. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  134. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  135. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +50 -42
  136. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  137. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  138. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  139. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +55 -48
  140. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  141. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
  142. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  143. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +70 -63
  144. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  145. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  146. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  147. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +47 -40
  148. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  149. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  150. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  151. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +468 -448
  152. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  153. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  154. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  155. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +96 -89
  156. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  157. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  158. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  159. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +47 -40
  160. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  161. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  162. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  163. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +57 -50
  164. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  165. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  166. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  167. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +54 -47
  168. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  169. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  170. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  171. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  172. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  173. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +63 -68
  174. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  175. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  176. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  177. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +49 -41
  178. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  179. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  180. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  181. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +51 -44
  182. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  183. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  184. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  185. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +48 -41
  186. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  187. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  188. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  189. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +55 -48
  190. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  191. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  192. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  193. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +54 -47
  194. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  195. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  196. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  197. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +51 -44
  198. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  199. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  200. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  201. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +51 -44
  202. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  203. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  204. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  205. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +51 -44
  206. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  207. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  208. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  209. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +54 -47
  210. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  211. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  212. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  213. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +46 -39
  214. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  215. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  216. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  217. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +46 -39
  218. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  219. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  220. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  221. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +48 -41
  222. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  223. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  224. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  225. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +62 -55
  226. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  227. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.cjs.js +1 -1
  228. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.cjs.js.map +1 -1
  229. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.es.js +11 -6
  230. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.es.js.map +1 -1
  231. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +2 -2
  232. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
  233. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +16 -13
  234. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
  235. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  236. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  237. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +342 -116
  238. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  239. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js +2 -2
  240. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js.map +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js +47 -40
  242. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js.map +1 -1
  243. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -2
  244. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +7 -7
  246. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  247. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  248. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +69 -62
  250. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  251. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  252. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  253. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +51 -44
  254. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js +2 -2
  256. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js.map +1 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js +29 -33
  258. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js.map +1 -1
  259. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  260. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  261. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +118 -111
  262. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  263. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  264. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  265. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +49 -46
  266. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  267. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -0
  268. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -0
  269. package/dist/shared/src/containers/Slicer/components/Slicer.es.js +82 -0
  270. package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -0
  271. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js +27 -0
  272. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js.map +1 -0
  273. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js +71 -0
  274. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js.map +1 -0
  275. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +10 -0
  276. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -0
  277. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +294 -0
  278. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -0
  279. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +2 -0
  280. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -0
  281. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +215 -0
  282. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -0
  283. package/dist/shared/src/containers/Slicer/hooks/useFiltersWithHierarchy.cjs.js.map +1 -0
  284. package/dist/shared/src/containers/Slicer/hooks/useFiltersWithHierarchy.es.js.map +1 -0
  285. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js +2 -0
  286. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js.map +1 -0
  287. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js +25 -0
  288. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js.map +1 -0
  289. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js +2 -0
  290. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js.map +1 -0
  291. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js +28 -0
  292. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js.map +1 -0
  293. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +2 -0
  294. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -0
  295. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +304 -0
  296. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -0
  297. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.cjs.js +2 -0
  298. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.cjs.js.map +1 -0
  299. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.es.js +99 -0
  300. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.es.js.map +1 -0
  301. package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.cjs.js.map +1 -0
  302. package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.es.js.map +1 -0
  303. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  304. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  305. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +95 -88
  306. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  307. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  308. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  309. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +32 -31
  310. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  311. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  312. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  313. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +125 -121
  314. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  315. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +1 -1
  316. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
  317. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +47 -49
  318. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
  319. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  320. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  321. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +6 -5
  322. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  323. package/dist/shared/src/context/AddonContext.cjs.js.map +1 -1
  324. package/dist/shared/src/context/AddonContext.es.js.map +1 -1
  325. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  326. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  327. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  328. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  329. package/dist/shared/src/context/WebsocketContext.es.js +51 -44
  330. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  331. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  332. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  333. package/dist/shared/src/hooks/useLoadModules.cjs.js +1 -1
  334. package/dist/shared/src/hooks/useLoadModules.cjs.js.map +1 -1
  335. package/dist/shared/src/hooks/useLoadModules.es.js +7 -7
  336. package/dist/shared/src/hooks/useLoadModules.es.js.map +1 -1
  337. package/dist/shared/src/util/columnConfigConverter.cjs.js +1 -1
  338. package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
  339. package/dist/shared/src/util/columnConfigConverter.es.js +69 -46
  340. package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
  341. package/dist/shared/src/util/getGroupByDataType.cjs.js +1 -1
  342. package/dist/shared/src/util/getGroupByDataType.cjs.js.map +1 -1
  343. package/dist/shared/src/util/getGroupByDataType.es.js +4 -4
  344. package/dist/shared/src/util/getGroupByDataType.es.js.map +1 -1
  345. package/dist/types/api/queries/activities/getActivities.d.ts +1 -1
  346. package/dist/types/api/queries/entityLists/getLists.d.ts +183 -183
  347. package/dist/types/api/queries/links/getLinks.d.ts +1 -1
  348. package/dist/types/api/queries/overview/getOverview.d.ts +1 -1
  349. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +2 -2
  350. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +28 -0
  351. package/dist/types/components/RemotePage/index.d.ts +1 -0
  352. package/dist/types/components/index.d.ts +31 -30
  353. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -2
  354. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +1 -4
  355. package/dist/types/containers/ProjectTreeTable/utils/restrictedEntity.d.ts +3 -3
  356. package/dist/types/containers/Slicer/components/Slicer.d.ts +9 -0
  357. package/dist/types/containers/Slicer/components/SlicerDropdownFallback.d.ts +7 -0
  358. package/dist/types/containers/Slicer/components/SlicerSearch.d.ts +6 -0
  359. package/dist/types/containers/Slicer/context/SlicerContext.d.ts +48 -0
  360. package/dist/types/containers/Slicer/hooks/index.d.ts +5 -0
  361. package/dist/types/containers/Slicer/{useFiltersWithHierarchy.d.ts → hooks/useFiltersWithHierarchy.d.ts} +1 -1
  362. package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +51 -0
  363. package/dist/types/containers/Slicer/hooks/useSlicerAttributesData.d.ts +7 -0
  364. package/dist/types/containers/Slicer/hooks/useTableDataBySlice.d.ts +8 -0
  365. package/dist/types/containers/Slicer/hooks/useUsersTable.d.ts +10 -0
  366. package/dist/types/containers/Slicer/index.d.ts +4 -2
  367. package/dist/types/containers/Slicer/types.d.ts +35 -0
  368. package/dist/types/containers/Slicer/{createFilterFromSlicer.d.ts → util/createFilterFromSlicer.d.ts} +2 -2
  369. package/dist/types/containers/Slicer/util/index.d.ts +1 -0
  370. package/dist/types/containers/Views/ViewsMenuContainer/BaseViewsTags.d.ts +4 -1
  371. package/dist/types/containers/Views/hooks/pages/useOverviewViewSettings.d.ts +7 -1
  372. package/dist/types/containers/Views/index.d.ts +1 -1
  373. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +1 -1
  374. package/dist/types/context/AddonContext.d.ts +10 -2
  375. package/dist/types/context/AddonProjectContext.d.ts +7 -12
  376. package/dist/types/hooks/useGroupByRemoteModules.d.ts +2 -1
  377. package/package.json +1 -1
  378. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.cjs.js.map +0 -1
  379. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.es.js.map +0 -1
  380. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js.map +0 -1
  381. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js.map +0 -1
  382. /package/dist/shared/src/containers/Slicer/{useFiltersWithHierarchy.cjs.js → hooks/useFiltersWithHierarchy.cjs.js} +0 -0
  383. /package/dist/shared/src/containers/Slicer/{useFiltersWithHierarchy.es.js → hooks/useFiltersWithHierarchy.es.js} +0 -0
  384. /package/dist/shared/src/containers/Slicer/{createFilterFromSlicer.cjs.js → util/createFilterFromSlicer.cjs.js} +0 -0
  385. /package/dist/shared/src/containers/Slicer/{createFilterFromSlicer.es.js → util/createFilterFromSlicer.es.js} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("../../../../bail/index.cjs.js"),B=require("../../../../../_virtual/index.cjs11.js"),z=require("../../../../../_virtual/index.cjs12.js"),E=require("../../../../is-plain-obj/index.cjs.js"),D=require("../../../../trough/lib/index.cjs.js"),M=require("../../vfile/lib/index.cjs.js"),Y=$().freeze(),A={}.hasOwnProperty;function $(){const t=D.trough(),s=[];let a={},w,h=-1;return n.data=j,n.Parser=void 0,n.Compiler=void 0,n.freeze=q,n.attachers=s,n.use=I,n.parse=O,n.stringify=V,n.run=F,n.runSync=N,n.process=L,n.processSync=U,n;function n(){const e=$();let r=-1;for(;++r<s.length;)e.use(...s[r]);return e.data(z(!0,{},a)),e}function j(e,r){return typeof e=="string"?arguments.length===2?(P("data",w),a[e]=r,n):A.call(a,e)&&a[e]||null:e?(P("data",w),a=e,n):a}function q(){if(w)return n;for(;++h<s.length;){const[e,...r]=s[h];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);const i=e.call(n,...r);typeof i=="function"&&t.use(i)}return w=!0,h=Number.POSITIVE_INFINITY,n}function I(e,...r){let i;if(P("use",w),e!=null)if(typeof e=="function")d(e,...r);else if(typeof e=="object")Array.isArray(e)?y(e):p(e);else throw new TypeError("Expected usable value, not `"+e+"`");return i&&(a.settings=Object.assign(a.settings||{},i)),n;function u(o){if(typeof o=="function")d(o);else if(typeof o=="object")if(Array.isArray(o)){const[f,...c]=o;d(f,...c)}else p(o);else throw new TypeError("Expected usable value, not `"+o+"`")}function p(o){y(o.plugins),o.settings&&(i=Object.assign(i||{},o.settings))}function y(o){let f=-1;if(o!=null)if(Array.isArray(o))for(;++f<o.length;){const c=o[f];u(c)}else throw new TypeError("Expected a list of plugins, not `"+o+"`")}function d(o,f){let c=-1,l;for(;++c<s.length;)if(s[c][0]===o){l=s[c];break}l?(E(l[1])&&E(f)&&(f=z(!0,l[1],f)),l[1]=f):s.push([...arguments])}}function O(e){n.freeze();const r=g(e),i=n.Parser;return m("parse",i),C(i,"parse")?new i(String(r),r).parse():i(String(r),r)}function V(e,r){n.freeze();const i=g(r),u=n.Compiler;return x("stringify",u),b(e),C(u,"compile")?new u(e,i).compile():u(e,i)}function F(e,r,i){if(b(e),n.freeze(),!i&&typeof r=="function"&&(i=r,r=void 0),!i)return new Promise(u);u(null,i);function u(p,y){t.run(e,g(r),d);function d(o,f,c){f=f||e,o?y(o):p?p(f):i(null,f,c)}}}function N(e,r){let i,u;return n.run(e,r,p),T("runSync","run",u),i;function p(y,d){S.bail(y),i=d,u=!0}}function L(e,r){if(n.freeze(),m("process",n.Parser),x("process",n.Compiler),!r)return new Promise(i);i(null,r);function i(u,p){const y=g(e);n.run(n.parse(y),y,(o,f,c)=>{if(o||!f||!c)d(o);else{const l=n.stringify(f,c);l==null||(H(l)?c.value=l:c.result=l),d(o,c)}});function d(o,f){o||!f?p(o):u?u(f):r(null,f)}}}function U(e){let r;n.freeze(),m("processSync",n.Parser),x("processSync",n.Compiler);const i=g(e);return n.process(i,u),T("processSync","process",r),i;function u(p){r=!0,S.bail(p)}}}function C(t,s){return typeof t=="function"&&t.prototype&&(_(t.prototype)||s in t.prototype)}function _(t){let s;for(s in t)if(A.call(t,s))return!0;return!1}function m(t,s){if(typeof s!="function")throw new TypeError("Cannot `"+t+"` without `Parser`")}function x(t,s){if(typeof s!="function")throw new TypeError("Cannot `"+t+"` without `Compiler`")}function P(t,s){if(s)throw new Error("Cannot call `"+t+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function b(t){if(!E(t)||typeof t.type!="string")throw new TypeError("Expected node, got `"+t+"`")}function T(t,s,a){if(!a)throw new Error("`"+t+"` finished async. Use `"+s+"` instead")}function g(t){return G(t)?t:new M.VFile(t)}function G(t){return!!(t&&typeof t=="object"&&"message"in t&&"messages"in t)}function H(t){return typeof t=="string"||B(t)}exports.unified=Y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("../../../../bail/index.cjs.js"),B=require("../../../../../_virtual/index.cjs10.js"),z=require("../../../../../_virtual/index.cjs11.js"),E=require("../../../../is-plain-obj/index.cjs.js"),D=require("../../../../trough/lib/index.cjs.js"),M=require("../../vfile/lib/index.cjs.js"),Y=$().freeze(),A={}.hasOwnProperty;function $(){const t=D.trough(),s=[];let a={},w,h=-1;return n.data=j,n.Parser=void 0,n.Compiler=void 0,n.freeze=q,n.attachers=s,n.use=I,n.parse=O,n.stringify=V,n.run=F,n.runSync=N,n.process=L,n.processSync=U,n;function n(){const e=$();let r=-1;for(;++r<s.length;)e.use(...s[r]);return e.data(z(!0,{},a)),e}function j(e,r){return typeof e=="string"?arguments.length===2?(P("data",w),a[e]=r,n):A.call(a,e)&&a[e]||null:e?(P("data",w),a=e,n):a}function q(){if(w)return n;for(;++h<s.length;){const[e,...r]=s[h];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);const i=e.call(n,...r);typeof i=="function"&&t.use(i)}return w=!0,h=Number.POSITIVE_INFINITY,n}function I(e,...r){let i;if(P("use",w),e!=null)if(typeof e=="function")d(e,...r);else if(typeof e=="object")Array.isArray(e)?y(e):p(e);else throw new TypeError("Expected usable value, not `"+e+"`");return i&&(a.settings=Object.assign(a.settings||{},i)),n;function u(o){if(typeof o=="function")d(o);else if(typeof o=="object")if(Array.isArray(o)){const[f,...c]=o;d(f,...c)}else p(o);else throw new TypeError("Expected usable value, not `"+o+"`")}function p(o){y(o.plugins),o.settings&&(i=Object.assign(i||{},o.settings))}function y(o){let f=-1;if(o!=null)if(Array.isArray(o))for(;++f<o.length;){const c=o[f];u(c)}else throw new TypeError("Expected a list of plugins, not `"+o+"`")}function d(o,f){let c=-1,l;for(;++c<s.length;)if(s[c][0]===o){l=s[c];break}l?(E(l[1])&&E(f)&&(f=z(!0,l[1],f)),l[1]=f):s.push([...arguments])}}function O(e){n.freeze();const r=g(e),i=n.Parser;return m("parse",i),C(i,"parse")?new i(String(r),r).parse():i(String(r),r)}function V(e,r){n.freeze();const i=g(r),u=n.Compiler;return x("stringify",u),b(e),C(u,"compile")?new u(e,i).compile():u(e,i)}function F(e,r,i){if(b(e),n.freeze(),!i&&typeof r=="function"&&(i=r,r=void 0),!i)return new Promise(u);u(null,i);function u(p,y){t.run(e,g(r),d);function d(o,f,c){f=f||e,o?y(o):p?p(f):i(null,f,c)}}}function N(e,r){let i,u;return n.run(e,r,p),T("runSync","run",u),i;function p(y,d){S.bail(y),i=d,u=!0}}function L(e,r){if(n.freeze(),m("process",n.Parser),x("process",n.Compiler),!r)return new Promise(i);i(null,r);function i(u,p){const y=g(e);n.run(n.parse(y),y,(o,f,c)=>{if(o||!f||!c)d(o);else{const l=n.stringify(f,c);l==null||(H(l)?c.value=l:c.result=l),d(o,c)}});function d(o,f){o||!f?p(o):u?u(f):r(null,f)}}}function U(e){let r;n.freeze(),m("processSync",n.Parser),x("processSync",n.Compiler);const i=g(e);return n.process(i,u),T("processSync","process",r),i;function u(p){r=!0,S.bail(p)}}}function C(t,s){return typeof t=="function"&&t.prototype&&(_(t.prototype)||s in t.prototype)}function _(t){let s;for(s in t)if(A.call(t,s))return!0;return!1}function m(t,s){if(typeof s!="function")throw new TypeError("Cannot `"+t+"` without `Parser`")}function x(t,s){if(typeof s!="function")throw new TypeError("Cannot `"+t+"` without `Compiler`")}function P(t,s){if(s)throw new Error("Cannot call `"+t+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function b(t){if(!E(t)||typeof t.type!="string")throw new TypeError("Expected node, got `"+t+"`")}function T(t,s,a){if(!a)throw new Error("`"+t+"` finished async. Use `"+s+"` instead")}function g(t){return G(t)?t:new M.VFile(t)}function G(t){return!!(t&&typeof t=="object"&&"message"in t&&"messages"in t)}function H(t){return typeof t=="string"||B(t)}exports.unified=Y;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  import { bail as z } from "../../../../bail/index.es.js";
2
- import Y from "../../../../../_virtual/index.es11.js";
3
- import C from "../../../../../_virtual/index.es12.js";
2
+ import Y from "../../../../../_virtual/index.es10.js";
3
+ import C from "../../../../../_virtual/index.es11.js";
4
4
  import x from "../../../../is-plain-obj/index.es.js";
5
5
  import { trough as _ } from "../../../../trough/lib/index.es.js";
6
6
  import { VFile as q } from "../../vfile/lib/index.es.js";
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../../../../_virtual/index.cjs11.js"),i=require("./minpath.browser.cjs.js"),d=require("./minproc.browser.cjs.js"),c=require("./minurl.browser.cjs.js"),m=require("./minurl.shared.cjs.js"),l=require("../../vfile-message/lib/index.cjs.js"),a=["history","path","basename","stem","extname","dirname"];class g{constructor(t){let e;t?typeof t=="string"||w(t)?e={value:t}:m.isUrl(t)?e={path:t}:e=t:e={},this.data={},this.messages=[],this.history=[],this.cwd=d.proc.cwd(),this.value,this.stored,this.result,this.map;let r=-1;for(;++r<a.length;){const h=a[r];h in e&&e[h]!==void 0&&e[h]!==null&&(this[h]=h==="history"?[...e[h]]:e[h])}let s;for(s in e)a.includes(s)||(this[s]=e[s])}get path(){return this.history[this.history.length-1]}set path(t){m.isUrl(t)&&(t=c.urlToPath(t)),p(t,"path"),this.path!==t&&this.history.push(t)}get dirname(){return typeof this.path=="string"?i.path.dirname(this.path):void 0}set dirname(t){u(this.basename,"dirname"),this.path=i.path.join(t||"",this.basename)}get basename(){return typeof this.path=="string"?i.path.basename(this.path):void 0}set basename(t){p(t,"basename"),o(t,"basename"),this.path=i.path.join(this.dirname||"",t)}get extname(){return typeof this.path=="string"?i.path.extname(this.path):void 0}set extname(t){if(o(t,"extname"),u(this.dirname,"extname"),t){if(t.charCodeAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=i.path.join(this.dirname,this.stem+(t||""))}get stem(){return typeof this.path=="string"?i.path.basename(this.path,this.extname):void 0}set stem(t){p(t,"stem"),o(t,"stem"),this.path=i.path.join(this.dirname||"",t+(this.extname||""))}toString(t){return(this.value||"").toString(t||void 0)}message(t,e,r){const s=new l.VFileMessage(t,e,r);return this.path&&(s.name=this.path+":"+s.name,s.file=this.path),s.fatal=!1,this.messages.push(s),s}info(t,e,r){const s=this.message(t,e,r);return s.fatal=null,s}fail(t,e,r){const s=this.message(t,e,r);throw s.fatal=!0,s}}function o(n,t){if(n&&n.includes(i.path.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+i.path.sep+"`")}function p(n,t){if(!n)throw new Error("`"+t+"` cannot be empty")}function u(n,t){if(!n)throw new Error("Setting `"+t+"` requires `path` to be set too")}function w(n){return f(n)}exports.VFile=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../../../../_virtual/index.cjs10.js"),i=require("./minpath.browser.cjs.js"),d=require("./minproc.browser.cjs.js"),c=require("./minurl.browser.cjs.js"),m=require("./minurl.shared.cjs.js"),l=require("../../vfile-message/lib/index.cjs.js"),a=["history","path","basename","stem","extname","dirname"];class g{constructor(t){let e;t?typeof t=="string"||w(t)?e={value:t}:m.isUrl(t)?e={path:t}:e=t:e={},this.data={},this.messages=[],this.history=[],this.cwd=d.proc.cwd(),this.value,this.stored,this.result,this.map;let r=-1;for(;++r<a.length;){const h=a[r];h in e&&e[h]!==void 0&&e[h]!==null&&(this[h]=h==="history"?[...e[h]]:e[h])}let s;for(s in e)a.includes(s)||(this[s]=e[s])}get path(){return this.history[this.history.length-1]}set path(t){m.isUrl(t)&&(t=c.urlToPath(t)),p(t,"path"),this.path!==t&&this.history.push(t)}get dirname(){return typeof this.path=="string"?i.path.dirname(this.path):void 0}set dirname(t){u(this.basename,"dirname"),this.path=i.path.join(t||"",this.basename)}get basename(){return typeof this.path=="string"?i.path.basename(this.path):void 0}set basename(t){p(t,"basename"),o(t,"basename"),this.path=i.path.join(this.dirname||"",t)}get extname(){return typeof this.path=="string"?i.path.extname(this.path):void 0}set extname(t){if(o(t,"extname"),u(this.dirname,"extname"),t){if(t.charCodeAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=i.path.join(this.dirname,this.stem+(t||""))}get stem(){return typeof this.path=="string"?i.path.basename(this.path,this.extname):void 0}set stem(t){p(t,"stem"),o(t,"stem"),this.path=i.path.join(this.dirname||"",t+(this.extname||""))}toString(t){return(this.value||"").toString(t||void 0)}message(t,e,r){const s=new l.VFileMessage(t,e,r);return this.path&&(s.name=this.path+":"+s.name,s.file=this.path),s.fatal=!1,this.messages.push(s),s}info(t,e,r){const s=this.message(t,e,r);return s.fatal=null,s}fail(t,e,r){const s=this.message(t,e,r);throw s.fatal=!0,s}}function o(n,t){if(n&&n.includes(i.path.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+i.path.sep+"`")}function p(n,t){if(!n)throw new Error("`"+t+"` cannot be empty")}function u(n,t){if(!n)throw new Error("Setting `"+t+"` requires `path` to be set too")}function w(n){return f(n)}exports.VFile=g;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import d from "../../../../../_virtual/index.es11.js";
1
+ import d from "../../../../../_virtual/index.es10.js";
2
2
  import { path as i } from "./minpath.browser.es.js";
3
3
  import { proc as u } from "./minproc.browser.es.js";
4
4
  import { urlToPath as l } from "./minurl.browser.es.js";
@@ -1,2 +1,2 @@
1
- "use strict";const w=require("../../../_virtual/index.cjs10.js"),A=require("./errors.cjs.js"),E=require("../../hast-util-from-parse5/lib/index.cjs.js"),I="https://html.spec.whatwg.org/multipage/parsing.html#parse-error-",L={2:!0,1:!1,0:null};function j(r){const o=this.data("settings"),n=Object.assign({},o,r);Object.assign(this,{Parser:h});function h(a,l){const b=n.fragment?"parseFragment":"parse",C=n.emitParseErrors?x:null,O=new w({sourceCodeLocationInfo:!0,onParseError:C,scriptingEnabled:!1});return E.fromParse5(O[b](a),{space:n.space,file:l,verbose:n.verbose});function x(e){const c=e.code,u=y(c),i=n[u],f=i??!0,p=typeof f=="number"?f:f?1:0,P={line:e.startLine,column:e.startCol,offset:e.startOffset},q={line:e.endLine,column:e.endCol,offset:e.endOffset};if(p){const t=A.errors[u]||{reason:"",description:"",url:""},s=l.message(g(t.reason),{start:P,end:q});s.source="parse-error",s.ruleId=c,s.fatal=L[p],s.note=g(t.description),s.url="url"in t&&t.url===!1?null:I+c}function g(t){return t.replace(/%c(?:-(\d+))?/g,(s,d)=>{const v=d?-Number.parseInt(d,10):0,m=a.charAt(e.startOffset+v);return m==="`"?"` ` `":m}).replace(/%x/g,()=>"0x"+a.charCodeAt(e.startOffset).toString(16).toUpperCase())}}}}function y(r){return r.replace(/-[a-z]/g,o=>o.charAt(1).toUpperCase())}module.exports=j;
1
+ "use strict";const w=require("../../../_virtual/index.cjs12.js"),A=require("./errors.cjs.js"),E=require("../../hast-util-from-parse5/lib/index.cjs.js"),I="https://html.spec.whatwg.org/multipage/parsing.html#parse-error-",L={2:!0,1:!1,0:null};function j(r){const o=this.data("settings"),n=Object.assign({},o,r);Object.assign(this,{Parser:h});function h(a,l){const b=n.fragment?"parseFragment":"parse",C=n.emitParseErrors?x:null,O=new w({sourceCodeLocationInfo:!0,onParseError:C,scriptingEnabled:!1});return E.fromParse5(O[b](a),{space:n.space,file:l,verbose:n.verbose});function x(e){const c=e.code,u=y(c),i=n[u],f=i??!0,p=typeof f=="number"?f:f?1:0,P={line:e.startLine,column:e.startCol,offset:e.startOffset},q={line:e.endLine,column:e.endCol,offset:e.endOffset};if(p){const t=A.errors[u]||{reason:"",description:"",url:""},s=l.message(g(t.reason),{start:P,end:q});s.source="parse-error",s.ruleId=c,s.fatal=L[p],s.note=g(t.description),s.url="url"in t&&t.url===!1?null:I+c}function g(t){return t.replace(/%c(?:-(\d+))?/g,(s,d)=>{const v=d?-Number.parseInt(d,10):0,m=a.charAt(e.startOffset+v);return m==="`"?"` ` `":m}).replace(/%x/g,()=>"0x"+a.charCodeAt(e.startOffset).toString(16).toUpperCase())}}}}function y(r){return r.replace(/-[a-z]/g,o=>o.charAt(1).toUpperCase())}module.exports=j;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import A from "../../../_virtual/index.es10.js";
1
+ import A from "../../../_virtual/index.es12.js";
2
2
  import { errors as E } from "./errors.es.js";
3
3
  import { fromParse5 as I } from "../../hast-util-from-parse5/lib/index.es.js";
4
4
  const L = "https://html.spec.whatwg.org/multipage/parsing.html#parse-error-", j = { 2: !0, 1: !1, 0: null };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./getViews.cjs.js"),g=a.getViewsApi.enhanceEndpoints({endpoints:{createView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{payload:i}=e,l=r(),u=l.user.name,V=p(a.getViewsApi.util.updateQueryData("listViews",{viewType:e.viewType,projectName:e.projectName},o=>{const t={...i,working:i.working||!1,scope:e.projectName?"project":"studio",visibility:"private",position:o.length+1,owner:u,accessLevel:30};if(i.working){const s=o.findIndex(c=>c.working===!0);if(s!==-1){const c=o[s].id;o[s]={...t,id:c}}else o.push(t)}else o.push(t);o.sort((s,c)=>s.position!==c.position?s.position-c.position:s.label.localeCompare(c.label))}));let w;i.working&&(w=p(a.getViewsApi.util.updateQueryData("getWorkingView",{viewType:e.viewType,projectName:e.projectName},o=>{const t=o?.id,s={...i,working:!0,scope:e.projectName?"project":"studio",visibility:"private",owner:u,...t&&{id:t}};Object.assign(o,s)})));let d;if(i.label==="__base__")if(a.getViewsApi.endpoints.getBaseView.select({viewType:e.viewType,projectName:e.projectName})(l)!==void 0){const t={...i,working:!1,scope:e.projectName?"project":"studio",visibility:"private",owner:u,accessLevel:30,position:0};d=p(a.getViewsApi.util.updateQueryData("getBaseView",{viewType:e.viewType,projectName:e.projectName},()=>t))}else console.log("Skipping optimistic update for getBaseView - cache does not exist yet");try{await n}catch(o){V.undo(),w&&w.undo(),d&&d.undo(),console.error("Failed to create view:",o)}},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,payload:i})=>[{type:"view",id:i.id},a.getScopeTag(n,r)]},updateView:{transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,viewId:i})=>[{type:"view",id:i},a.getScopeTag(n,r)]},deleteView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{viewId:i,projectName:l,viewType:u}=e,V=r(),w=[];w.push(p(a.getViewsApi.util.updateQueryData("listViews",{viewType:u,projectName:l},t=>t.filter(s=>s.id!==i))));const d=[{projectName:l},{projectName:void 0}],o=["getBaseView","getDefaultView"];for(const t of d)for(const s of o){const c=a.getViewsApi.endpoints[s].select({viewType:u,projectName:t.projectName})(V);c?.isSuccess&&c.data?.id===i&&w.push(p(a.getViewsApi.util.updateQueryData(s,{viewType:u,projectName:t.projectName},()=>null)))}try{await n}catch(t){w.forEach(s=>s.undo()),console.error("Failed to delete view:",t)}},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,viewId:i})=>[{type:"view",id:i},a.getScopeTag(n,r),a.getScopeTag(n,void 0)]},setDefaultView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{setDefaultViewRequestModel:i,projectName:l,viewType:u}=e,{viewId:V}=i,w=r(),d=a.getViewsApi.endpoints.getDefaultView.select({viewType:u,projectName:l})(w);if(d?.isSuccess&&d.data?.id){const o=p(a.getViewsApi.util.updateQueryData("getDefaultView",{viewType:u,projectName:l},t=>{if(t){const c=a.getViewsApi.endpoints.listViews.select({viewType:u,projectName:l})(w)?.data?.find(v=>v.id===V);c?Object.assign(t,c):t.id=V}}));try{await n}catch(t){o.undo(),console.error("Failed to set default view:",t)}}else console.warn("No current default view found, skipping optimistic update and invalidating default view cache")},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,setDefaultViewRequestModel:i})=>[{type:"view",id:i.viewId},a.getScopeTag(n,r)]}}}),{useCreateViewMutation:y,useUpdateViewMutation:f,useDeleteViewMutation:m,useSetDefaultViewMutation:j}=g;exports.useCreateViewMutation=y;exports.useDeleteViewMutation=m;exports.useSetDefaultViewMutation=j;exports.useUpdateViewMutation=f;exports.viewsQueries=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./getViews.cjs.js"),g=a.getViewsApi.enhanceEndpoints({endpoints:{createView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{payload:i}=e,l=r(),u=l.user?.name,V=p(a.getViewsApi.util.updateQueryData("listViews",{viewType:e.viewType,projectName:e.projectName},o=>{const t={...i,working:i.working||!1,scope:e.projectName?"project":"studio",visibility:"private",position:o.length+1,owner:u,accessLevel:30};if(i.working){const s=o.findIndex(c=>c.working===!0);if(s!==-1){const c=o[s].id;o[s]={...t,id:c}}else o.push(t)}else o.push(t);o.sort((s,c)=>s.position!==c.position?s.position-c.position:s.label.localeCompare(c.label))}));let w;i.working&&(w=p(a.getViewsApi.util.updateQueryData("getWorkingView",{viewType:e.viewType,projectName:e.projectName},o=>{const t=o?.id,s={...i,working:!0,scope:e.projectName?"project":"studio",visibility:"private",owner:u,...t&&{id:t}};Object.assign(o,s)})));let d;if(i.label==="__base__")if(a.getViewsApi.endpoints.getBaseView.select({viewType:e.viewType,projectName:e.projectName})(l)!==void 0){const t={...i,working:!1,scope:e.projectName?"project":"studio",visibility:"private",owner:u,accessLevel:30,position:0};d=p(a.getViewsApi.util.updateQueryData("getBaseView",{viewType:e.viewType,projectName:e.projectName},()=>t))}else console.log("Skipping optimistic update for getBaseView - cache does not exist yet");try{await n}catch(o){V.undo(),w&&w.undo(),d&&d.undo(),console.error("Failed to create view:",o)}},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,payload:i})=>[{type:"view",id:i.id},a.getScopeTag(n,r)]},updateView:{transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,viewId:i})=>[{type:"view",id:i},a.getScopeTag(n,r)]},deleteView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{viewId:i,projectName:l,viewType:u}=e,V=r(),w=[];w.push(p(a.getViewsApi.util.updateQueryData("listViews",{viewType:u,projectName:l},t=>t.filter(s=>s.id!==i))));const d=[{projectName:l},{projectName:void 0}],o=["getBaseView","getDefaultView"];for(const t of d)for(const s of o){const c=a.getViewsApi.endpoints[s].select({viewType:u,projectName:t.projectName})(V);c?.isSuccess&&c.data?.id===i&&w.push(p(a.getViewsApi.util.updateQueryData(s,{viewType:u,projectName:t.projectName},()=>null)))}try{await n}catch(t){w.forEach(s=>s.undo()),console.error("Failed to delete view:",t)}},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,viewId:i})=>[{type:"view",id:i},a.getScopeTag(n,r),a.getScopeTag(n,void 0)]},setDefaultView:{onQueryStarted:async(e,{dispatch:p,queryFulfilled:n,getState:r})=>{const{setDefaultViewRequestModel:i,projectName:l,viewType:u}=e,{viewId:V}=i,w=r(),d=a.getViewsApi.endpoints.getDefaultView.select({viewType:u,projectName:l})(w);if(d?.isSuccess&&d.data?.id){const o=p(a.getViewsApi.util.updateQueryData("getDefaultView",{viewType:u,projectName:l},t=>{if(t){const c=a.getViewsApi.endpoints.listViews.select({viewType:u,projectName:l})(w)?.data?.find(v=>v.id===V);c?Object.assign(t,c):t.id=V}}));try{await n}catch(t){o.undo(),console.error("Failed to set default view:",t)}}else console.warn("No current default view found, skipping optimistic update and invalidating default view cache")},transformErrorResponse:e=>e.data?.detail,invalidatesTags:(e,p,{viewType:n,projectName:r,setDefaultViewRequestModel:i})=>[{type:"view",id:i.viewId},a.getScopeTag(n,r)]}}}),{useCreateViewMutation:y,useUpdateViewMutation:f,useDeleteViewMutation:m,useSetDefaultViewMutation:j}=g;exports.useCreateViewMutation=y;exports.useDeleteViewMutation=m;exports.useSetDefaultViewMutation=j;exports.useUpdateViewMutation=f;exports.viewsQueries=g;
2
2
  //# sourceMappingURL=updateViews.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateViews.cjs.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n // Also update the getBaseView cache if this is a base view\n let baseViewPatch\n if (payload.label === '__base__') {\n // Check if the getBaseView cache exists before updating\n const currentBaseView = getViewsApi.endpoints.getBaseView.select({\n viewType: arg.viewType,\n projectName: arg.projectName,\n })(state)\n\n // Only perform optimistic update if cache is initialized (even if data is null)\n if (currentBaseView !== undefined) {\n const newBaseView = {\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n () => newBaseView as any,\n ),\n )\n } else {\n // No cache exists yet, optimistic update will be skipped\n // The invalidation tags will handle the refetch\n console.log('Skipping optimistic update for getBaseView - cache does not exist yet')\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic updates\n patch.undo()\n if (workingViewPatch) {\n workingViewPatch.undo()\n }\n if (baseViewPatch) {\n baseViewPatch.undo()\n }\n console.error('Failed to create view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","state","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
1
+ {"version":3,"file":"updateViews.cjs.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n // Also update the getBaseView cache if this is a base view\n let baseViewPatch\n if (payload.label === '__base__') {\n // Check if the getBaseView cache exists before updating\n const currentBaseView = getViewsApi.endpoints.getBaseView.select({\n viewType: arg.viewType,\n projectName: arg.projectName,\n })(state)\n\n // Only perform optimistic update if cache is initialized (even if data is null)\n if (currentBaseView !== undefined) {\n const newBaseView = {\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n () => newBaseView as any,\n ),\n )\n } else {\n // No cache exists yet, optimistic update will be skipped\n // The invalidation tags will handle the refetch\n console.log('Skipping optimistic update for getBaseView - cache does not exist yet')\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic updates\n patch.undo()\n if (workingViewPatch) {\n workingViewPatch.undo()\n }\n if (baseViewPatch) {\n baseViewPatch.undo()\n }\n console.error('Failed to create view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","state","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
@@ -3,7 +3,7 @@ const f = u.enhanceEndpoints({
3
3
  endpoints: {
4
4
  createView: {
5
5
  onQueryStarted: async (e, { dispatch: c, queryFulfilled: a, getState: n }) => {
6
- const { payload: i } = e, d = n(), p = d.user.name, v = c(
6
+ const { payload: i } = e, d = n(), p = d.user?.name, v = c(
7
7
  u.util.updateQueryData(
8
8
  "listViews",
9
9
  { viewType: e.viewType, projectName: e.projectName },
@@ -1 +1 @@
1
- {"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n // Also update the getBaseView cache if this is a base view\n let baseViewPatch\n if (payload.label === '__base__') {\n // Check if the getBaseView cache exists before updating\n const currentBaseView = getViewsApi.endpoints.getBaseView.select({\n viewType: arg.viewType,\n projectName: arg.projectName,\n })(state)\n\n // Only perform optimistic update if cache is initialized (even if data is null)\n if (currentBaseView !== undefined) {\n const newBaseView = {\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n () => newBaseView as any,\n ),\n )\n } else {\n // No cache exists yet, optimistic update will be skipped\n // The invalidation tags will handle the refetch\n console.log('Skipping optimistic update for getBaseView - cache does not exist yet')\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic updates\n patch.undo()\n if (workingViewPatch) {\n workingViewPatch.undo()\n }\n if (baseViewPatch) {\n baseViewPatch.undo()\n }\n console.error('Failed to create view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","state","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","v","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":"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"}
1
+ {"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { ViewListItemModel } from '@shared/api/generated'\nimport { getScopeTag, getViewsApi } from './getViews'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { payload } = arg\n const state = getState()\n // @ts-expect-error - user is not typed in the state\n const user = state.user?.name\n\n // Optimistically update the view list\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'listViews',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n const newView: ViewListItemModel = {\n ...payload,\n working: payload.working || false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n position: draft.length + 1, // Add to the end of the list\n owner: user,\n accessLevel: 30,\n }\n if (payload.working) {\n // For working views, find and replace the existing working view\n const existingWorkingIndex = draft.findIndex((view) => view.working === true)\n if (existingWorkingIndex !== -1) {\n // Keep the existing ID but update all other properties\n const existingId = draft[existingWorkingIndex].id\n draft[existingWorkingIndex] = { ...newView, id: existingId }\n } else {\n // No existing working view, add the new one\n draft.push(newView)\n }\n } else {\n // For non-working views, add to the list as usual\n draft.push(newView)\n }\n\n // finally sort the view by position and then by label\n draft.sort((a, b) => {\n if (a.position !== b.position) {\n return a.position - b.position\n }\n return a.label.localeCompare(b.label)\n })\n },\n ),\n )\n\n // Also update the getWorkingView cache if this is a working view\n let workingViewPatch\n if (payload.working) {\n workingViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getWorkingView',\n { viewType: arg.viewType, projectName: arg.projectName },\n (draft) => {\n // Preserve the existing ID if there's already a working view\n const existingId = draft?.id\n const updatedWorkingView = {\n ...payload,\n working: true,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n ...(existingId && { id: existingId }), // Keep existing ID if it exists\n }\n // Update the working view cache with the new view data\n Object.assign(draft, updatedWorkingView)\n },\n ),\n )\n }\n\n // Also update the getBaseView cache if this is a base view\n let baseViewPatch\n if (payload.label === '__base__') {\n // Check if the getBaseView cache exists before updating\n const currentBaseView = getViewsApi.endpoints.getBaseView.select({\n viewType: arg.viewType,\n projectName: arg.projectName,\n })(state)\n\n // Only perform optimistic update if cache is initialized (even if data is null)\n if (currentBaseView !== undefined) {\n const newBaseView = {\n ...payload,\n working: false,\n scope: arg.projectName ? 'project' : 'studio',\n visibility: 'private',\n owner: user,\n accessLevel: 30,\n position: 0,\n }\n\n baseViewPatch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getBaseView',\n { viewType: arg.viewType, projectName: arg.projectName },\n () => newBaseView as any,\n ),\n )\n } else {\n // No cache exists yet, optimistic update will be skipped\n // The invalidation tags will handle the refetch\n console.log('Skipping optimistic update for getBaseView - cache does not exist yet')\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic updates\n patch.undo()\n if (workingViewPatch) {\n workingViewPatch.undo()\n }\n if (baseViewPatch) {\n baseViewPatch.undo()\n }\n console.error('Failed to create view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, payload }) => [\n { type: 'view', id: payload.id },\n getScopeTag(viewType, projectName),\n ],\n },\n updateView: {\n transformErrorResponse: (error: any) => error.data?.detail,\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n deleteView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { viewId, projectName, viewType } = arg\n const state = getState()\n\n // Optimistically remove the view from the list\n const patches: any[] = []\n\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData('listViews', { viewType, projectName }, (draft) => {\n return draft.filter((view) => view.id !== viewId)\n }),\n ),\n )\n\n // Check both project and studio level for base and default views\n const scopesToCheck = [\n { projectName },\n { projectName: undefined }, // studio level\n ]\n const queriesToCheck = ['getBaseView', 'getDefaultView'] as const\n\n for (const scope of scopesToCheck) {\n for (const queryName of queriesToCheck) {\n const currentView = getViewsApi.endpoints[queryName].select({\n viewType,\n projectName: scope.projectName,\n })(state)\n\n if (currentView?.isSuccess && currentView.data?.id === viewId) {\n patches.push(\n dispatch(\n getViewsApi.util.updateQueryData(\n queryName,\n { viewType, projectName: scope.projectName },\n () => null as any,\n ),\n ),\n )\n }\n }\n }\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, roll back all optimistic updates\n patches.forEach((patch) => patch.undo())\n console.error('Failed to delete view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the view list cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, viewId }) => [\n { type: 'view', id: viewId },\n getScopeTag(viewType, projectName),\n getScopeTag(viewType, undefined),\n ],\n },\n setDefaultView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled, getState }) => {\n const { setDefaultViewRequestModel, projectName, viewType } = arg\n const { viewId } = setDefaultViewRequestModel\n const state = getState()\n // get current state of default view\n const currentDefaultView = getViewsApi.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n\n // check if there is even a cache for the default view\n if (currentDefaultView?.isSuccess && currentDefaultView.data?.id) {\n // Optimistically update the default view\n const patch = dispatch(\n getViewsApi.util.updateQueryData(\n 'getDefaultView',\n { viewType, projectName },\n (draft) => {\n if (draft) {\n // Try to find the view in the listViews cache\n const listViewData = getViewsApi.endpoints.listViews.select({\n viewType,\n projectName,\n })(state)\n const view = listViewData?.data?.find((v) => v.id === viewId)\n\n if (view) {\n // If the view is found in the listViews cache, update the getDefaultView cache with the full view data\n Object.assign(draft, view)\n } else {\n // If the view is not found, only update the ID\n draft.id = viewId\n }\n }\n },\n ),\n )\n\n try {\n await queryFulfilled\n } catch (error) {\n // If the query failed, we need to roll back the optimistic update\n patch.undo()\n console.error('Failed to set default view:', error)\n }\n } else {\n console.warn(\n 'No current default view found, skipping optimistic update and invalidating default view cache',\n )\n // If there is no current default view, we skip the optimistic update\n // it will be handled by the invalidation below\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n // updates the default view cache for a specific view type and project\n invalidatesTags: (_r, _e, { viewType, projectName, setDefaultViewRequestModel }) => [\n { type: 'view', id: setDefaultViewRequestModel.viewId },\n getScopeTag(viewType, projectName),\n ],\n },\n },\n})\n\nexport const {\n useCreateViewMutation,\n useUpdateViewMutation,\n useDeleteViewMutation,\n useSetDefaultViewMutation,\n} = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":["updateViewsApi","getViewsApi","arg","dispatch","queryFulfilled","getState","payload","state","user","patch","draft","newView","existingWorkingIndex","view","existingId","a","b","workingViewPatch","updatedWorkingView","baseViewPatch","newBaseView","error","_r","_e","viewType","projectName","getScopeTag","viewId","patches","scopesToCheck","queriesToCheck","scope","queryName","currentView","setDefaultViewRequestModel","currentDefaultView","v","useCreateViewMutation","useUpdateViewMutation","useDeleteViewMutation","useSetDefaultViewMutation"],"mappings":";AAGA,MAAMA,IAAiBC,EAAY,iBAAiB;AAAA,EAClD,WAAW;AAAA,IACT,YAAY;AAAA,MACV,gBAAgB,OAAOC,GAAK,EAAE,UAAAC,GAAU,gBAAAC,GAAgB,UAAAC,QAAe;AACrE,cAAM,EAAE,SAAAC,MAAYJ,GACdK,IAAQF,EAAA,GAERG,IAAOD,EAAM,MAAM,MAGnBE,IAAQN;AAAA,UACZF,EAAY,KAAK;AAAA,YACf;AAAA,YACA,EAAE,UAAUC,EAAI,UAAU,aAAaA,EAAI,YAAA;AAAA,YAC3C,CAACQ,MAAU;AACT,oBAAMC,IAA6B;AAAA,gBACjC,GAAGL;AAAA,gBACH,SAASA,EAAQ,WAAW;AAAA,gBAC5B,OAAOJ,EAAI,cAAc,YAAY;AAAA,gBACrC,YAAY;AAAA,gBACZ,UAAUQ,EAAM,SAAS;AAAA;AAAA,gBACzB,OAAOF;AAAA,gBACP,aAAa;AAAA,cAAA;AAEf,kBAAIF,EAAQ,SAAS;AAEnB,sBAAMM,IAAuBF,EAAM,UAAU,CAACG,MAASA,EAAK,YAAY,EAAI;AAC5E,oBAAID,MAAyB,IAAI;AAE/B,wBAAME,IAAaJ,EAAME,CAAoB,EAAE;AAC/C,kBAAAF,EAAME,CAAoB,IAAI,EAAE,GAAGD,GAAS,IAAIG,EAAA;AAAA,gBAClD;AAEE,kBAAAJ,EAAM,KAAKC,CAAO;AAAA,cAEtB;AAEE,gBAAAD,EAAM,KAAKC,CAAO;AAIpB,cAAAD,EAAM,KAAK,CAACK,GAAGC,MACTD,EAAE,aAAaC,EAAE,WACZD,EAAE,WAAWC,EAAE,WAEjBD,EAAE,MAAM,cAAcC,EAAE,KAAK,CACrC;AAAA,YACH;AAAA,UAAA;AAAA,QACF;AAIF,YAAIC;AACJ,QAAIX,EAAQ,YACVW,IAAmBd;AAAA,UACjBF,EAAY,KAAK;AAAA,YACf;AAAA,YACA,EAAE,UAAUC,EAAI,UAAU,aAAaA,EAAI,YAAA;AAAA,YAC3C,CAACQ,MAAU;AAET,oBAAMI,IAAaJ,GAAO,IACpBQ,IAAqB;AAAA,gBACzB,GAAGZ;AAAA,gBACH,SAAS;AAAA,gBACT,OAAOJ,EAAI,cAAc,YAAY;AAAA,gBACrC,YAAY;AAAA,gBACZ,OAAOM;AAAA,gBACP,GAAIM,KAAc,EAAE,IAAIA,EAAA;AAAA;AAAA,cAAW;AAGrC,qBAAO,OAAOJ,GAAOQ,CAAkB;AAAA,YACzC;AAAA,UAAA;AAAA,QACF;AAKJ,YAAIC;AACJ,YAAIb,EAAQ,UAAU;AAQpB,cANwBL,EAAY,UAAU,YAAY,OAAO;AAAA,YAC/D,UAAUC,EAAI;AAAA,YACd,aAAaA,EAAI;AAAA,UAAA,CAClB,EAAEK,CAAK,MAGgB,QAAW;AACjC,kBAAMa,IAAc;AAAA,cAClB,GAAGd;AAAA,cACH,SAAS;AAAA,cACT,OAAOJ,EAAI,cAAc,YAAY;AAAA,cACrC,YAAY;AAAA,cACZ,OAAOM;AAAA,cACP,aAAa;AAAA,cACb,UAAU;AAAA,YAAA;AAGZ,YAAAW,IAAgBhB;AAAA,cACdF,EAAY,KAAK;AAAA,gBACf;AAAA,gBACA,EAAE,UAAUC,EAAI,UAAU,aAAaA,EAAI,YAAA;AAAA,gBAC3C,MAAMkB;AAAA,cAAA;AAAA,YACR;AAAA,UAEJ;AAGE,oBAAQ,IAAI,uEAAuE;AAIvF,YAAI;AACF,gBAAMhB;AAAA,QACR,SAASiB,GAAO;AAEd,UAAAZ,EAAM,KAAA,GACFQ,KACFA,EAAiB,KAAA,GAEfE,KACFA,EAAc,KAAA,GAEhB,QAAQ,MAAM,0BAA0BE,CAAK;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,wBAAwB,CAACA,MAAeA,EAAM,MAAM;AAAA;AAAA,MAEpD,iBAAiB,CAACC,GAAIC,GAAI,EAAE,UAAAC,GAAU,aAAAC,GAAa,SAAAnB,QAAc;AAAA,QAC/D,EAAE,MAAM,QAAQ,IAAIA,EAAQ,GAAA;AAAA,QAC5BoB,EAAYF,GAAUC,CAAW;AAAA,MAAA;AAAA,IACnC;AAAA,IAEF,YAAY;AAAA,MACV,wBAAwB,CAACJ,MAAeA,EAAM,MAAM;AAAA,MACpD,iBAAiB,CAACC,GAAIC,GAAI,EAAE,UAAAC,GAAU,aAAAC,GAAa,QAAAE,QAAa;AAAA,QAC9D,EAAE,MAAM,QAAQ,IAAIA,EAAA;AAAA,QACpBD,EAAYF,GAAUC,CAAW;AAAA,MAAA;AAAA,IACnC;AAAA,IAEF,YAAY;AAAA,MACV,gBAAgB,OAAOvB,GAAK,EAAE,UAAAC,GAAU,gBAAAC,GAAgB,UAAAC,QAAe;AACrE,cAAM,EAAE,QAAAsB,GAAQ,aAAAF,GAAa,UAAAD,EAAA,IAAatB,GACpCK,IAAQF,EAAA,GAGRuB,IAAiB,CAAA;AAEvB,QAAAA,EAAQ;AAAA,UACNzB;AAAA,YACEF,EAAY,KAAK,gBAAgB,aAAa,EAAE,UAAAuB,GAAU,aAAAC,EAAA,GAAe,CAACf,MACjEA,EAAM,OAAO,CAACG,MAASA,EAAK,OAAOc,CAAM,CACjD;AAAA,UAAA;AAAA,QACH;AAIF,cAAME,IAAgB;AAAA,UACpB,EAAE,aAAAJ,EAAA;AAAA,UACF,EAAE,aAAa,OAAA;AAAA;AAAA,QAAU,GAErBK,IAAiB,CAAC,eAAe,gBAAgB;AAEvD,mBAAWC,KAASF;AAClB,qBAAWG,KAAaF,GAAgB;AACtC,kBAAMG,IAAchC,EAAY,UAAU+B,CAAS,EAAE,OAAO;AAAA,cAC1D,UAAAR;AAAA,cACA,aAAaO,EAAM;AAAA,YAAA,CACpB,EAAExB,CAAK;AAER,YAAI0B,GAAa,aAAaA,EAAY,MAAM,OAAON,KACrDC,EAAQ;AAAA,cACNzB;AAAA,gBACEF,EAAY,KAAK;AAAA,kBACf+B;AAAA,kBACA,EAAE,UAAAR,GAAU,aAAaO,EAAM,YAAA;AAAA,kBAC/B,MAAM;AAAA,gBAAA;AAAA,cACR;AAAA,YACF;AAAA,UAGN;AAGF,YAAI;AACF,gBAAM3B;AAAA,QACR,SAASiB,GAAO;AAEd,UAAAO,EAAQ,QAAQ,CAACnB,MAAUA,EAAM,MAAM,GACvC,QAAQ,MAAM,0BAA0BY,CAAK;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,wBAAwB,CAACA,MAAeA,EAAM,MAAM;AAAA;AAAA,MAEpD,iBAAiB,CAACC,GAAIC,GAAI,EAAE,UAAAC,GAAU,aAAAC,GAAa,QAAAE,QAAa;AAAA,QAC9D,EAAE,MAAM,QAAQ,IAAIA,EAAA;AAAA,QACpBD,EAAYF,GAAUC,CAAW;AAAA,QACjCC,EAAYF,GAAU,MAAS;AAAA,MAAA;AAAA,IACjC;AAAA,IAEF,gBAAgB;AAAA,MACd,gBAAgB,OAAOtB,GAAK,EAAE,UAAAC,GAAU,gBAAAC,GAAgB,UAAAC,QAAe;AACrE,cAAM,EAAE,4BAAA6B,GAA4B,aAAAT,GAAa,UAAAD,EAAA,IAAatB,GACxD,EAAE,QAAAyB,MAAWO,GACb3B,IAAQF,EAAA,GAER8B,IAAqBlC,EAAY,UAAU,eAAe,OAAO;AAAA,UACrE,UAAAuB;AAAA,UACA,aAAAC;AAAA,QAAA,CACD,EAAElB,CAAK;AAGR,YAAI4B,GAAoB,aAAaA,EAAmB,MAAM,IAAI;AAEhE,gBAAM1B,IAAQN;AAAA,YACZF,EAAY,KAAK;AAAA,cACf;AAAA,cACA,EAAE,UAAAuB,GAAU,aAAAC,EAAA;AAAA,cACZ,CAACf,MAAU;AACT,oBAAIA,GAAO;AAMT,wBAAMG,IAJeZ,EAAY,UAAU,UAAU,OAAO;AAAA,oBAC1D,UAAAuB;AAAA,oBACA,aAAAC;AAAA,kBAAA,CACD,EAAElB,CAAK,GACmB,MAAM,KAAK,CAAC6B,MAAMA,EAAE,OAAOT,CAAM;AAE5D,kBAAId,IAEF,OAAO,OAAOH,GAAOG,CAAI,IAGzBH,EAAM,KAAKiB;AAAA,gBAEf;AAAA,cACF;AAAA,YAAA;AAAA,UACF;AAGF,cAAI;AACF,kBAAMvB;AAAA,UACR,SAASiB,GAAO;AAEd,YAAAZ,EAAM,KAAA,GACN,QAAQ,MAAM,+BAA+BY,CAAK;AAAA,UACpD;AAAA,QACF;AACE,kBAAQ;AAAA,YACN;AAAA,UAAA;AAAA,MAKN;AAAA,MACA,wBAAwB,CAACA,MAAeA,EAAM,MAAM;AAAA;AAAA,MAEpD,iBAAiB,CAACC,GAAIC,GAAI,EAAE,UAAAC,GAAU,aAAAC,GAAa,4BAAAS,QAAiC;AAAA,QAClF,EAAE,MAAM,QAAQ,IAAIA,EAA2B,OAAA;AAAA,QAC/CR,EAAYF,GAAUC,CAAW;AAAA,MAAA;AAAA,IACnC;AAAA,EACF;AAEJ,CAAC,GAEY;AAAA,EACX,uBAAAY;AAAA,EACA,uBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,2BAAAC;AACF,IAAIxC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../../../../_virtual/jsx-runtime.cjs.js"),o=require("react"),se=require("clsx");require("../../containers/ContextMenu/ContextMenuContext.cjs.js");require("@ynput/ayon-react-components");;/* empty css */require("react-dom");require("../../containers/Feed/context/FeedContext.cjs.js");require("../../containers/Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const oe=require("../../context/DetailsPanelContext.cjs.js"),ae=require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../../containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../containers/Feed/components/CommentInput/CommentInput.cjs.js");require("../../containers/Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../containers/Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../containers/Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("lodash");require("../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");const w=require("react-toastify");require("uuid");const d=require("../../util/versionUploadHelpers.cjs.js");require("../../util/pubsub.cjs.js");require("react-router-dom");require("../../containers/Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../containers/Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../containers/Feed/components/ActivityDate.cjs.js");require("../AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../ThumbnailSimple/ThumbnailSimple.cjs.js");require("../EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");const qe=require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");const le=require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");const ce=require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../ReviewablesList/ReviewablesList.styled.cjs.js");require("../ReviewablesList/ReviewablesUpload.styled.cjs.js");const de=require("../ReviewablesList/useReviewablesUpload.cjs.js");require("../ReviewableCard/ReviewableCard.cjs.js");require("../ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../FileThumbnail/FileThumbnail.cjs.js");require("../Thumbnail/Thumbnail.styled.cjs.js");require("../Thumbnail/StackedThumbnails.cjs.js");const p=require("./EntityPanelUploader.styled.cjs.js"),pe=require("./Dropzone.cjs.js"),he=require("axios"),fe=require("./EntityPanelUploaderDialog.cjs.js");require("../SimpleFormDialog/SimpleFormDialog.cjs.js");require("../EntityPath/EntityPath.styled.cjs.js");require("../EntityPath/SegmentProvider.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../DetailsPanelDetails/DetailsSection.cjs.js");require("../DetailsPanelDetails/FieldLabel.cjs.js");require("../Watchers/Watchers.cjs.js");require("../ProjectTableSettings/ProjectTableSettings.cjs.js");require("../Powerpack/PowerpackButton.cjs.js");require("../Powerpack/PricingLink.cjs.js");require("../Powerpack/PowerpackDialog.styled.cjs.js");require("../Powerpack/CTAButton.cjs.js");require("../Powerpack/RequiredAddonVersion.cjs.js");require("../SizeSlider/SizeSlider.cjs.js");require("../SettingsPanel/SettingsPanel.cjs.js");require("../SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../AttributeEditor/components/MinMaxField.cjs.js");require("../EnumEditor/EnumEditor.styled.cjs.js");require("../SearchFilter/filterDates.cjs.js");require("../FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../Badge/Badge.cjs.js");require("../VersionUploader/components/UploadVersionDialog.cjs.js");require("../VersionUploader/context/VersionUploadContext.cjs.js");require("../Feedback/FeedbackContext.cjs.js");require("../Feedback/SupportBubble.cjs.js");require("../Chips/Chips.cjs.js");require("../LinksManager/LinksManager.styled.cjs.js");require("../../containers/EntityPickerDialog/EntityPickerDialog.cjs.js");require("../StyledLink/StyledLink.cjs.js");require("date-fns");require("../ShareOptionIcon/ShareOptionIcon.cjs.js");require("../AccessUser/AccessUser.cjs.js");require("../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../TableGridSwitch/TableGridSwitch.cjs.js");require("../SortingSetting/SortingSetting.styled.cjs.js");require("../EarlyPreview/EarlyPreview.cjs.js");require("../LegacyBadge/LegacyBadge.cjs.js");require("../Menu/Menu.styled.cjs.js");require("../Menu/MenuItem.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../containers/Feed/Feed.styled.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("@tanstack/react-virtual");require("@tanstack/react-table");require("../../containers/ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/DateWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/TextWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");require("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/ErrorWidget.cjs.js");require("../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");require("short-uuid");require("../../containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableContext.cjs.js");require("../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectDataContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../../containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../../containers/ProjectTreeTable/components/SelectionCell.cjs.js");require("../../containers/ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../../containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../../containers/ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../../containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js");require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");require("../../containers/DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");const ge=require("../../containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../PlayableIcon/PlayableIcon.cjs.js");require("../../containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../containers/Actions/Actions.styled.cjs.js");require("../../containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../containers/Actions/ActionIcon.cjs.js");require("../../containers/Views/context/ViewsContext.cjs.js");require("../../containers/Views/Views.styled.cjs.js");require("../../containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../containers/Views/ViewsMenu/ViewsMenu.cjs.js");const me=[{id:"thumbnail",label:"Upload thumbnail",icon:"add_photo_alternate"},{id:"version",label:"Upload version",icon:"layers"}],xe=({children:H=[],entityType:T,entities:q=[],projectName:y,onUploaded:I,onVersionCreated:_})=>{const{dispatch:k}=oe.useDetailsPanelContext(),[S,h]=o.useState(!1),[b,f]=o.useState(null),c=o.useRef(0),[j,l]=o.useState(null),[L,v]=o.useState(0),[W,g]=o.useState(!1),[D,m]=o.useState(null),n=q.length===1?q[0]:null,C=n?.task?.id,E=n?.folder?.id,B=n?.product?.id,G=n?.id,P=!!(n&&T!=="representation"),{handleFileUpload:J}=de.useReviewablesUpload({projectName:y,versionId:G,taskId:C,folderId:E,productId:B,dispatch:k,onUpload:()=>{l(null),v(0)},onProgress:e=>{v(e)}}),K=me.filter(e=>e.id==="version"?P:!0),s=()=>{l(null),h(!1),f(null),c.current=0,v(0),g(!1),m(null)},Q=async e=>{if(!D||!n){g(!1),m(null);return}const r=d.sanitizeProductName(e);if(!r.trim()){w.toast.error("Product name must contain valid characters (letters, numbers, underscore, or hyphen)");return}try{if(!E)throw new Error("Folder ID is required to create a product");l("version");const i=await d.createProductHelper(z,y,{folderId:E,name:r,productType:"review"});g(!1),await F(D,i.id),m(null)}catch(i){d.handleUploadError(i,"creating product"),s()}},X=()=>{g(!1),m(null),s()},[Y]=ce.useCreateVersionMutation(),[z]=le.useCreateProductMutation(),V=async e=>{if(!P||!n)return w.toast.error("Please select exactly one version to upload reviewables"),s();const r=n.product?.id;if(!r){m(e),g(!0);return}await F(e,r)},F=async(e,r)=>{try{const i=d.getNextVersionNumber(n.product?.latestVersion),t=await d.createVersionHelper(Y,y,{productId:r,taskId:C,version:i});await J(e,t.id),s(),_?.(t.id)}catch(i){d.handleUploadError(i,"uploading version"),s()}},N=async(e=[])=>{if(h(!1),!q.length)return;const r=new Date().toISOString();let i=[];for(const t of e){const a=q.find(R=>R.id===t.id);if(!a)continue;t.thumbnailId;const x=t.users||[];i.push({id:a.id,projectName:a.projectName,data:{updatedAt:r},currentAssignees:x}),a.productId}try{await ee({operations:i,entityType:T}),I&&I(i)}catch(t){console.error("Error uploading thumbnail:",t)}},O=async e=>{if(!e)return s();try{if(!e.type.includes("image"))throw new Error("File is not an image");let r=[];for(const a of q){const{id:x,entityType:R,projectName:U}=a;if(!U)throw new Error("Project name is required");const ne=he.post(U&&`/api/projects/${U}/${R}s/${x}/thumbnail`,e,{onUploadProgress:M=>{v(Math.round(100*M.loaded/(M.total||e.size)))},headers:{"Content-Type":e.type}});r.push(ne)}const t=(await Promise.all(r)).map((a,x)=>({thumbnailId:a.data.id,id:q[x].id}));N(t),s()}catch(r){console.error(r),w.toast.error(r.message),s()}},[ee]=qe.useUpdateEntitiesMutation(),re=e=>{e.preventDefault(),c.current++,c.current===1&&h(!0)},ie=e=>{e.preventDefault(),c.current--,c.current===0&&(h(!1),f(null))},ue=e=>{e.preventDefault()},te=e=>{if(e.preventDefault(),c.current=0,h(!1),f(null),!(!e.dataTransfer.files||e.dataTransfer.files.length===0)){if(b==="thumbnail"){l("thumbnail");const r=e.dataTransfer.files[0];O(r)}if(b==="version"){l("version");const r=e.dataTransfer.files;V(r)}}},Z=async(e,r)=>{const i=e.target.files;!i||i.length===0||(r==="version"&&(l("version"),V(i)),r==="thumbnail"&&(l("thumbnail"),O(i[0])))},$=o.useRef(null),A=o.useRef(null);return u.jsxRuntimeExports.jsxs(ae.ThumbnailUploadProvider,{entities:q,handleThumbnailUpload:N,thumbnailInputRef:$,versionsInputRef:P?A:void 0,children:[u.jsxRuntimeExports.jsxs(p.DragAndDropWrapper,{className:se({dragging:S}),onDragEnter:re,onDragLeave:ie,onDragOver:ue,onDrop:te,children:[u.jsxRuntimeExports.jsx(ge.ThumbnailWrapper,{children:u.jsxRuntimeExports.jsx("div",{children:H})}),S&&u.jsxRuntimeExports.jsx(p.DropZones,{children:K.map(e=>u.jsxRuntimeExports.jsx(pe,{id:e.id,label:e.label,icon:e.icon,isActive:b===e.id,onDragOver:()=>f(e.id),onDragLeave:()=>f(null)},e.id))}),(j==="thumbnail"||j==="version")&&u.jsxRuntimeExports.jsxs(p.DropZones,{children:[u.jsxRuntimeExports.jsxs(p.UploadingProgress,{children:[u.jsxRuntimeExports.jsx(p.Progress,{style:{right:`${100-L}%`}}),u.jsxRuntimeExports.jsx("span",{className:"label",children:`Uploading ${j}...`})]}),u.jsxRuntimeExports.jsx(p.CancelButton,{icon:"close",variant:"text",onClick:s})]}),u.jsxRuntimeExports.jsx("input",{type:"file",onChange:e=>Z(e,"thumbnail"),ref:$}),u.jsxRuntimeExports.jsx("input",{type:"file",onChange:e=>Z(e,"version"),ref:A})]}),u.jsxRuntimeExports.jsx(fe,{isOpen:W,files:D,onSubmit:Q,onCancel:X})]})};exports.EntityPanelUploader=xe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../../../../_virtual/jsx-runtime.cjs.js"),o=require("react"),se=require("clsx");require("../../containers/ContextMenu/ContextMenuContext.cjs.js");require("@ynput/ayon-react-components");;/* empty css */require("react-dom");require("../../containers/Feed/context/FeedContext.cjs.js");require("../../containers/Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const oe=require("../../context/DetailsPanelContext.cjs.js"),qe=require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../../containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../containers/Feed/components/CommentInput/CommentInput.cjs.js");require("../../containers/Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../containers/Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../containers/Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("lodash");require("../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");const w=require("react-toastify");require("uuid");const d=require("../../util/versionUploadHelpers.cjs.js");require("../../util/pubsub.cjs.js");require("react-router-dom");require("../../containers/Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../containers/Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../containers/Feed/components/ActivityDate.cjs.js");require("../AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../AccessUser/AccessUser.cjs.js");require("../AttributeEditor/components/MinMaxField.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../EnumEditor/EnumEditor.styled.cjs.js");require("../Badge/Badge.cjs.js");require("../Chips/Chips.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");const ae=require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");const le=require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");const ce=require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../DetailsPanelDetails/DetailsSection.cjs.js");require("../DetailsPanelDetails/FieldLabel.cjs.js");require("../EarlyPreview/EarlyPreview.cjs.js");require("../EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const p=require("./EntityPanelUploader.styled.cjs.js"),de=require("./Dropzone.cjs.js"),pe=require("axios");require("../ReviewablesList/ReviewablesList.styled.cjs.js");require("../ReviewablesList/ReviewablesUpload.styled.cjs.js");const he=require("../ReviewablesList/useReviewablesUpload.cjs.js"),fe=require("./EntityPanelUploaderDialog.cjs.js");require("../EntityPath/EntityPath.styled.cjs.js");require("../EntityPath/SegmentProvider.cjs.js");require("../FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../Feedback/FeedbackContext.cjs.js");require("../Feedback/SupportBubble.cjs.js");require("../FileThumbnail/FileThumbnail.cjs.js");require("../LegacyBadge/LegacyBadge.cjs.js");require("../LinksManager/LinksManager.styled.cjs.js");require("../../containers/EntityPickerDialog/EntityPickerDialog.cjs.js");require("date-fns");require("../Powerpack/PowerpackButton.cjs.js");require("../Powerpack/PricingLink.cjs.js");require("../Powerpack/PowerpackDialog.styled.cjs.js");require("../Powerpack/CTAButton.cjs.js");require("../Powerpack/RequiredAddonVersion.cjs.js");require("../ProjectTableSettings/ProjectTableSettings.cjs.js");require("../SizeSlider/SizeSlider.cjs.js");require("../ReviewableCard/ReviewableCard.cjs.js");require("../ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../SearchFilter/filterDates.cjs.js");require("../SettingsPanel/SettingsPanel.cjs.js");require("../SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../ShareOptionIcon/ShareOptionIcon.cjs.js");require("../SimpleFormDialog/SimpleFormDialog.cjs.js");require("../SortingSetting/SortingSetting.styled.cjs.js");require("../StyledLink/StyledLink.cjs.js");require("../TableGridSwitch/TableGridSwitch.cjs.js");require("../Thumbnail/Thumbnail.styled.cjs.js");require("../Thumbnail/StackedThumbnails.cjs.js");require("../ThumbnailSimple/ThumbnailSimple.cjs.js");require("../VersionUploader/components/UploadVersionDialog.cjs.js");require("../VersionUploader/context/VersionUploadContext.cjs.js");require("../Watchers/Watchers.cjs.js");require("../Menu/Menu.styled.cjs.js");require("../Menu/MenuItem.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../containers/Feed/Feed.styled.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("@tanstack/react-virtual");require("@tanstack/react-table");require("../../containers/ProjectTreeTable/widgets/CollapsedWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/DateWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/TextWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");require("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../containers/ProjectTreeTable/widgets/ErrorWidget.cjs.js");require("../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");require("short-uuid");require("../../containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableContext.cjs.js");require("../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectDataContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js");require("../../containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js");require("../../containers/ProjectTreeTable/components/SelectionCell.cjs.js");require("../../containers/ProjectTreeTable/components/RowSelectionHeader.cjs.js");require("../../containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js");require("../../containers/ProjectTreeTable/components/HeaderActionButton.cjs.js");require("../../containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js");require("../../containers/SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../../containers/SimpleTable/context/SimpleTableContext.cjs.js");require("../../containers/SimpleTable/SimpleTableRowTemplate.cjs.js");require("../../containers/Slicer/hooks/useTableDataBySlice.cjs.js");require("../../containers/Slicer/components/SlicerSearch.cjs.js");require("../../containers/Slicer/context/SlicerContext.cjs.js");require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");require("../../containers/DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");const ge=require("../../containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../PlayableIcon/PlayableIcon.cjs.js");require("../../containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../containers/Actions/Actions.styled.cjs.js");require("../../containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../containers/Actions/ActionIcon.cjs.js");require("../../containers/Views/context/ViewsContext.cjs.js");require("../../containers/Views/Views.styled.cjs.js");require("../../containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../containers/Views/ViewsMenu/ViewsMenu.cjs.js");const me=[{id:"thumbnail",label:"Upload thumbnail",icon:"add_photo_alternate"},{id:"version",label:"Upload version",icon:"layers"}],xe=({children:H=[],entityType:T,entities:a=[],projectName:y,onUploaded:I,onVersionCreated:_})=>{const{dispatch:k}=oe.useDetailsPanelContext(),[S,h]=o.useState(!1),[b,f]=o.useState(null),c=o.useRef(0),[j,l]=o.useState(null),[L,v]=o.useState(0),[W,g]=o.useState(!1),[D,m]=o.useState(null),n=a.length===1?a[0]:null,C=n?.task?.id,E=n?.folder?.id,B=n?.product?.id,G=n?.id,P=!!(n&&T!=="representation"),{handleFileUpload:J}=he.useReviewablesUpload({projectName:y,versionId:G,taskId:C,folderId:E,productId:B,dispatch:k,onUpload:()=>{l(null),v(0)},onProgress:e=>{v(e)}}),K=me.filter(e=>e.id==="version"?P:!0),s=()=>{l(null),h(!1),f(null),c.current=0,v(0),g(!1),m(null)},Q=async e=>{if(!D||!n){g(!1),m(null);return}const r=d.sanitizeProductName(e);if(!r.trim()){w.toast.error("Product name must contain valid characters (letters, numbers, underscore, or hyphen)");return}try{if(!E)throw new Error("Folder ID is required to create a product");l("version");const i=await d.createProductHelper(z,y,{folderId:E,name:r,productType:"review"});g(!1),await F(D,i.id),m(null)}catch(i){d.handleUploadError(i,"creating product"),s()}},X=()=>{g(!1),m(null),s()},[Y]=ce.useCreateVersionMutation(),[z]=le.useCreateProductMutation(),V=async e=>{if(!P||!n)return w.toast.error("Please select exactly one version to upload reviewables"),s();const r=n.product?.id;if(!r){m(e),g(!0);return}await F(e,r)},F=async(e,r)=>{try{const i=d.getNextVersionNumber(n.product?.latestVersion),t=await d.createVersionHelper(Y,y,{productId:r,taskId:C,version:i});await J(e,t.id),s(),_?.(t.id)}catch(i){d.handleUploadError(i,"uploading version"),s()}},N=async(e=[])=>{if(h(!1),!a.length)return;const r=new Date().toISOString();let i=[];for(const t of e){const q=a.find(R=>R.id===t.id);if(!q)continue;t.thumbnailId;const x=t.users||[];i.push({id:q.id,projectName:q.projectName,data:{updatedAt:r},currentAssignees:x}),q.productId}try{await ee({operations:i,entityType:T}),I&&I(i)}catch(t){console.error("Error uploading thumbnail:",t)}},O=async e=>{if(!e)return s();try{if(!e.type.includes("image"))throw new Error("File is not an image");let r=[];for(const q of a){const{id:x,entityType:R,projectName:U}=q;if(!U)throw new Error("Project name is required");const ne=pe.post(U&&`/api/projects/${U}/${R}s/${x}/thumbnail`,e,{onUploadProgress:M=>{v(Math.round(100*M.loaded/(M.total||e.size)))},headers:{"Content-Type":e.type}});r.push(ne)}const t=(await Promise.all(r)).map((q,x)=>({thumbnailId:q.data.id,id:a[x].id}));N(t),s()}catch(r){console.error(r),w.toast.error(r.message),s()}},[ee]=ae.useUpdateEntitiesMutation(),re=e=>{e.preventDefault(),c.current++,c.current===1&&h(!0)},ie=e=>{e.preventDefault(),c.current--,c.current===0&&(h(!1),f(null))},ue=e=>{e.preventDefault()},te=e=>{if(e.preventDefault(),c.current=0,h(!1),f(null),!(!e.dataTransfer.files||e.dataTransfer.files.length===0)){if(b==="thumbnail"){l("thumbnail");const r=e.dataTransfer.files[0];O(r)}if(b==="version"){l("version");const r=e.dataTransfer.files;V(r)}}},Z=async(e,r)=>{const i=e.target.files;!i||i.length===0||(r==="version"&&(l("version"),V(i)),r==="thumbnail"&&(l("thumbnail"),O(i[0])))},$=o.useRef(null),A=o.useRef(null);return u.jsxRuntimeExports.jsxs(qe.ThumbnailUploadProvider,{entities:a,handleThumbnailUpload:N,thumbnailInputRef:$,versionsInputRef:P?A:void 0,children:[u.jsxRuntimeExports.jsxs(p.DragAndDropWrapper,{className:se({dragging:S}),onDragEnter:re,onDragLeave:ie,onDragOver:ue,onDrop:te,children:[u.jsxRuntimeExports.jsx(ge.ThumbnailWrapper,{children:u.jsxRuntimeExports.jsx("div",{children:H})}),S&&u.jsxRuntimeExports.jsx(p.DropZones,{children:K.map(e=>u.jsxRuntimeExports.jsx(de,{id:e.id,label:e.label,icon:e.icon,isActive:b===e.id,onDragOver:()=>f(e.id),onDragLeave:()=>f(null)},e.id))}),(j==="thumbnail"||j==="version")&&u.jsxRuntimeExports.jsxs(p.DropZones,{children:[u.jsxRuntimeExports.jsxs(p.UploadingProgress,{children:[u.jsxRuntimeExports.jsx(p.Progress,{style:{right:`${100-L}%`}}),u.jsxRuntimeExports.jsx("span",{className:"label",children:`Uploading ${j}...`})]}),u.jsxRuntimeExports.jsx(p.CancelButton,{icon:"close",variant:"text",onClick:s})]}),u.jsxRuntimeExports.jsx("input",{type:"file",onChange:e=>Z(e,"thumbnail"),ref:$}),u.jsxRuntimeExports.jsx("input",{type:"file",onChange:e=>Z(e,"version"),ref:A})]}),u.jsxRuntimeExports.jsx(fe,{isOpen:W,files:D,onSubmit:Q,onCancel:X})]})};exports.EntityPanelUploader=xe;
2
2
  //# sourceMappingURL=EntityPanelUploader.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","folderId","productId","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","folderId","productId","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}