@ynput/ayon-frontend-shared 0.3.39 → 0.3.41
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.
- package/dist/DetailsPanel.cjs.js +1 -1
- package/dist/DetailsPanel.es.js +23 -22
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +1 -1
- package/dist/ProjectTreeTable.es.js +219 -218
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/_virtual/index.cjs22.js +1 -1
- package/dist/_virtual/index.cjs23.js +1 -1
- package/dist/_virtual/index.cjs24.js +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.es22.js +3 -3
- package/dist/_virtual/index.es23.js +5 -5
- package/dist/_virtual/index.es24.js +5 -5
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/api.cjs.js +1 -1
- package/dist/api.es.js +219 -220
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +10 -9
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +20 -58
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +37 -75
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +14 -16
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js +6 -21
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.es.js +7 -46
- package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/getProduct.cjs.js +2 -0
- package/dist/shared/src/api/queries/products/getProduct.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/products/getProduct.es.js +52 -0
- package/dist/shared/src/api/queries/products/getProduct.es.js.map +1 -0
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +3 -2
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +3 -2
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +3 -2
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +3 -2
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +3 -2
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -4
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +3 -2
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +3 -2
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +3 -2
- package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +3 -2
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +4 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +3 -2
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js +3 -2
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +339 -353
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +5 -4
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +3 -2
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +3 -2
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +7 -6
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -2
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -2
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +113 -119
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +132 -122
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js +6 -6
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js +148 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js +29 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js +34 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +17 -16
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.es.js +9 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.es.js +12 -12
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +3 -2
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.styled.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.styled.es.js +5 -5
- package/dist/shared/src/containers/Feed/Feed.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +5 -4
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +7 -6
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.es.js +3 -2
- package/dist/shared/src/containers/ListTable/ListTable.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js +3 -2
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js +3 -2
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +365 -363
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +14 -13
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +4 -3
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +5 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -2
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +3 -2
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +3 -2
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +3 -2
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +3 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +61 -82
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
- package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
- package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ProjectContext.es.js +83 -66
- package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.es.js +5 -4
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
- package/dist/types/api/generated/graphql.d.ts +1 -34
- package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +3 -1
- package/dist/types/api/queries/entityLists/getLists.d.ts +2 -315
- package/dist/types/api/queries/products/createProduct.d.ts +2 -2
- package/dist/types/api/queries/products/getProduct.d.ts +259 -0
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -1
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.d.ts +3 -2
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.d.ts +7 -0
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.d.ts +2 -0
- package/dist/types/containers/DetailsPanel/helpers/buildEntityTypeIcons.d.ts +4 -0
- package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
- package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +1 -0
- package/dist/types/context/ProjectContext.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, RefObject, 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 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 { useOptionalVersionUploadContext } from '@shared/components'\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 /** Hoisted by the parent so ThumbnailUploadProvider (also hoisted) and the\n * underlying <input> share the same ref identity. */\n thumbnailInputRef: RefObject<HTMLInputElement>\n versionsInputRef: RefObject<HTMLInputElement>\n children?: JSX.Element | JSX.Element[]\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 thumbnailInputRef,\n versionsInputRef,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n const versionUploadCtx = useOptionalVersionUploadContext()\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 if (versionUploadCtx) {\n const fileArray = Array.from(files)\n const pending = fileArray.map((file) => ({\n file,\n preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n }))\n versionUploadCtx.setPendingFiles((prev) => [...prev, ...pending])\n\n const product = singleEntity.product\n const linkedTask = singleEntity.task\n ? {\n id: singleEntity.task.id,\n name: singleEntity.task.name,\n label: singleEntity.task.label,\n taskType: singleEntity.task.taskType,\n }\n : undefined\n\n versionUploadCtx.onOpenVersionUpload({\n productId: product?.id,\n folderId: singleEntity.folder?.id,\n taskId: singleEntity.task?.id,\n linkedTask,\n latestVersionNumber: product?.latestVersion?.version,\n latestVersionId: product?.latestVersion?.id,\n })\n // Reset local upload UI; the dialog now drives the flow.\n resetState()\n return\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 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 setIsDraggingFile(false)\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 return (\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 </>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","thumbnailInputRef","versionsInputRef","onVersionCreated","dispatch","useDetailsPanelContext","versionUploadCtx","useOptionalVersionUploadContext","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","pending","file","prev","product","linkedTask","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleUploadThumbnail","promises","entity","id","promise","axios","e","updatedEntities","res","i","updateEntities","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","jsxs","Fragment","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, RefObject, 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 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 { useOptionalVersionUploadContext } from '@shared/components'\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 /** Hoisted by the parent so ThumbnailUploadProvider (also hoisted) and the\n * underlying <input> share the same ref identity. */\n thumbnailInputRef: RefObject<HTMLInputElement>\n versionsInputRef: RefObject<HTMLInputElement>\n children?: JSX.Element | JSX.Element[]\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 thumbnailInputRef,\n versionsInputRef,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n const versionUploadCtx = useOptionalVersionUploadContext()\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 if (versionUploadCtx) {\n const fileArray = Array.from(files)\n const pending = fileArray.map((file) => ({\n file,\n preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n }))\n versionUploadCtx.setPendingFiles((prev) => [...prev, ...pending])\n\n const product = singleEntity.product\n const linkedTask = singleEntity.task\n ? {\n id: singleEntity.task.id,\n name: singleEntity.task.name,\n label: singleEntity.task.label,\n taskType: singleEntity.task.taskType,\n }\n : undefined\n\n versionUploadCtx.onOpenVersionUpload({\n productId: product?.id,\n folderId: singleEntity.folder?.id,\n taskId: singleEntity.task?.id,\n linkedTask,\n latestVersionNumber: product?.latestVersion?.version,\n latestVersionId: product?.latestVersion?.id,\n })\n // Reset local upload UI; the dialog now drives the flow.\n resetState()\n return\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 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 setIsDraggingFile(false)\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 return (\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 </>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","thumbnailInputRef","versionsInputRef","onVersionCreated","dispatch","useDetailsPanelContext","versionUploadCtx","useOptionalVersionUploadContext","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","pending","file","prev","product","linkedTask","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleUploadThumbnail","promises","entity","id","promise","axios","e","updatedEntities","res","i","updateEntities","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","jsxs","Fragment","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
|
|
@@ -275,6 +275,7 @@ import "../../containers/ProjectTreeTable/components/HeaderActionButton.es.js";
|
|
|
275
275
|
import "../../containers/ProjectTreeTable/components/TableFooterRow.es.js";
|
|
276
276
|
import "../../containers/DetailsPanel/DetailsPanel.styled.es.js";
|
|
277
277
|
import "../../containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.es.js";
|
|
278
|
+
import "../../containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js";
|
|
278
279
|
import { ThumbnailWrapper as Pr } from "../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
|
|
279
280
|
import "../PlayableIcon/PlayableIcon.es.js";
|
|
280
281
|
import "../../containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js";
|
|
@@ -295,7 +296,7 @@ import "../../containers/ListTable/ListTable.styled.es.js";
|
|
|
295
296
|
const wr = [
|
|
296
297
|
{ id: "thumbnail", label: "Upload thumbnail", icon: "add_photo_alternate" },
|
|
297
298
|
{ id: "version", label: "Upload version", icon: "layers" }
|
|
298
|
-
],
|
|
299
|
+
], Ym = ({
|
|
299
300
|
children: L = [],
|
|
300
301
|
entityType: S,
|
|
301
302
|
entities: v = [],
|
|
@@ -513,6 +514,6 @@ const wr = [
|
|
|
513
514
|
] });
|
|
514
515
|
};
|
|
515
516
|
export {
|
|
516
|
-
|
|
517
|
+
Ym as EntityPanelUploader
|
|
517
518
|
};
|
|
518
519
|
//# sourceMappingURL=EntityPanelUploader.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPanelUploader.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, RefObject, 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 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 { useOptionalVersionUploadContext } from '@shared/components'\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 /** Hoisted by the parent so ThumbnailUploadProvider (also hoisted) and the\n * underlying <input> share the same ref identity. */\n thumbnailInputRef: RefObject<HTMLInputElement>\n versionsInputRef: RefObject<HTMLInputElement>\n children?: JSX.Element | JSX.Element[]\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 thumbnailInputRef,\n versionsInputRef,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n const versionUploadCtx = useOptionalVersionUploadContext()\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 if (versionUploadCtx) {\n const fileArray = Array.from(files)\n const pending = fileArray.map((file) => ({\n file,\n preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n }))\n versionUploadCtx.setPendingFiles((prev) => [...prev, ...pending])\n\n const product = singleEntity.product\n const linkedTask = singleEntity.task\n ? {\n id: singleEntity.task.id,\n name: singleEntity.task.name,\n label: singleEntity.task.label,\n taskType: singleEntity.task.taskType,\n }\n : undefined\n\n versionUploadCtx.onOpenVersionUpload({\n productId: product?.id,\n folderId: singleEntity.folder?.id,\n taskId: singleEntity.task?.id,\n linkedTask,\n latestVersionNumber: product?.latestVersion?.version,\n latestVersionId: product?.latestVersion?.id,\n })\n // Reset local upload UI; the dialog now drives the flow.\n resetState()\n return\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 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 setIsDraggingFile(false)\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 return (\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 </>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","thumbnailInputRef","versionsInputRef","onVersionCreated","dispatch","useDetailsPanelContext","versionUploadCtx","useOptionalVersionUploadContext","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","pending","file","prev","product","linkedTask","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleUploadThumbnail","promises","entity","id","promise","axios","e","updatedEntities","res","i","updateEntities","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","jsxs","Fragment","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.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, RefObject, 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 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 { useOptionalVersionUploadContext } from '@shared/components'\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 /** Hoisted by the parent so ThumbnailUploadProvider (also hoisted) and the\n * underlying <input> share the same ref identity. */\n thumbnailInputRef: RefObject<HTMLInputElement>\n versionsInputRef: RefObject<HTMLInputElement>\n children?: JSX.Element | JSX.Element[]\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 thumbnailInputRef,\n versionsInputRef,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n const versionUploadCtx = useOptionalVersionUploadContext()\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 if (versionUploadCtx) {\n const fileArray = Array.from(files)\n const pending = fileArray.map((file) => ({\n file,\n preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n }))\n versionUploadCtx.setPendingFiles((prev) => [...prev, ...pending])\n\n const product = singleEntity.product\n const linkedTask = singleEntity.task\n ? {\n id: singleEntity.task.id,\n name: singleEntity.task.name,\n label: singleEntity.task.label,\n taskType: singleEntity.task.taskType,\n }\n : undefined\n\n versionUploadCtx.onOpenVersionUpload({\n productId: product?.id,\n folderId: singleEntity.folder?.id,\n taskId: singleEntity.task?.id,\n linkedTask,\n latestVersionNumber: product?.latestVersion?.version,\n latestVersionId: product?.latestVersion?.id,\n })\n // Reset local upload UI; the dialog now drives the flow.\n resetState()\n return\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 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 setIsDraggingFile(false)\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 return (\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 </>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","thumbnailInputRef","versionsInputRef","onVersionCreated","dispatch","useDetailsPanelContext","versionUploadCtx","useOptionalVersionUploadContext","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","pending","file","prev","product","linkedTask","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleUploadThumbnail","promises","entity","id","promise","axios","e","updatedEntities","res","i","updateEntities","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","jsxs","Fragment","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const i=require("../../../../_virtual/jsx-runtime.cjs.js"),q=require("@ynput/ayon-react-components"),h=require("lodash"),t=require("react");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/dataImport.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/columnStats/metricTargets.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");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");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/listItemsColumnStats.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/folders/getFolderDeleteInfo.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/permissions/getPermissions.cjs.js");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");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../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("clsx");require("../AttributeEditor/AttributeEditor.cjs.js");require("../AttributeEditor/attributeTypeMap.cjs.js");require("../Badge/Badge.cjs.js");require("../Chips/Chips.cjs.js");require("react-dom");require("date-fns");require("../DateRangePicker/DateRangePicker.styled.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");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");require("../../util/pubsub.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../DetailsPanelDetails/BorderedSection.cjs.js");require("../QuillListStyles/QuillListStyles.cjs.js");require("../DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("react-markdown");require("remark-gfm");require("rehype-raw");require("../../containers/Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("../../containers/Feed/components/CommentInput/modules/index.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("../../context/PowerpackContextInstance.cjs.js");require("../../context/UriContext.cjs.js");require("../../context/DetailsPanelContextInstance.cjs.js");require("../../context/SubtasksModulesContextInstance.cjs.js");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/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("react-redux");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.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");require("../EnumEditor/EnumEditor.styled.cjs.js");require("../../containers/ContextMenu/ContextMenuContext.cjs.js");;/* empty css */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("../../containers/Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("remark-emoji");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/ActivityComment/ActivityComment.styled.cjs.js");require("../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../containers/Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../containers/Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../containers/Feed/components/ActivityDate.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../containers/Feed/components/ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../../containers/Feed/Feed.styled.cjs.js");require("../../containers/Feed/components/FeedSearchFilter.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/MarkdownWidget.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/widgets/LinksWidget.cjs.js");require("../LinksManager/LinksManager.styled.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("../SearchFilter/filterDates.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/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/components/DeleteConfirmContent.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/TableFooterRow.cjs.js");require("../../containers/EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../containers/Slicer/components/Slicer.cjs.js");require("../../containers/Slicer/context/SlicerContext.cjs.js");require("../../containers/Slicer/hooks/useTableDataBySlice.cjs.js");require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");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/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../containers/DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.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/ViewsMenu/ViewsMenu.cjs.js");require("../../containers/Views/context/ViewsContextInstance.cjs.js");require("../../containers/Views/Views.styled.cjs.js");require("../../containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../containers/ListTable/ListTableRow.cjs.js");require("../../containers/ListTable/ListTable.styled.cjs.js");require("./EntityPanelUploader.styled.cjs.js");require("axios");require("../EntityPath/EntityPath.styled.cjs.js");require("../EntityPath/SegmentProvider.cjs.js");require("../FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../Feedback/FeedbackContextInstance.cjs.js");require("../Feedback/SupportBubble.cjs.js");require("../FileThumbnail/FileThumbnail.cjs.js");require("../LegacyBadge/LegacyBadge.cjs.js");require("../Powerpack/PowerpackButton.cjs.js");require("../Powerpack/FreeTrialLink.cjs.js");require("../Powerpack/PowerpackDialog.styled.cjs.js");require("../Powerpack/CTAButton.cjs.js");require("../Powerpack/RequiredAddonVersion.cjs.js");require("../ProjectTableSettings/ProjectTableSettings.cjs.js");require("../SizeSlider/SizeSlider.cjs.js");require("../ReviewableCard/ReviewableCard.cjs.js");require("../ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../SearchFilter/CustomDateRangeDialog.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.cjs.js");require("../ColumnHeaderMenuUI.cjs.js");require("../ReviewablesList/ReviewablesList.styled.cjs.js");require("../ReviewablesList/ReviewablesUpload.styled.cjs.js");const E=require("../ReviewablesList/useReviewablesUpload.cjs.js"),f="review",g=n=>{if(!n)return"";const u=E.parseFilename(n.name).replace(/\.[^/.]+$/,""),s=h.camelCase(u),o=h.upperFirst(s);return`${f}${o}`},v=({files:n,isOpen:u,onCancel:s,onSubmit:o})=>{const a=g(n?.[0]),c=t.useRef(null),l=t.useRef(!1),[r,d]=t.useState(a);t.useEffect(()=>{d(a),l.current=!1},[a]),t.useEffect(()=>{if(u&&c.current&&r.startsWith(f)&&!l.current){c.current.focus();const e=f.length,j=r.length;c.current.setSelectionRange(e,j),l.current=!0}else u||(l.current=!1)},[u,r]);const p=()=>{r.trim()&&o&&o(r.trim())},x=()=>{d(a),s&&s()},m=r.trim().length>0,R=i.jsxRuntimeExports.jsxs("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[i.jsxRuntimeExports.jsx(q.Button,{variant:"text",onClick:x,children:"Cancel"}),i.jsxRuntimeExports.jsx(q.Button,{variant:"filled",onClick:p,disabled:!m,children:"Upload"})]});return i.jsxRuntimeExports.jsx(q.Dialog,{isOpen:u,onClose:x,header:"Upload Entity",footer:R,size:"sm",children:i.jsxRuntimeExports.jsx("div",{style:{padding:"16px 0"},children:i.jsxRuntimeExports.jsx(q.FormRow,{label:"Product Name",children:i.jsxRuntimeExports.jsx(q.InputText,{ref:c,placeholder:"Enter product name...",value:r,onChange:e=>d(e.target.value),autoFocus:!0,onKeyDown:e=>{e.key==="Enter"&&m?(e.preventDefault(),p()):e.key==="Escape"&&(e.preventDefault(),x())}})})})})};module.exports=v;
|
|
1
|
+
"use strict";const i=require("../../../../_virtual/jsx-runtime.cjs.js"),q=require("@ynput/ayon-react-components"),h=require("lodash"),t=require("react");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/dataImport.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/columnStats/metricTargets.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");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");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/listItemsColumnStats.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/folders/getFolderDeleteInfo.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/permissions/getPermissions.cjs.js");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");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../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("clsx");require("../AttributeEditor/AttributeEditor.cjs.js");require("../AttributeEditor/attributeTypeMap.cjs.js");require("../Badge/Badge.cjs.js");require("../Chips/Chips.cjs.js");require("react-dom");require("date-fns");require("../DateRangePicker/DateRangePicker.styled.cjs.js");require("../LinksManager/CellEditingDialog.cjs.js");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");require("../../util/pubsub.cjs.js");require("../DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("react-quill-ayon");require("../DetailsPanelDetails/BorderedSection.cjs.js");require("../QuillListStyles/QuillListStyles.cjs.js");require("../DetailsPanelDetails/DescriptionSection.styles.cjs.js");require("react-markdown");require("remark-gfm");require("rehype-raw");require("../../containers/Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../DetailsPanelDetails/hooks/useMentionSystem.cjs.js");require("../../containers/Feed/components/CommentInput/modules/index.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("../../context/PowerpackContextInstance.cjs.js");require("../../context/UriContext.cjs.js");require("../../context/DetailsPanelContextInstance.cjs.js");require("../../context/SubtasksModulesContextInstance.cjs.js");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/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("react-redux");require("custom-protocol-check");require("../../containers/ProjectTreeTable/components/GroupSettingsFallback.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");require("../EnumEditor/EnumEditor.styled.cjs.js");require("../../containers/ContextMenu/ContextMenuContext.cjs.js");;/* empty css */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("../../containers/Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.cjs.js");require("../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../containers/Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("remark-emoji");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/ActivityComment/ActivityComment.styled.cjs.js");require("../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../containers/Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../containers/Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../containers/Feed/components/ActivityDate.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../containers/Feed/components/ActivityVersionReview/ActivityVersionReview.styled.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("../../containers/Feed/Feed.styled.cjs.js");require("../../containers/Feed/components/FeedSearchFilter.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/MarkdownWidget.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/widgets/LinksWidget.cjs.js");require("../LinksManager/LinksManager.styled.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("../SearchFilter/filterDates.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/SelectedRowsContext.cjs.js");require("../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");require("../../containers/ProjectTreeTable/components/DeleteConfirmContent.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/TableFooterRow.cjs.js");require("../../containers/EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../containers/Slicer/components/Slicer.cjs.js");require("../../containers/Slicer/context/SlicerContext.cjs.js");require("../../containers/Slicer/hooks/useTableDataBySlice.cjs.js");require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js");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/DetailsPanelMoreMenu/components/ShareDialog.cjs.js");require("../../containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../containers/DetailsPanel/components/SubtasksSearchFilter/SubtasksSearchFilter.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/ViewsMenu/ViewsMenu.cjs.js");require("../../containers/Views/context/ViewsContextInstance.cjs.js");require("../../containers/Views/Views.styled.cjs.js");require("../../containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../containers/ListTable/ListTableRow.cjs.js");require("../../containers/ListTable/ListTable.styled.cjs.js");require("./EntityPanelUploader.styled.cjs.js");require("axios");require("../EntityPath/EntityPath.styled.cjs.js");require("../EntityPath/SegmentProvider.cjs.js");require("../FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../Feedback/FeedbackContextInstance.cjs.js");require("../Feedback/SupportBubble.cjs.js");require("../FileThumbnail/FileThumbnail.cjs.js");require("../LegacyBadge/LegacyBadge.cjs.js");require("../Powerpack/PowerpackButton.cjs.js");require("../Powerpack/FreeTrialLink.cjs.js");require("../Powerpack/PowerpackDialog.styled.cjs.js");require("../Powerpack/CTAButton.cjs.js");require("../Powerpack/RequiredAddonVersion.cjs.js");require("../ProjectTableSettings/ProjectTableSettings.cjs.js");require("../SizeSlider/SizeSlider.cjs.js");require("../ReviewableCard/ReviewableCard.cjs.js");require("../ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../SearchFilter/CustomDateRangeDialog.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.cjs.js");require("../ColumnHeaderMenuUI.cjs.js");require("../ReviewablesList/ReviewablesList.styled.cjs.js");require("../ReviewablesList/ReviewablesUpload.styled.cjs.js");const E=require("../ReviewablesList/useReviewablesUpload.cjs.js"),f="review",g=n=>{if(!n)return"";const u=E.parseFilename(n.name).replace(/\.[^/.]+$/,""),s=h.camelCase(u),o=h.upperFirst(s);return`${f}${o}`},v=({files:n,isOpen:u,onCancel:s,onSubmit:o})=>{const a=g(n?.[0]),c=t.useRef(null),l=t.useRef(!1),[r,d]=t.useState(a);t.useEffect(()=>{d(a),l.current=!1},[a]),t.useEffect(()=>{if(u&&c.current&&r.startsWith(f)&&!l.current){c.current.focus();const e=f.length,j=r.length;c.current.setSelectionRange(e,j),l.current=!0}else u||(l.current=!1)},[u,r]);const p=()=>{r.trim()&&o&&o(r.trim())},x=()=>{d(a),s&&s()},m=r.trim().length>0,R=i.jsxRuntimeExports.jsxs("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[i.jsxRuntimeExports.jsx(q.Button,{variant:"text",onClick:x,children:"Cancel"}),i.jsxRuntimeExports.jsx(q.Button,{variant:"filled",onClick:p,disabled:!m,children:"Upload"})]});return i.jsxRuntimeExports.jsx(q.Dialog,{isOpen:u,onClose:x,header:"Upload Entity",footer:R,size:"sm",children:i.jsxRuntimeExports.jsx("div",{style:{padding:"16px 0"},children:i.jsxRuntimeExports.jsx(q.FormRow,{label:"Product Name",children:i.jsxRuntimeExports.jsx(q.InputText,{ref:c,placeholder:"Enter product name...",value:r,onChange:e=>d(e.target.value),autoFocus:!0,onKeyDown:e=>{e.key==="Enter"&&m?(e.preventDefault(),p()):e.key==="Escape"&&(e.preventDefault(),x())}})})})})};module.exports=v;
|
|
2
2
|
//# sourceMappingURL=EntityPanelUploaderDialog.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPanelUploaderDialog.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploaderDialog.tsx"],"sourcesContent":["// A dialog to ask the user to name their new upload uploaded version (naming the product)\n// by default we can take the file name\n\nimport { Dialog, InputText, Button, FormRow } from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { FC, useState, useEffect, useRef } from 'react'\nimport { parseFilename } from '../ReviewablesList'\n\nconst prefix = 'review'\nconst buildDefaultName = (file?: File | null) => {\n // remove file extension\n // convert to camelCase\n // first letter to uppercase\n // prefix with \"review\"\n if (!file) return ''\n const name = parseFilename(file.name).replace(/\\.[^/.]+$/, '') // remove file extension\n const camelCaseName = camelCase(name)\n const pascalCaseName = upperFirst(camelCaseName)\n return `${prefix}${pascalCaseName}`\n}\n\ninterface EntityPanelUploaderDialogProps {\n files: FileList | null // used to determine the default product name\n isOpen: boolean\n defaultProductName?: string\n onCancel?: () => void\n onSubmit?: (productName: string) => void\n}\n\nconst EntityPanelUploaderDialog: FC<EntityPanelUploaderDialogProps> = ({\n files,\n isOpen,\n onCancel,\n onSubmit,\n}) => {\n // Build default product name from the first file\n const defaultProductName = buildDefaultName(files?.[0])\n const inputRef = useRef<HTMLInputElement>(null)\n const hasSelectedRef = useRef(false)\n\n const [product, setProduct] = useState(defaultProductName)\n\n // Update state when defaultProductName changes\n useEffect(() => {\n setProduct(defaultProductName)\n hasSelectedRef.current = false // Reset selection flag when product name changes\n }, [defaultProductName])\n\n // Select the filename part (excluding \"review\" prefix) when dialog opens - only once\n useEffect(() => {\n if (isOpen && inputRef.current && product.startsWith(prefix) && !hasSelectedRef.current) {\n // Focus the input first\n inputRef.current.focus()\n // Then select just the filename part (after \"review\")\n const selectionStart = prefix.length\n const selectionEnd = product.length\n inputRef.current.setSelectionRange(selectionStart, selectionEnd)\n hasSelectedRef.current = true // Mark as selected to prevent re-selection\n } else if (!isOpen) {\n hasSelectedRef.current = false // Reset when dialog closes\n }\n }, [isOpen, product])\n\n const handleSubmit = () => {\n if (product.trim() && onSubmit) {\n onSubmit(product.trim())\n }\n }\n\n const handleCancel = () => {\n setProduct(defaultProductName)\n if (onCancel) {\n onCancel()\n }\n }\n\n const isValidProduct = product.trim().length > 0\n\n const footer = (\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'flex-end' }}>\n <Button variant=\"text\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button variant=\"filled\" onClick={handleSubmit} disabled={!isValidProduct}>\n Upload\n </Button>\n </div>\n )\n\n return (\n <Dialog isOpen={isOpen} onClose={handleCancel} header=\"Upload Entity\" footer={footer} size=\"sm\">\n <div style={{ padding: '16px 0' }}>\n <FormRow label=\"Product Name\">\n <InputText\n ref={inputRef}\n placeholder=\"Enter product name...\"\n value={product}\n onChange={(e) => setProduct(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValidProduct) {\n e.preventDefault()\n handleSubmit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n handleCancel()\n }\n }}\n />\n </FormRow>\n </div>\n </Dialog>\n )\n}\n\nexport default EntityPanelUploaderDialog\n"],"names":["prefix","buildDefaultName","file","name","parseFilename","camelCaseName","camelCase","pascalCaseName","upperFirst","EntityPanelUploaderDialog","files","isOpen","onCancel","onSubmit","defaultProductName","inputRef","useRef","hasSelectedRef","product","setProduct","useState","useEffect","selectionStart","selectionEnd","handleSubmit","handleCancel","isValidProduct","footer","jsxs","jsx","Button","Dialog","FormRow","InputText"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EntityPanelUploaderDialog.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploaderDialog.tsx"],"sourcesContent":["// A dialog to ask the user to name their new upload uploaded version (naming the product)\n// by default we can take the file name\n\nimport { Dialog, InputText, Button, FormRow } from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { FC, useState, useEffect, useRef } from 'react'\nimport { parseFilename } from '../ReviewablesList'\n\nconst prefix = 'review'\nconst buildDefaultName = (file?: File | null) => {\n // remove file extension\n // convert to camelCase\n // first letter to uppercase\n // prefix with \"review\"\n if (!file) return ''\n const name = parseFilename(file.name).replace(/\\.[^/.]+$/, '') // remove file extension\n const camelCaseName = camelCase(name)\n const pascalCaseName = upperFirst(camelCaseName)\n return `${prefix}${pascalCaseName}`\n}\n\ninterface EntityPanelUploaderDialogProps {\n files: FileList | null // used to determine the default product name\n isOpen: boolean\n defaultProductName?: string\n onCancel?: () => void\n onSubmit?: (productName: string) => void\n}\n\nconst EntityPanelUploaderDialog: FC<EntityPanelUploaderDialogProps> = ({\n files,\n isOpen,\n onCancel,\n onSubmit,\n}) => {\n // Build default product name from the first file\n const defaultProductName = buildDefaultName(files?.[0])\n const inputRef = useRef<HTMLInputElement>(null)\n const hasSelectedRef = useRef(false)\n\n const [product, setProduct] = useState(defaultProductName)\n\n // Update state when defaultProductName changes\n useEffect(() => {\n setProduct(defaultProductName)\n hasSelectedRef.current = false // Reset selection flag when product name changes\n }, [defaultProductName])\n\n // Select the filename part (excluding \"review\" prefix) when dialog opens - only once\n useEffect(() => {\n if (isOpen && inputRef.current && product.startsWith(prefix) && !hasSelectedRef.current) {\n // Focus the input first\n inputRef.current.focus()\n // Then select just the filename part (after \"review\")\n const selectionStart = prefix.length\n const selectionEnd = product.length\n inputRef.current.setSelectionRange(selectionStart, selectionEnd)\n hasSelectedRef.current = true // Mark as selected to prevent re-selection\n } else if (!isOpen) {\n hasSelectedRef.current = false // Reset when dialog closes\n }\n }, [isOpen, product])\n\n const handleSubmit = () => {\n if (product.trim() && onSubmit) {\n onSubmit(product.trim())\n }\n }\n\n const handleCancel = () => {\n setProduct(defaultProductName)\n if (onCancel) {\n onCancel()\n }\n }\n\n const isValidProduct = product.trim().length > 0\n\n const footer = (\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'flex-end' }}>\n <Button variant=\"text\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button variant=\"filled\" onClick={handleSubmit} disabled={!isValidProduct}>\n Upload\n </Button>\n </div>\n )\n\n return (\n <Dialog isOpen={isOpen} onClose={handleCancel} header=\"Upload Entity\" footer={footer} size=\"sm\">\n <div style={{ padding: '16px 0' }}>\n <FormRow label=\"Product Name\">\n <InputText\n ref={inputRef}\n placeholder=\"Enter product name...\"\n value={product}\n onChange={(e) => setProduct(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValidProduct) {\n e.preventDefault()\n handleSubmit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n handleCancel()\n }\n }}\n />\n </FormRow>\n </div>\n </Dialog>\n )\n}\n\nexport default EntityPanelUploaderDialog\n"],"names":["prefix","buildDefaultName","file","name","parseFilename","camelCaseName","camelCase","pascalCaseName","upperFirst","EntityPanelUploaderDialog","files","isOpen","onCancel","onSubmit","defaultProductName","inputRef","useRef","hasSelectedRef","product","setProduct","useState","useEffect","selectionStart","selectionEnd","handleSubmit","handleCancel","isValidProduct","footer","jsxs","jsx","Button","Dialog","FormRow","InputText"],"mappings":"myhBAQMA,EAAS,SACTC,EAAoBC,GAAuB,CAK/C,GAAI,CAACA,EAAM,MAAO,GAClB,MAAMC,EAAOC,EAAAA,cAAcF,EAAK,IAAI,EAAE,QAAQ,YAAa,EAAE,EACvDG,EAAgBC,EAAAA,UAAUH,CAAI,EAC9BI,EAAiBC,EAAAA,WAAWH,CAAa,EAC/C,MAAO,GAAGL,CAAM,GAAGO,CAAc,EACnC,EAUME,EAAgE,CAAC,CACrE,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,CACF,IAAM,CAEJ,MAAMC,EAAqBb,EAAiBS,IAAQ,CAAC,CAAC,EAChDK,EAAWC,EAAAA,OAAyB,IAAI,EACxCC,EAAiBD,EAAAA,OAAO,EAAK,EAE7B,CAACE,EAASC,CAAU,EAAIC,EAAAA,SAASN,CAAkB,EAGzDO,EAAAA,UAAU,IAAM,CACdF,EAAWL,CAAkB,EAC7BG,EAAe,QAAU,EAC3B,EAAG,CAACH,CAAkB,CAAC,EAGvBO,EAAAA,UAAU,IAAM,CACd,GAAIV,GAAUI,EAAS,SAAWG,EAAQ,WAAWlB,CAAM,GAAK,CAACiB,EAAe,QAAS,CAEvFF,EAAS,QAAQ,MAAA,EAEjB,MAAMO,EAAiBtB,EAAO,OACxBuB,EAAeL,EAAQ,OAC7BH,EAAS,QAAQ,kBAAkBO,EAAgBC,CAAY,EAC/DN,EAAe,QAAU,EAC3B,MAAYN,IACVM,EAAe,QAAU,GAE7B,EAAG,CAACN,EAAQO,CAAO,CAAC,EAEpB,MAAMM,EAAe,IAAM,CACrBN,EAAQ,KAAA,GAAUL,GACpBA,EAASK,EAAQ,MAAM,CAE3B,EAEMO,EAAe,IAAM,CACzBN,EAAWL,CAAkB,EACzBF,GACFA,EAAA,CAEJ,EAEMc,EAAiBR,EAAQ,KAAA,EAAO,OAAS,EAEzCS,EACJC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,MAAO,eAAgB,UAAA,EACzD,SAAA,CAAAC,wBAACC,EAAAA,OAAA,CAAO,QAAQ,OAAO,QAASL,EAAc,SAAA,SAE9C,EACAI,EAAAA,kBAAAA,IAACC,EAAAA,QAAO,QAAQ,SAAS,QAASN,EAAc,SAAU,CAACE,EAAgB,SAAA,QAAA,CAE3E,CAAA,EACF,EAGF,OACEG,wBAACE,EAAAA,QAAO,OAAApB,EAAgB,QAASc,EAAc,OAAO,gBAAgB,OAAAE,EAAgB,KAAK,KACzF,iCAAC,MAAA,CAAI,MAAO,CAAE,QAAS,QAAA,EACrB,SAAAE,EAAAA,kBAAAA,IAACG,EAAAA,QAAA,CAAQ,MAAM,eACb,SAAAH,EAAAA,kBAAAA,IAACI,EAAAA,UAAA,CACC,IAAKlB,EACL,YAAY,wBACZ,MAAOG,EACP,SAAW,GAAMC,EAAW,EAAE,OAAO,KAAK,EAC1C,UAAS,GACT,UAAY,GAAM,CACZ,EAAE,MAAQ,SAAWO,GACvB,EAAE,eAAA,EACFF,EAAA,GACS,EAAE,MAAQ,WACnB,EAAE,eAAA,EACFC,EAAA,EAEJ,CAAA,CAAA,CACF,CACF,EACF,EACF,CAEJ"}
|
|
@@ -234,6 +234,7 @@ import "../../containers/Slicer/context/SlicerContext.es.js";
|
|
|
234
234
|
import "../../containers/Slicer/hooks/useTableDataBySlice.es.js";
|
|
235
235
|
import "../../containers/DetailsPanel/DetailsPanel.styled.es.js";
|
|
236
236
|
import "../../containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.es.js";
|
|
237
|
+
import "../../containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js";
|
|
237
238
|
import "../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
|
|
238
239
|
import "../PlayableIcon/PlayableIcon.es.js";
|
|
239
240
|
import "../../containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js";
|
|
@@ -293,7 +294,7 @@ const u = "review", k = (m) => {
|
|
|
293
294
|
if (!m) return "";
|
|
294
295
|
const i = P(m.name).replace(/\.[^/.]+$/, ""), p = D(i), e = R(p);
|
|
295
296
|
return `${u}${e}`;
|
|
296
|
-
},
|
|
297
|
+
}, Zm = ({
|
|
297
298
|
files: m,
|
|
298
299
|
isOpen: i,
|
|
299
300
|
onCancel: p,
|
|
@@ -332,6 +333,6 @@ const u = "review", k = (m) => {
|
|
|
332
333
|
) }) }) });
|
|
333
334
|
};
|
|
334
335
|
export {
|
|
335
|
-
|
|
336
|
+
Zm as default
|
|
336
337
|
};
|
|
337
338
|
//# sourceMappingURL=EntityPanelUploaderDialog.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPanelUploaderDialog.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploaderDialog.tsx"],"sourcesContent":["// A dialog to ask the user to name their new upload uploaded version (naming the product)\n// by default we can take the file name\n\nimport { Dialog, InputText, Button, FormRow } from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { FC, useState, useEffect, useRef } from 'react'\nimport { parseFilename } from '../ReviewablesList'\n\nconst prefix = 'review'\nconst buildDefaultName = (file?: File | null) => {\n // remove file extension\n // convert to camelCase\n // first letter to uppercase\n // prefix with \"review\"\n if (!file) return ''\n const name = parseFilename(file.name).replace(/\\.[^/.]+$/, '') // remove file extension\n const camelCaseName = camelCase(name)\n const pascalCaseName = upperFirst(camelCaseName)\n return `${prefix}${pascalCaseName}`\n}\n\ninterface EntityPanelUploaderDialogProps {\n files: FileList | null // used to determine the default product name\n isOpen: boolean\n defaultProductName?: string\n onCancel?: () => void\n onSubmit?: (productName: string) => void\n}\n\nconst EntityPanelUploaderDialog: FC<EntityPanelUploaderDialogProps> = ({\n files,\n isOpen,\n onCancel,\n onSubmit,\n}) => {\n // Build default product name from the first file\n const defaultProductName = buildDefaultName(files?.[0])\n const inputRef = useRef<HTMLInputElement>(null)\n const hasSelectedRef = useRef(false)\n\n const [product, setProduct] = useState(defaultProductName)\n\n // Update state when defaultProductName changes\n useEffect(() => {\n setProduct(defaultProductName)\n hasSelectedRef.current = false // Reset selection flag when product name changes\n }, [defaultProductName])\n\n // Select the filename part (excluding \"review\" prefix) when dialog opens - only once\n useEffect(() => {\n if (isOpen && inputRef.current && product.startsWith(prefix) && !hasSelectedRef.current) {\n // Focus the input first\n inputRef.current.focus()\n // Then select just the filename part (after \"review\")\n const selectionStart = prefix.length\n const selectionEnd = product.length\n inputRef.current.setSelectionRange(selectionStart, selectionEnd)\n hasSelectedRef.current = true // Mark as selected to prevent re-selection\n } else if (!isOpen) {\n hasSelectedRef.current = false // Reset when dialog closes\n }\n }, [isOpen, product])\n\n const handleSubmit = () => {\n if (product.trim() && onSubmit) {\n onSubmit(product.trim())\n }\n }\n\n const handleCancel = () => {\n setProduct(defaultProductName)\n if (onCancel) {\n onCancel()\n }\n }\n\n const isValidProduct = product.trim().length > 0\n\n const footer = (\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'flex-end' }}>\n <Button variant=\"text\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button variant=\"filled\" onClick={handleSubmit} disabled={!isValidProduct}>\n Upload\n </Button>\n </div>\n )\n\n return (\n <Dialog isOpen={isOpen} onClose={handleCancel} header=\"Upload Entity\" footer={footer} size=\"sm\">\n <div style={{ padding: '16px 0' }}>\n <FormRow label=\"Product Name\">\n <InputText\n ref={inputRef}\n placeholder=\"Enter product name...\"\n value={product}\n onChange={(e) => setProduct(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValidProduct) {\n e.preventDefault()\n handleSubmit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n handleCancel()\n }\n }}\n />\n </FormRow>\n </div>\n </Dialog>\n )\n}\n\nexport default EntityPanelUploaderDialog\n"],"names":["prefix","buildDefaultName","file","name","parseFilename","camelCaseName","camelCase","pascalCaseName","upperFirst","EntityPanelUploaderDialog","files","isOpen","onCancel","onSubmit","defaultProductName","inputRef","useRef","hasSelectedRef","product","setProduct","useState","useEffect","selectionStart","selectionEnd","handleSubmit","handleCancel","isValidProduct","footer","jsxs","jsx","Button","Dialog","FormRow","InputText","e"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EntityPanelUploaderDialog.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploaderDialog.tsx"],"sourcesContent":["// A dialog to ask the user to name their new upload uploaded version (naming the product)\n// by default we can take the file name\n\nimport { Dialog, InputText, Button, FormRow } from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { FC, useState, useEffect, useRef } from 'react'\nimport { parseFilename } from '../ReviewablesList'\n\nconst prefix = 'review'\nconst buildDefaultName = (file?: File | null) => {\n // remove file extension\n // convert to camelCase\n // first letter to uppercase\n // prefix with \"review\"\n if (!file) return ''\n const name = parseFilename(file.name).replace(/\\.[^/.]+$/, '') // remove file extension\n const camelCaseName = camelCase(name)\n const pascalCaseName = upperFirst(camelCaseName)\n return `${prefix}${pascalCaseName}`\n}\n\ninterface EntityPanelUploaderDialogProps {\n files: FileList | null // used to determine the default product name\n isOpen: boolean\n defaultProductName?: string\n onCancel?: () => void\n onSubmit?: (productName: string) => void\n}\n\nconst EntityPanelUploaderDialog: FC<EntityPanelUploaderDialogProps> = ({\n files,\n isOpen,\n onCancel,\n onSubmit,\n}) => {\n // Build default product name from the first file\n const defaultProductName = buildDefaultName(files?.[0])\n const inputRef = useRef<HTMLInputElement>(null)\n const hasSelectedRef = useRef(false)\n\n const [product, setProduct] = useState(defaultProductName)\n\n // Update state when defaultProductName changes\n useEffect(() => {\n setProduct(defaultProductName)\n hasSelectedRef.current = false // Reset selection flag when product name changes\n }, [defaultProductName])\n\n // Select the filename part (excluding \"review\" prefix) when dialog opens - only once\n useEffect(() => {\n if (isOpen && inputRef.current && product.startsWith(prefix) && !hasSelectedRef.current) {\n // Focus the input first\n inputRef.current.focus()\n // Then select just the filename part (after \"review\")\n const selectionStart = prefix.length\n const selectionEnd = product.length\n inputRef.current.setSelectionRange(selectionStart, selectionEnd)\n hasSelectedRef.current = true // Mark as selected to prevent re-selection\n } else if (!isOpen) {\n hasSelectedRef.current = false // Reset when dialog closes\n }\n }, [isOpen, product])\n\n const handleSubmit = () => {\n if (product.trim() && onSubmit) {\n onSubmit(product.trim())\n }\n }\n\n const handleCancel = () => {\n setProduct(defaultProductName)\n if (onCancel) {\n onCancel()\n }\n }\n\n const isValidProduct = product.trim().length > 0\n\n const footer = (\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'flex-end' }}>\n <Button variant=\"text\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button variant=\"filled\" onClick={handleSubmit} disabled={!isValidProduct}>\n Upload\n </Button>\n </div>\n )\n\n return (\n <Dialog isOpen={isOpen} onClose={handleCancel} header=\"Upload Entity\" footer={footer} size=\"sm\">\n <div style={{ padding: '16px 0' }}>\n <FormRow label=\"Product Name\">\n <InputText\n ref={inputRef}\n placeholder=\"Enter product name...\"\n value={product}\n onChange={(e) => setProduct(e.target.value)}\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValidProduct) {\n e.preventDefault()\n handleSubmit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n handleCancel()\n }\n }}\n />\n </FormRow>\n </div>\n </Dialog>\n )\n}\n\nexport default EntityPanelUploaderDialog\n"],"names":["prefix","buildDefaultName","file","name","parseFilename","camelCaseName","camelCase","pascalCaseName","upperFirst","EntityPanelUploaderDialog","files","isOpen","onCancel","onSubmit","defaultProductName","inputRef","useRef","hasSelectedRef","product","setProduct","useState","useEffect","selectionStart","selectionEnd","handleSubmit","handleCancel","isValidProduct","footer","jsxs","jsx","Button","Dialog","FormRow","InputText","e"],"mappings":"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"}
|