@ynput/ayon-frontend-shared 0.3.22 → 0.3.24

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 (397) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +23 -22
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/_virtual/index.cjs14.js +1 -1
  5. package/dist/_virtual/index.cjs15.js +1 -1
  6. package/dist/_virtual/index.cjs19.js +1 -1
  7. package/dist/_virtual/index.cjs22.js +1 -1
  8. package/dist/_virtual/index.cjs23.js +1 -1
  9. package/dist/_virtual/index.cjs24.js +1 -1
  10. package/dist/_virtual/index.cjs9.js +1 -1
  11. package/dist/_virtual/index.es10.js +2 -2
  12. package/dist/_virtual/index.es11.js +2 -2
  13. package/dist/_virtual/index.es13.js +2 -2
  14. package/dist/_virtual/index.es14.js +2 -5
  15. package/dist/_virtual/index.es14.js.map +1 -1
  16. package/dist/_virtual/index.es15.js +2 -2
  17. package/dist/_virtual/index.es16.js +2 -2
  18. package/dist/_virtual/index.es17.js +2 -2
  19. package/dist/_virtual/index.es18.js +2 -2
  20. package/dist/_virtual/index.es19.js +2 -2
  21. package/dist/_virtual/index.es22.js +3 -3
  22. package/dist/_virtual/index.es23.js +5 -5
  23. package/dist/_virtual/index.es24.js +5 -5
  24. package/dist/_virtual/index.es9.js +5 -2
  25. package/dist/_virtual/index.es9.js.map +1 -1
  26. package/dist/api.cjs.js +1 -1
  27. package/dist/api.es.js +178 -176
  28. package/dist/components.cjs.js +1 -1
  29. package/dist/components.es.js +157 -155
  30. package/dist/components.es.js.map +1 -1
  31. package/dist/index.cjs.js +1 -1
  32. package/dist/index.es.js +10 -9
  33. package/dist/index.es.js.map +1 -1
  34. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  35. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  36. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  37. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  38. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  39. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  40. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  41. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  42. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
  43. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
  44. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
  45. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
  46. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
  47. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
  48. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
  49. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
  50. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
  51. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
  52. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
  53. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
  54. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
  55. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
  56. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
  57. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
  58. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
  59. package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
  60. package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
  61. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  62. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  63. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  64. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  65. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  66. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
  67. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  68. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  69. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
  70. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  71. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  72. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
  73. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  74. package/dist/shared/src/api/base/client.cjs.js +1 -1
  75. package/dist/shared/src/api/base/client.cjs.js.map +1 -1
  76. package/dist/shared/src/api/base/client.es.js +4 -3
  77. package/dist/shared/src/api/base/client.es.js.map +1 -1
  78. package/dist/shared/src/api/generated/projects.cjs.js +1 -1
  79. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  80. package/dist/shared/src/api/generated/projects.es.js +32 -41
  81. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  82. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
  83. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  84. package/dist/shared/src/api/queries/project/getProject.es.js +29 -15
  85. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  86. package/dist/shared/src/api/queries/project/updateProject.cjs.js +1 -1
  87. package/dist/shared/src/api/queries/project/updateProject.cjs.js.map +1 -1
  88. package/dist/shared/src/api/queries/project/updateProject.es.js +19 -14
  89. package/dist/shared/src/api/queries/project/updateProject.es.js.map +1 -1
  90. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  91. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  92. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +155 -175
  93. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  94. package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js +2 -0
  95. package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js.map +1 -0
  96. package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js +77 -0
  97. package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js.map +1 -0
  98. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  99. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  100. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +3 -2
  101. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  102. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
  103. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
  104. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +3 -2
  105. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
  106. package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js +1 -1
  107. package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js.map +1 -1
  108. package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js +27 -27
  109. package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js.map +1 -1
  110. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  111. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  112. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +3 -2
  113. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  114. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  115. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  116. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +3 -2
  117. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  118. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  119. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  120. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -4
  121. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  122. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  123. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  124. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +3 -2
  125. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  126. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
  127. package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
  128. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +3 -2
  129. package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
  130. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
  131. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  132. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +3 -2
  133. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  134. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  135. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  136. package/dist/shared/src/components/RenameForm/RenameForm.es.js +3 -2
  137. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  138. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  139. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  140. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +3 -2
  141. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  142. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  143. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  144. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +4 -3
  145. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  146. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  147. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  148. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +3 -2
  149. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  150. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +2 -0
  151. package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -0
  152. package/dist/shared/src/components/ReviewablesSelector/Card.es.js +307 -0
  153. package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -0
  154. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js +1 -1
  155. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js.map +1 -1
  156. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js +64 -322
  157. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js.map +1 -1
  158. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js +22 -5
  159. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.cjs.js.map +1 -1
  160. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.es.js +27 -9
  161. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.styled.es.js.map +1 -1
  162. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
  163. package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
  164. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +5 -4
  165. package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
  166. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  167. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  168. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +3 -2
  169. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  170. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  171. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  172. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +3 -2
  173. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  174. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  175. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  176. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +5 -4
  177. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  178. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  179. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -2
  181. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  182. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  183. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -2
  185. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  186. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  187. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +3 -2
  189. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  191. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +3 -2
  193. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  194. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  195. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +3 -2
  197. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  198. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  199. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +3 -2
  201. package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  202. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
  203. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
  204. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +17 -16
  205. package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
  206. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
  207. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
  208. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +3 -2
  209. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
  210. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
  211. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
  212. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +3 -2
  213. package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
  214. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  215. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  216. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +3 -2
  217. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  218. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  219. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  220. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +3 -2
  221. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  222. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  223. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  224. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +3 -2
  225. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  226. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  227. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  228. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +3 -2
  229. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  230. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
  231. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
  232. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +3 -2
  233. package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
  234. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  235. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  236. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +3 -2
  237. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  238. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  239. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  240. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +3 -2
  241. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  242. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +1 -1
  243. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  244. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +3 -2
  245. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  246. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
  247. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
  248. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +7 -6
  249. package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
  250. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  251. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  252. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +3 -2
  253. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  256. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +3 -2
  257. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +3 -2
  261. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
  263. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +3 -2
  265. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
  266. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  267. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  268. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +3 -2
  269. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  271. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +3 -2
  273. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  276. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +3 -2
  277. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  278. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  279. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  280. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +3 -2
  281. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +6 -5
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  288. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +3 -2
  289. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  290. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  291. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  292. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +3 -2
  293. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  294. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  295. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  296. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +3 -2
  297. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  298. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  299. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  300. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +3 -2
  301. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  302. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  303. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  304. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +3 -2
  305. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  306. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  307. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  308. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +3 -2
  309. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  310. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  311. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  312. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +3 -2
  313. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  314. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  315. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  316. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +3 -2
  317. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  318. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  319. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  320. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +3 -2
  321. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  322. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  324. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +3 -2
  325. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  326. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  328. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +9 -8
  329. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  330. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  332. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +14 -13
  333. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  334. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map +1 -1
  336. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js +1 -0
  337. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js.map +1 -1
  338. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
  339. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  340. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +4 -3
  341. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  342. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  344. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +5 -4
  345. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  346. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  348. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +3 -2
  349. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  350. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  351. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  352. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +3 -2
  353. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  354. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  355. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  356. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -2
  357. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  358. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  359. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  360. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +3 -2
  361. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  362. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
  363. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
  364. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +3 -2
  365. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
  366. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
  367. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
  368. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +3 -2
  369. package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
  370. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
  371. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
  372. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +4 -4
  373. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
  374. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  375. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  376. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +3 -2
  377. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  378. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  379. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  380. package/dist/shared/src/context/WebsocketContext.es.js +5 -4
  381. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  382. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  383. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  384. package/dist/shared/src/util/getAttributeIcon.cjs.js +1 -1
  385. package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
  386. package/dist/shared/src/util/getAttributeIcon.es.js +5 -5
  387. package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
  388. package/dist/types/api/generated/projects.d.ts +41 -23
  389. package/dist/types/api/queries/project/getProject.d.ts +188 -1
  390. package/dist/types/api/queries/project/updateProject.d.ts +171 -11
  391. package/dist/types/components/AttributeEditor/attributeTypeMap.d.ts +13 -0
  392. package/dist/types/components/AttributeEditor/index.d.ts +1 -0
  393. package/dist/types/components/ReviewablesSelector/Card.d.ts +18 -0
  394. package/dist/types/components/ReviewablesSelector/ReviewablesSelector.d.ts +2 -3
  395. package/dist/types/components/ReviewablesSelector/ReviewablesSelector.styled.d.ts +1 -0
  396. package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +2 -0
  397. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n { value: 'list', label: 'List' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n {\n value: 'inherit',\n scope: ['project', 'folder', 'task', 'product', 'version', 'representation', 'user'],\n },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n datetime: {\n value: 'datetime',\n label: 'Datetime',\n fields: [],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n defaultData?: Partial<AttributeForm>\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n defaultData,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const resolvedDefaultData = defaultData\n ? {\n ...defaultData,\n name:\n defaultData.name ||\n (defaultData.data?.title ? camelCase(defaultData.data.title) : undefined),\n }\n : undefined\n\n const [formData, setFormData] = useState<AttributeForm | null>(\n attribute ||\n buildInitFormData(excludes, {\n position: existingNames.length,\n ...resolvedDefaultData,\n }),\n )\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n enableBackdropClose={false}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin || !isNew}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => {\n const newType = v[0] as AttributeData['type']\n // Check if regex is supported for the new type\n const typeOpt = TYPE_OPTIONS[newType]\n const supportsRegex = typeOpt?.fields?.includes('regex')\n\n setData('type', newType)\n // Clear regex if not supported by the new type\n if (!supportsRegex && formData?.data?.regex) {\n setData('regex', '')\n }\n }}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["SCOPE_OPTIONS","GLOBAL_FIELDS","TYPE_OPTIONS","initFormData","buildInitFormData","excludes","data","formData","required","key","requiredData","typedKey","AttributeEditor","attribute","defaultData","existingNames","error","isUpdating","onHide","onEdit","onDelete","resolvedDefaultData","camelCase","setFormData","useState","useEffect","isNew","setTopLevelData","value","d","setData","dt","internalError","handleSubmit","footer","jsxs","jsx","Button","Spacer","SaveButton","dataFields","globalField","s","typeOpt","f","customFields","onChange","EnumEditor","val","InputSwitch","e","handleTitleChange","v","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","newType","supportsRegex","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"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"}
1
+ {"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\nimport {\n UIAttributeType,\n UI_TYPE_OPTIONS,\n UI_TYPE_FIELDS,\n UI_TYPE_EXCLUDE,\n backendToUiType,\n uiTypeToBackend,\n} from './attributeTypeMap'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n { value: 'list', label: 'List' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n {\n value: 'inherit',\n scope: ['project', 'folder', 'task', 'product', 'version', 'representation', 'user'],\n },\n]\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n defaultData?: Partial<AttributeForm>\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n defaultData,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const resolvedDefaultData = defaultData\n ? {\n ...defaultData,\n name:\n defaultData.name ||\n (defaultData.data?.title ? camelCase(defaultData.data.title) : undefined),\n }\n : undefined\n\n const initData =\n attribute ||\n buildInitFormData(excludes, {\n position: existingNames.length,\n ...resolvedDefaultData,\n })\n\n const [formData, setFormData] = useState<AttributeForm | null>(initData)\n const [uiType, setUiType] = useState<UIAttributeType>(() =>\n backendToUiType(initData?.data?.type, initData?.data?.enum),\n )\n const [isDecimal, setIsDecimal] = useState<boolean>(() => initData?.data?.type === 'float')\n\n useEffect(() => {\n if (!!attribute) {\n setFormData(attribute)\n setUiType(backendToUiType(attribute.data?.type, attribute.data?.enum))\n setIsDecimal(attribute.data?.type === 'float')\n }\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n const typeFields = UI_TYPE_FIELDS[uiType] ?? []\n const typeExclude = UI_TYPE_EXCLUDE[uiType] ?? []\n dataFields = [...dataFields, ...typeFields].filter((f) => !typeExclude.includes(f))\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n const handleUiTypeChange = (v: string[]) => {\n const newUiType = v[0] as UIAttributeType\n setUiType(newUiType)\n setData('type', uiTypeToBackend(newUiType, isDecimal))\n\n // Clear enum when switching away from select/multi_select\n if (newUiType !== 'select' && newUiType !== 'multi_select') {\n setData('enum', undefined)\n }\n // Clear regex if not supported by the new type\n if (newUiType !== 'text' && formData?.data?.regex) {\n setData('regex', '')\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n enableBackdropClose={false}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[uiType]}\n disabled={formData.builtin || !isNew}\n valueIcon={UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.icon}\n options={UI_TYPE_OPTIONS}\n onChange={handleUiTypeChange}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && uiType === 'number' && (\n <FormRow label=\"Decimal\">\n <InputSwitch\n checked={isDecimal}\n disabled={formData.builtin || !isNew}\n onChange={(e) => {\n const checked = (e.target as HTMLInputElement).checked\n setIsDecimal(checked)\n setData('type', checked ? 'float' : 'integer')\n }}\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["SCOPE_OPTIONS","GLOBAL_FIELDS","initFormData","buildInitFormData","excludes","data","formData","required","key","requiredData","typedKey","AttributeEditor","attribute","defaultData","existingNames","error","isUpdating","onHide","onEdit","onDelete","resolvedDefaultData","camelCase","initData","setFormData","useState","uiType","setUiType","backendToUiType","isDecimal","setIsDecimal","useEffect","isNew","setTopLevelData","value","d","setData","dt","internalError","handleSubmit","footer","jsxs","jsx","Button","Spacer","SaveButton","dataFields","globalField","s","typeFields","UI_TYPE_FIELDS","typeExclude","UI_TYPE_EXCLUDE","f","customFields","onChange","EnumEditor","val","InputSwitch","e","handleTitleChange","v","handleUiTypeChange","newUiType","uiTypeToBackend","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","UI_TYPE_OPTIONS","o","checked","field","fieldComp","fieldLabel","upperFirst","renderer","MinMaxField","geValue","leValue","handleInputChange","strValue","num"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("lodash");require("react-toastify");const t=require("../../util/getAttributeIcon.cjs.js");require("uuid");require("../../util/pubsub.cjs.js");const r=[{value:"text",label:"Text",icon:t.getAttributeIcon("text","string")},{value:"select",label:"Select",icon:t.getAttributeIcon("select","string",!0)},{value:"multi_select",label:"Multi-select",icon:t.getAttributeIcon("multi_select","list_of_strings",!0)},{value:"number",label:"Number",icon:t.getAttributeIcon("number","integer")},{value:"checkbox",label:"Checkbox",icon:t.getAttributeIcon("checkbox","boolean")},{value:"datetime",label:"Date and time",icon:t.getAttributeIcon("datetime","datetime")}],s={text:["minLength","maxLength","regex"],select:["enum"],multi_select:["enum","minItems","maxItems"],number:["ge","gt","le","lt"],checkbox:[],datetime:[]},u={checkbox:["example"]},i=(e,n)=>{switch(e){case"string":return n?.length?"select":"text";case"list_of_strings":return"multi_select";case"integer":case"float":return"number";case"boolean":return"checkbox";case"datetime":return"datetime";default:return"text"}},a=(e,n)=>{switch(e){case"text":return"string";case"select":return"string";case"multi_select":return"list_of_strings";case"number":return n?"float":"integer";case"checkbox":return"boolean";case"datetime":return"datetime"}},o=["string","integer","float","boolean","datetime","list_of_strings"],b=(e,n)=>{if(!e||!o.includes(e))return e??"";const c=i(e,n);return r.find(l=>l.value===c)?.label??e};exports.UI_TYPE_EXCLUDE=u;exports.UI_TYPE_FIELDS=s;exports.UI_TYPE_OPTIONS=r;exports.backendToUiType=i;exports.getUiTypeLabel=b;exports.uiTypeToBackend=a;
2
+ //# sourceMappingURL=attributeTypeMap.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributeTypeMap.cjs.js","sources":["../../../../../src/components/AttributeEditor/attributeTypeMap.ts"],"sourcesContent":["import { AttributeData } from '@shared/api'\nimport { getAttributeIcon } from '@shared/util'\n\nexport type UIAttributeType =\n | 'text'\n | 'select'\n | 'multi_select'\n | 'number'\n | 'checkbox'\n | 'datetime'\n\nexport interface UITypeOption {\n value: UIAttributeType\n label: string\n icon: string\n}\n\nexport const UI_TYPE_OPTIONS: UITypeOption[] = [\n { value: 'text', label: 'Text', icon: getAttributeIcon('text', 'string') },\n { value: 'select', label: 'Select', icon: getAttributeIcon('select', 'string', true) },\n {\n value: 'multi_select',\n label: 'Multi-select',\n icon: getAttributeIcon('multi_select', 'list_of_strings', true),\n },\n { value: 'number', label: 'Number', icon: getAttributeIcon('number', 'integer') },\n { value: 'checkbox', label: 'Checkbox', icon: getAttributeIcon('checkbox', 'boolean') },\n { value: 'datetime', label: 'Date and time', icon: getAttributeIcon('datetime', 'datetime') },\n]\n\nexport const UI_TYPE_FIELDS: Record<UIAttributeType, (keyof AttributeData)[]> = {\n text: ['minLength', 'maxLength', 'regex'],\n select: ['enum'],\n multi_select: ['enum', 'minItems', 'maxItems'],\n number: ['ge', 'gt', 'le', 'lt'],\n checkbox: [],\n datetime: [],\n}\n\nexport const UI_TYPE_EXCLUDE: Partial<Record<UIAttributeType, (keyof AttributeData)[]>> = {\n checkbox: ['example'],\n}\n\nexport const backendToUiType = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): UIAttributeType => {\n switch (type) {\n case 'string':\n return enumValues?.length ? 'select' : 'text'\n case 'list_of_strings':\n return 'multi_select'\n case 'integer':\n case 'float':\n return 'number'\n case 'boolean':\n return 'checkbox'\n case 'datetime':\n return 'datetime'\n default:\n return 'text'\n }\n}\n\nexport const uiTypeToBackend = (\n uiType: UIAttributeType,\n isDecimal: boolean,\n): AttributeData['type'] => {\n switch (uiType) {\n case 'text':\n return 'string'\n case 'select':\n return 'string'\n case 'multi_select':\n return 'list_of_strings'\n case 'number':\n return isDecimal ? 'float' : 'integer'\n case 'checkbox':\n return 'boolean'\n case 'datetime':\n return 'datetime'\n }\n}\n\nconst UI_MAPPED_BACKEND_TYPES: ReadonlyArray<AttributeData['type']> = [\n 'string',\n 'integer',\n 'float',\n 'boolean',\n 'datetime',\n 'list_of_strings',\n]\n\nexport const getUiTypeLabel = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): string => {\n // Unknown / unsupported backend types fall back to the raw type string\n // so the table doesn't mislabel them (e.g. list_of_integers, dict).\n if (!type || !UI_MAPPED_BACKEND_TYPES.includes(type)) return type ?? ''\n const uiType = backendToUiType(type, enumValues)\n return UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.label ?? type\n}\n"],"names":["UI_TYPE_OPTIONS","getAttributeIcon","UI_TYPE_FIELDS","UI_TYPE_EXCLUDE","backendToUiType","type","enumValues","uiTypeToBackend","uiType","isDecimal","UI_MAPPED_BACKEND_TYPES","getUiTypeLabel","o"],"mappings":"sOAiBO,MAAMA,EAAkC,CAC7C,CAAE,MAAO,OAAQ,MAAO,OAAQ,KAAMC,EAAAA,iBAAiB,OAAQ,QAAQ,CAAA,EACvE,CAAE,MAAO,SAAU,MAAO,SAAU,KAAMA,EAAAA,iBAAiB,SAAU,SAAU,EAAI,CAAA,EACnF,CACE,MAAO,eACP,MAAO,eACP,KAAMA,EAAAA,iBAAiB,eAAgB,kBAAmB,EAAI,CAAA,EAEhE,CAAE,MAAO,SAAU,MAAO,SAAU,KAAMA,EAAAA,iBAAiB,SAAU,SAAS,CAAA,EAC9E,CAAE,MAAO,WAAY,MAAO,WAAY,KAAMA,EAAAA,iBAAiB,WAAY,SAAS,CAAA,EACpF,CAAE,MAAO,WAAY,MAAO,gBAAiB,KAAMA,EAAAA,iBAAiB,WAAY,UAAU,CAAA,CAC5F,EAEaC,EAAmE,CAC9E,KAAM,CAAC,YAAa,YAAa,OAAO,EACxC,OAAQ,CAAC,MAAM,EACf,aAAc,CAAC,OAAQ,WAAY,UAAU,EAC7C,OAAQ,CAAC,KAAM,KAAM,KAAM,IAAI,EAC/B,SAAU,CAAA,EACV,SAAU,CAAA,CACZ,EAEaC,EAA6E,CACxF,SAAU,CAAC,SAAS,CACtB,EAEaC,EAAkB,CAC7BC,EACAC,IACoB,CACpB,OAAQD,EAAA,CACN,IAAK,SACH,OAAOC,GAAY,OAAS,SAAW,OACzC,IAAK,kBACH,MAAO,eACT,IAAK,UACL,IAAK,QACH,MAAO,SACT,IAAK,UACH,MAAO,WACT,IAAK,WACH,MAAO,WACT,QACE,MAAO,MAAA,CAEb,EAEaC,EAAkB,CAC7BC,EACAC,IAC0B,CAC1B,OAAQD,EAAA,CACN,IAAK,OACH,MAAO,SACT,IAAK,SACH,MAAO,SACT,IAAK,eACH,MAAO,kBACT,IAAK,SACH,OAAOC,EAAY,QAAU,UAC/B,IAAK,WACH,MAAO,UACT,IAAK,WACH,MAAO,UAAA,CAEb,EAEMC,EAAgE,CACpE,SACA,UACA,QACA,UACA,WACA,iBACF,EAEaC,EAAiB,CAC5BN,EACAC,IACW,CAGX,GAAI,CAACD,GAAQ,CAACK,EAAwB,SAASL,CAAI,SAAUA,GAAQ,GACrE,MAAMG,EAASJ,EAAgBC,EAAMC,CAAU,EAC/C,OAAON,EAAgB,KAAMY,GAAMA,EAAE,QAAUJ,CAAM,GAAG,OAASH,CACnE"}
@@ -0,0 +1,77 @@
1
+ import "lodash";
2
+ import "react-toastify";
3
+ import { getAttributeIcon as t } from "../../util/getAttributeIcon.es.js";
4
+ import "uuid";
5
+ import "../../util/pubsub.es.js";
6
+ const i = [
7
+ { value: "text", label: "Text", icon: t("text", "string") },
8
+ { value: "select", label: "Select", icon: t("select", "string", !0) },
9
+ {
10
+ value: "multi_select",
11
+ label: "Multi-select",
12
+ icon: t("multi_select", "list_of_strings", !0)
13
+ },
14
+ { value: "number", label: "Number", icon: t("number", "integer") },
15
+ { value: "checkbox", label: "Checkbox", icon: t("checkbox", "boolean") },
16
+ { value: "datetime", label: "Date and time", icon: t("datetime", "datetime") }
17
+ ], g = {
18
+ text: ["minLength", "maxLength", "regex"],
19
+ select: ["enum"],
20
+ multi_select: ["enum", "minItems", "maxItems"],
21
+ number: ["ge", "gt", "le", "lt"],
22
+ checkbox: [],
23
+ datetime: []
24
+ }, _ = {
25
+ checkbox: ["example"]
26
+ }, l = (e, n) => {
27
+ switch (e) {
28
+ case "string":
29
+ return n?.length ? "select" : "text";
30
+ case "list_of_strings":
31
+ return "multi_select";
32
+ case "integer":
33
+ case "float":
34
+ return "number";
35
+ case "boolean":
36
+ return "checkbox";
37
+ case "datetime":
38
+ return "datetime";
39
+ default:
40
+ return "text";
41
+ }
42
+ }, x = (e, n) => {
43
+ switch (e) {
44
+ case "text":
45
+ return "string";
46
+ case "select":
47
+ return "string";
48
+ case "multi_select":
49
+ return "list_of_strings";
50
+ case "number":
51
+ return n ? "float" : "integer";
52
+ case "checkbox":
53
+ return "boolean";
54
+ case "datetime":
55
+ return "datetime";
56
+ }
57
+ }, s = [
58
+ "string",
59
+ "integer",
60
+ "float",
61
+ "boolean",
62
+ "datetime",
63
+ "list_of_strings"
64
+ ], d = (e, n) => {
65
+ if (!e || !s.includes(e)) return e ?? "";
66
+ const r = l(e, n);
67
+ return i.find((c) => c.value === r)?.label ?? e;
68
+ };
69
+ export {
70
+ _ as UI_TYPE_EXCLUDE,
71
+ g as UI_TYPE_FIELDS,
72
+ i as UI_TYPE_OPTIONS,
73
+ l as backendToUiType,
74
+ d as getUiTypeLabel,
75
+ x as uiTypeToBackend
76
+ };
77
+ //# sourceMappingURL=attributeTypeMap.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributeTypeMap.es.js","sources":["../../../../../src/components/AttributeEditor/attributeTypeMap.ts"],"sourcesContent":["import { AttributeData } from '@shared/api'\nimport { getAttributeIcon } from '@shared/util'\n\nexport type UIAttributeType =\n | 'text'\n | 'select'\n | 'multi_select'\n | 'number'\n | 'checkbox'\n | 'datetime'\n\nexport interface UITypeOption {\n value: UIAttributeType\n label: string\n icon: string\n}\n\nexport const UI_TYPE_OPTIONS: UITypeOption[] = [\n { value: 'text', label: 'Text', icon: getAttributeIcon('text', 'string') },\n { value: 'select', label: 'Select', icon: getAttributeIcon('select', 'string', true) },\n {\n value: 'multi_select',\n label: 'Multi-select',\n icon: getAttributeIcon('multi_select', 'list_of_strings', true),\n },\n { value: 'number', label: 'Number', icon: getAttributeIcon('number', 'integer') },\n { value: 'checkbox', label: 'Checkbox', icon: getAttributeIcon('checkbox', 'boolean') },\n { value: 'datetime', label: 'Date and time', icon: getAttributeIcon('datetime', 'datetime') },\n]\n\nexport const UI_TYPE_FIELDS: Record<UIAttributeType, (keyof AttributeData)[]> = {\n text: ['minLength', 'maxLength', 'regex'],\n select: ['enum'],\n multi_select: ['enum', 'minItems', 'maxItems'],\n number: ['ge', 'gt', 'le', 'lt'],\n checkbox: [],\n datetime: [],\n}\n\nexport const UI_TYPE_EXCLUDE: Partial<Record<UIAttributeType, (keyof AttributeData)[]>> = {\n checkbox: ['example'],\n}\n\nexport const backendToUiType = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): UIAttributeType => {\n switch (type) {\n case 'string':\n return enumValues?.length ? 'select' : 'text'\n case 'list_of_strings':\n return 'multi_select'\n case 'integer':\n case 'float':\n return 'number'\n case 'boolean':\n return 'checkbox'\n case 'datetime':\n return 'datetime'\n default:\n return 'text'\n }\n}\n\nexport const uiTypeToBackend = (\n uiType: UIAttributeType,\n isDecimal: boolean,\n): AttributeData['type'] => {\n switch (uiType) {\n case 'text':\n return 'string'\n case 'select':\n return 'string'\n case 'multi_select':\n return 'list_of_strings'\n case 'number':\n return isDecimal ? 'float' : 'integer'\n case 'checkbox':\n return 'boolean'\n case 'datetime':\n return 'datetime'\n }\n}\n\nconst UI_MAPPED_BACKEND_TYPES: ReadonlyArray<AttributeData['type']> = [\n 'string',\n 'integer',\n 'float',\n 'boolean',\n 'datetime',\n 'list_of_strings',\n]\n\nexport const getUiTypeLabel = (\n type: AttributeData['type'] | undefined,\n enumValues?: AttributeData['enum'],\n): string => {\n // Unknown / unsupported backend types fall back to the raw type string\n // so the table doesn't mislabel them (e.g. list_of_integers, dict).\n if (!type || !UI_MAPPED_BACKEND_TYPES.includes(type)) return type ?? ''\n const uiType = backendToUiType(type, enumValues)\n return UI_TYPE_OPTIONS.find((o) => o.value === uiType)?.label ?? type\n}\n"],"names":["UI_TYPE_OPTIONS","getAttributeIcon","UI_TYPE_FIELDS","UI_TYPE_EXCLUDE","backendToUiType","type","enumValues","uiTypeToBackend","uiType","isDecimal","UI_MAPPED_BACKEND_TYPES","getUiTypeLabel","o"],"mappings":";;;;;AAiBO,MAAMA,IAAkC;AAAA,EAC7C,EAAE,OAAO,QAAQ,OAAO,QAAQ,MAAMC,EAAiB,QAAQ,QAAQ,EAAA;AAAA,EACvE,EAAE,OAAO,UAAU,OAAO,UAAU,MAAMA,EAAiB,UAAU,UAAU,EAAI,EAAA;AAAA,EACnF;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAMA,EAAiB,gBAAgB,mBAAmB,EAAI;AAAA,EAAA;AAAA,EAEhE,EAAE,OAAO,UAAU,OAAO,UAAU,MAAMA,EAAiB,UAAU,SAAS,EAAA;AAAA,EAC9E,EAAE,OAAO,YAAY,OAAO,YAAY,MAAMA,EAAiB,YAAY,SAAS,EAAA;AAAA,EACpF,EAAE,OAAO,YAAY,OAAO,iBAAiB,MAAMA,EAAiB,YAAY,UAAU,EAAA;AAC5F,GAEaC,IAAmE;AAAA,EAC9E,MAAM,CAAC,aAAa,aAAa,OAAO;AAAA,EACxC,QAAQ,CAAC,MAAM;AAAA,EACf,cAAc,CAAC,QAAQ,YAAY,UAAU;AAAA,EAC7C,QAAQ,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,EAC/B,UAAU,CAAA;AAAA,EACV,UAAU,CAAA;AACZ,GAEaC,IAA6E;AAAA,EACxF,UAAU,CAAC,SAAS;AACtB,GAEaC,IAAkB,CAC7BC,GACAC,MACoB;AACpB,UAAQD,GAAA;AAAA,IACN,KAAK;AACH,aAAOC,GAAY,SAAS,WAAW;AAAA,IACzC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb,GAEaC,IAAkB,CAC7BC,GACAC,MAC0B;AAC1B,UAAQD,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAOC,IAAY,UAAU;AAAA,IAC/B,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EAAA;AAEb,GAEMC,IAAgE;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAiB,CAC5BN,GACAC,MACW;AAGX,MAAI,CAACD,KAAQ,CAACK,EAAwB,SAASL,CAAI,UAAUA,KAAQ;AACrE,QAAMG,IAASJ,EAAgBC,GAAMC,CAAU;AAC/C,SAAON,EAAgB,KAAK,CAACY,MAAMA,EAAE,UAAUJ,CAAM,GAAG,SAASH;AACnE;"}
@@ -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/UserTooltipItem.cjs.js");require("../../containers/Feed/components/Tooltips/UserTooltip/UserTooltip.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/projectFolders.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 oe=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 qe=require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/products/getFolderProducts.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/projectFolders/projectFolders.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/tasks/getTasks.cjs.js");require("../../api/queries/tasks/updateTasks.cjs.js");require("../../api/queries/teams/getTeams.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 ae=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("../../containers/Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const le=require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");const ce=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("../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("date-fns");require("../DateRangePicker/DateRangePicker.styled.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");const w=require("react-toastify");require("../../../../_virtual/index.cjs.js");require("../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("uuid");const d=require("../../util/versionUploadHelpers.cjs.js");require("../../util/pubsub.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../DetailsPanelDetails/DetailsSection.cjs.js");require("../DetailsPanelDetails/FieldLabel.cjs.js");require("../DoneCheckbox/DoneCheckbox.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("../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("react-router-dom");require("../../containers/Slicer/components/Slicer.cjs.js");require("../../containers/Slicer/context/SlicerContext.cjs.js");require("../../containers/Slicer/hooks/useTableDataBySlice.cjs.js");require("react-redux");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.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("../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("../ReviewablesSelector/ReviewablesSelector.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");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("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("rehype-raw");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/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.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/EnumCellValue.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("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableContext.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/ClipboardContext.cjs.js");require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectDataContext.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/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");const ge=require("../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../PlayableIcon/PlayableIcon.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../containers/DetailsPanel/components/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}=le.useDetailsPanelContext(),[S,h]=o.useState(!1),[b,f]=o.useState(null),c=o.useRef(0),[j,l]=o.useState(null),[B,v]=o.useState(0),[L,g]=o.useState(!1),[D,m]=o.useState(null),n=a.length===1?a[0]:null,C=n?.task?.id,E=n?.folder?.id,W=n?.product?.id,G=n?.id,P=!!(n&&T!=="representation"),{handleFileUpload:J}=he.useReviewablesUpload({projectName:y,versionId:G,taskId:C,folderId:E,productId:W,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",productBaseType:"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]=ae.useCreateVersionMutation(),[z]=qe.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]=oe.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(ce.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-B}%`}}),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:L,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/UserTooltipItem.cjs.js");require("../../containers/Feed/components/Tooltips/UserTooltip/UserTooltip.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/projectFolders.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 oe=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 qe=require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/products/getFolderProducts.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/projectFolders/projectFolders.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/tasks/getTasks.cjs.js");require("../../api/queries/tasks/updateTasks.cjs.js");require("../../api/queries/teams/getTeams.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 ae=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("../../containers/Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const le=require("../../context/DetailsPanelContext.cjs.js");require("../../context/SubtasksModulesContext.cjs.js");const ce=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("../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("../AttributeEditor/attributeTypeMap.cjs.js");require("../Badge/Badge.cjs.js");require("../Chips/Chips.cjs.js");require("date-fns");require("../DateRangePicker/DateRangePicker.styled.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");const w=require("react-toastify");require("../../../../_virtual/index.cjs.js");require("../../../../node_modules/refractor/lib/common.cjs.js");require("../../../../node_modules/refractor/lib/all.cjs.js");;/* empty css */require("uuid");const d=require("../../util/versionUploadHelpers.cjs.js");require("../../util/pubsub.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../DetailsPanelDetails/DetailsSection.cjs.js");require("../DetailsPanelDetails/FieldLabel.cjs.js");require("../DoneCheckbox/DoneCheckbox.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("../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("react-router-dom");require("../../containers/Slicer/components/Slicer.cjs.js");require("../../containers/Slicer/context/SlicerContext.cjs.js");require("../../containers/Slicer/hooks/useTableDataBySlice.cjs.js");require("react-redux");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.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("../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("../ReviewablesSelector/ReviewablesSelector.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");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("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("rehype-raw");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/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.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/EnumCellValue.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("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectTableContext.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/ClipboardContext.cjs.js");require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../containers/ProjectTreeTable/context/ProjectDataContext.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/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");const ge=require("../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../PlayableIcon/PlayableIcon.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../containers/DetailsPanel/components/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}=le.useDetailsPanelContext(),[S,h]=o.useState(!1),[b,f]=o.useState(null),c=o.useRef(0),[j,l]=o.useState(null),[B,v]=o.useState(0),[L,g]=o.useState(!1),[D,m]=o.useState(null),n=a.length===1?a[0]:null,C=n?.task?.id,E=n?.folder?.id,W=n?.product?.id,G=n?.id,P=!!(n&&T!=="representation"),{handleFileUpload:J}=he.useReviewablesUpload({projectName:y,versionId:G,taskId:C,folderId:E,productId:W,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",productBaseType:"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]=ae.useCreateVersionMutation(),[z]=qe.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]=oe.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(ce.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-B}%`}}),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:L,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 productBaseType: 'review',\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 productBaseType: 'review',\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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"}
@@ -141,6 +141,7 @@ import "../AttributeEditor/components/MinMaxField.es.js";
141
141
  import "@dnd-kit/core";
142
142
  import "@dnd-kit/sortable";
143
143
  import "../EnumEditor/EnumEditor.styled.es.js";
144
+ import "../AttributeEditor/attributeTypeMap.es.js";
144
145
  import "../Badge/Badge.es.js";
145
146
  import "../Chips/Chips.es.js";
146
147
  import "date-fns";
@@ -273,7 +274,7 @@ import "../../containers/Views/ViewsMenu/ViewsMenu.es.js";
273
274
  const Ir = [
274
275
  { id: "thumbnail", label: "Upload thumbnail", icon: "add_photo_alternate" },
275
276
  { id: "version", label: "Upload version", icon: "layers" }
276
- ], Rm = ({
277
+ ], Fm = ({
277
278
  children: L = [],
278
279
  entityType: E,
279
280
  entities: a = [],
@@ -499,6 +500,6 @@ const Ir = [
499
500
  );
500
501
  };
501
502
  export {
502
- Rm as EntityPanelUploader
503
+ Fm as EntityPanelUploader
503
504
  };
504
505
  //# sourceMappingURL=EntityPanelUploader.es.js.map