@ynput/ayon-frontend-shared 0.2.21 → 0.2.22
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 +6 -5
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +6 -5
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/_virtual/index.cjs4.js +4 -4
- package/dist/_virtual/index.cjs5.js +4 -4
- package/dist/_virtual/index.cjs6.js +2 -2
- package/dist/_virtual/index.cjs7.js +2 -2
- package/dist/_virtual/index.es4.js +4 -4
- package/dist/_virtual/index.es5.js +4 -4
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es7.js +2 -2
- package/dist/api.cjs.js +22 -19
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +8 -5
- package/dist/api.es.js.map +1 -1
- package/dist/index.cjs.js +6 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +6 -5
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.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/src/api/base/client.cjs.js +20 -19
- package/dist/shared/src/api/base/client.cjs.js.map +1 -1
- package/dist/shared/src/api/base/client.es.js +20 -19
- package/dist/shared/src/api/base/client.es.js.map +1 -1
- package/dist/shared/src/api/generated/access.cjs.js +8 -0
- package/dist/shared/src/api/generated/access.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/access.es.js +8 -0
- package/dist/shared/src/api/generated/access.es.js.map +1 -1
- package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/views.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +6 -5
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +6 -5
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +6 -5
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +6 -5
- package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +6 -5
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js +6 -5
- package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/share/share.cjs.js +66 -0
- package/dist/shared/src/api/queries/share/share.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/share/share.es.js +66 -0
- package/dist/shared/src/api/queries/share/share.es.js.map +1 -0
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +6 -5
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +6 -5
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js +5 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.es.js +5 -1
- package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.cjs.js +0 -2
- package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.es.js +0 -2
- package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +6 -5
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +6 -5
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +6 -5
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +6 -5
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +6 -5
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +6 -5
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +6 -5
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js +6 -5
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +6 -5
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +6 -5
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +6 -5
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +6 -5
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +6 -5
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +6 -5
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +6 -5
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +6 -5
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +6 -5
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +6 -5
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +6 -5
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +6 -5
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +6 -5
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +6 -5
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +6 -5
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +6 -5
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +6 -5
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +6 -5
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +6 -5
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +6 -5
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.cjs.js +6 -5
- package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.es.js +6 -5
- package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +6 -5
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +6 -5
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +6 -5
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +6 -5
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +6 -5
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +6 -5
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +6 -5
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +6 -5
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +6 -5
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +6 -5
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +6 -5
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +15 -9
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +15 -9
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +52 -77
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +52 -77
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +14 -8
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +14 -8
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +6 -5
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +6 -5
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +6 -5
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js +17 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js +17 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.cjs.js +4 -2
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.es.js +4 -2
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +12 -7
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +12 -7
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +33 -6
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js +34 -7
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +31 -5
- 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 +31 -5
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +16 -10
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +16 -10
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js +6 -5
- package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +6 -5
- package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +45 -6
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +45 -6
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.cjs.js +3 -40
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.es.js +3 -40
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.es.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +6 -5
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +6 -5
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js +6 -5
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.es.js +6 -5
- package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +6 -5
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +6 -5
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +6 -5
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +6 -5
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +6 -5
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +6 -5
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.cjs.js +6 -5
- package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.es.js +6 -5
- package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +6 -5
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +6 -5
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js +6 -5
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.es.js +6 -5
- package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +6 -5
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +6 -5
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/types/api/generated/access.d.ts +15 -0
- package/dist/types/api/generated/views.d.ts +4 -4
- package/dist/types/api/queries/index.d.ts +6 -5
- package/dist/types/api/queries/share/index.d.ts +1 -0
- package/dist/types/api/queries/share/share.d.ts +150 -0
- package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +10 -15
- package/dist/types/containers/Views/ViewItem/ViewItem.d.ts +1 -0
- package/dist/types/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.d.ts +2 -1
- package/dist/types/containers/Views/context/ViewsContext.d.ts +3 -1
- package/dist/types/containers/Views/hooks/useBuildViewMenuItems.d.ts +2 -1
- package/dist/types/containers/Views/hooks/useViewsMutations.d.ts +7 -0
- package/dist/types/containers/Views/index.d.ts +1 -1
- package/dist/types/containers/Views/utils/getCustomViewsFallback.d.ts +3 -3
- package/package.json +1 -1
- package/dist/types/api/generated/powerPack1.1.1Views.d.ts +0 -25
- package/dist/types/containers/Views/hooks/useOverviewViewSettings.d.ts +0 -0
|
@@ -47,6 +47,7 @@ import "../../api/queries/addons/updateAddons.es.js";
|
|
|
47
47
|
import "../../api/queries/attributes/getAttributes.es.js";
|
|
48
48
|
import "../../api/queries/attributes/updateAttributes.es.js";
|
|
49
49
|
import "../../api/queries/authentication/getAuthentication.es.js";
|
|
50
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
50
51
|
import "../../api/queries/entities/getEntity.es.js";
|
|
51
52
|
import "../../api/queries/entities/getEntityPanel.es.js";
|
|
52
53
|
import "../../api/queries/entities/updateEntity.es.js";
|
|
@@ -55,24 +56,24 @@ import "../../api/queries/entityLists/updateLists.es.js";
|
|
|
55
56
|
import "../../api/queries/entityLists/getListsAttributes.es.js";
|
|
56
57
|
import "../../api/queries/entityLists/updateListsAttributes.es.js";
|
|
57
58
|
import "../../api/queries/folders/getFolders.es.js";
|
|
59
|
+
import "../../api/queries/grouping/getGrouping.es.js";
|
|
58
60
|
import "../../api/queries/overview/getOverview.es.js";
|
|
59
61
|
import "../../api/queries/overview/updateOverview.es.js";
|
|
62
|
+
import "../../api/queries/permissions/getPermissions.es.js";
|
|
63
|
+
import "../../api/queries/products/createProduct.es.js";
|
|
60
64
|
import "../../api/queries/project/getProject.es.js";
|
|
61
65
|
import "../../api/queries/project/updateProject.es.js";
|
|
62
66
|
import { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from "../../api/queries/review/getReview.es.js";
|
|
63
67
|
import { useSortVersionReviewablesMutation, useDeleteReviewableMutation } from "../../api/queries/review/updateReview.es.js";
|
|
68
|
+
import "../../api/queries/share/share.es.js";
|
|
64
69
|
import "../../api/queries/system/getSystem.es.js";
|
|
65
70
|
import "../../api/queries/userDashboard/getUserDashboard.es.js";
|
|
66
71
|
import "../../api/queries/users/getUsers.es.js";
|
|
67
72
|
import "../../api/queries/users/updateUsers.es.js";
|
|
68
|
-
import "../../api/queries/watchers/getWatchers.es.js";
|
|
69
|
-
import "../../api/queries/permissions/getPermissions.es.js";
|
|
70
|
-
import "../../api/queries/grouping/getGrouping.es.js";
|
|
71
73
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
72
|
-
import "../../api/queries/products/createProduct.es.js";
|
|
73
|
-
import "../../api/queries/cloud/cloud.es.js";
|
|
74
74
|
import "../../api/queries/views/getViews.es.js";
|
|
75
75
|
import "../../api/queries/views/updateViews.es.js";
|
|
76
|
+
import "../../api/queries/watchers/getWatchers.es.js";
|
|
76
77
|
import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter, DragOverlay } from "@dnd-kit/core";
|
|
77
78
|
import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, arrayMove } from "@dnd-kit/sortable";
|
|
78
79
|
import "@ynput/ayon-react-components";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewablesList.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["reviewable","jsxs","Fragment","jsx","Styled.LoadingCard","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReviewablesList.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesList.tsx"],"sourcesContent":["import { FC, MouseEvent, useState } from 'react'\n// queries\nimport { useGetReviewablesForVersionQuery, useHasTranscoderQuery } from '@shared/api'\nimport { useDeleteReviewableMutation, useSortVersionReviewablesMutation } from '@shared/api'\n\n// DND\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n UniqueIdentifier,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\n// components\nimport { ReviewableCard, ReviewableProgressCard } from '@shared/components'\nimport SortableReviewableCard from './SortableReviewableCard'\nimport * as Styled from './ReviewablesList.styled'\nimport { toast } from 'react-toastify'\n\n// utils\nimport { getGroupedReviewables } from './getGroupedReviewables'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { confirmDelete } from '@shared/util'\nimport EditReviewableDialog from './EditReviewableDialog'\nimport ReviewableUpload from './ReviewablesUpload'\nimport { useDetailsPanelContext } from '@shared/context'\n\ninterface ReviewablesListProps {\n projectName: string\n versionId: string\n productId: string\n isLoadingVersion: boolean\n scope: string\n}\n\nconst ReviewablesList: FC<ReviewablesListProps> = ({\n projectName,\n versionId,\n productId,\n isLoadingVersion,\n scope,\n}) => {\n const { onOpenViewer, user, viewer, dispatch } = useDetailsPanelContext()\n // returns all reviewables for a product\n const {\n data: versionReviewables,\n isFetching: isFetchingReviewables,\n currentData,\n } = useGetReviewablesForVersionQuery(\n { projectName, versionId: versionId },\n { skip: !versionId || !projectName },\n )\n\n // do we have the premium transcoder?\n const { data: hasTranscoder } = useHasTranscoderQuery(undefined)\n\n // are we currently looking at review? (is it selected in the viewer)\n const reviewableIds = viewer?.reviewableIds || []\n const userName = user.name\n const currentIsUser = user.data?.isUser\n\n // either null or the reviewable id we are editing\n const [editActivityId, setEditActivityId] = useState<null | string>(null)\n\n // dragging activeId\n const [activeId, setActiveId] = useState<null | string>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const reviewables = versionReviewables?.reviewables || []\n const draggingReview = reviewables.find((reviewable) => reviewable.fileId === activeId)\n\n const currentVersionId = currentData?.id\n const queryingNewVersion = versionId !== currentVersionId\n\n const isLoading = (isFetchingReviewables && queryingNewVersion) || isLoadingVersion\n\n const handleReviewableClick = (event: MouseEvent<HTMLDivElement>) => {\n // check are not dragging\n if (activeId) return console.log('Dragging, cannot open review')\n\n // get the reviewable id\n const id = event.currentTarget.id\n if (!id || !productId) return console.error('No reviewable id or product id')\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n console.debug(reviewable)\n console.debug(reviewable?.mediaInfo)\n\n // open the reviewable dialog\n onOpenViewer?.({\n projectName: projectName,\n productId: productId,\n versionIds: [versionId],\n reviewableIds: [id],\n })\n }\n\n const { optimized, unoptimized, incompatible, processing, queued } = getGroupedReviewables(\n reviewables,\n hasTranscoder,\n )\n\n const sortableReviewables = [...optimized, ...unoptimized]\n\n function handleDragStart(event: DragStartEvent) {\n const { active } = event\n\n setActiveId(active.id as string)\n }\n\n const [sortVersionReviewables] = useSortVersionReviewablesMutation()\n\n const handleDragEnd = async (event: DragEndEvent) => {\n const { active, over } = event\n\n if (over?.id && active.id !== over.id) {\n console.log('update review position')\n\n const oldIndex = sortableReviewables.findIndex(\n (reviewable) => reviewable.fileId === active.id,\n )\n const newIndex = sortableReviewables.findIndex((reviewable) => reviewable.fileId === over.id)\n\n // resort the reviewables\n const newReviewables = arrayMove(sortableReviewables, oldIndex, newIndex)\n\n const newOrder = newReviewables.map((reviewable) => reviewable.activityId)\n\n try {\n // update the reviewables\n sortVersionReviewables({\n projectName,\n versionId,\n sortReviewablesRequest: { sort: newOrder },\n }).unwrap()\n } catch (error) {\n toast.error('Error sorting reviewables')\n }\n }\n setActiveId(null)\n }\n\n const overlayModifiers = []\n // hack to make the dnd overlay pos work inside dialog\n if (scope === 'review') {\n overlayModifiers.push((args: any) => ({\n ...args.transform,\n x: args.transform.x - 32,\n y: args.transform.y - 32,\n }))\n }\n\n let incompatibleMessage = ''\n if (!hasTranscoder) {\n incompatibleMessage = `The conversion transcoder is only supported on [**Ynput Cloud**](https://ynput.cloud/subscribe/ayon). Please subscribe or [contact support](https://ynput.io/services/) for more information.`\n } else {\n incompatibleMessage = 'The file is not supported by the transcoder'\n }\n\n const handleDownloadFile = (fileId: string, fileName: string = '') => {\n let url = `/api/projects/${projectName}/files/${fileId}`\n\n // if (codec) url += `.${codec}`\n\n // Create an invisible anchor element\n const a = document.createElement('a')\n a.href = url\n a.download = fileName\n document.body.appendChild(a)\n\n // Trigger a click event on the anchor element\n a.click()\n\n // Remove the anchor element from the document\n document.body.removeChild(a)\n }\n\n const [deleteReviewable] = useDeleteReviewableMutation()\n\n const handleDelete = async (activityId: string, label: string) => {\n // @ts-ignore\n confirmDelete({\n header: 'Delete ' + label,\n message: 'Are you sure you want to delete this reviewable?',\n accept: async () => {\n try {\n await deleteReviewable({ activityId, projectName }).unwrap()\n } catch (error) {\n toast.error('Failed to delete reviewable')\n }\n },\n })\n }\n\n // create the ref and model\n const [ctxMenuShow] = useCreateContextMenu()\n\n const handleContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n // get the reviewable by id\n const id = event.currentTarget.id\n\n if (!id) return\n\n const reviewable = reviewables.find((reviewable) => reviewable.fileId === id)\n\n if (!reviewable) return\n\n const originalFileId = reviewable.createdFrom || reviewable.fileId\n const originalReviewable = reviewables.find(\n (reviewable) => reviewable.fileId === originalFileId,\n )\n\n const items: {\n label: string\n icon: string\n onClick?: () => void\n disabled?: boolean\n danger?: boolean\n }[] = [\n {\n label: 'Download original',\n icon: 'download',\n onClick: () => handleDownloadFile(originalFileId, originalReviewable?.filename),\n disabled: !originalReviewable,\n },\n ]\n\n if (userName === reviewable.author.name || !currentIsUser) {\n items.push({\n label: 'Delete',\n icon: 'delete',\n onClick: () => handleDelete(reviewable.activityId, reviewable.label || reviewable.filename),\n danger: true,\n })\n }\n\n // add author\n items.push({\n label: `Author: ${reviewable.author.fullName || reviewable.author.name}`,\n icon: 'person',\n disabled: true,\n })\n\n ctxMenuShow(event, items)\n }\n\n return (\n <>\n <ReviewableUpload\n projectName={projectName}\n versionId={versionId}\n productId={productId}\n taskId={viewer?.taskId}\n folderId={viewer?.folderId}\n dispatch={dispatch}\n >\n {isLoading ? (\n Array.from({ length: 3 }).map((_, index) => (\n <Styled.LoadingCard key={index} className=\"loading\" />\n ))\n ) : (\n <>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={reviewables.map(({ fileId }) => fileId as UniqueIdentifier)}\n strategy={verticalListSortingStrategy}\n >\n {sortableReviewables.map((reviewable) => (\n <SortableReviewableCard\n key={reviewable.fileId}\n projectName={projectName}\n onClick={handleReviewableClick}\n isSelected={reviewableIds.includes(reviewable.fileId)}\n isDragging={!!activeId}\n onContextMenu={handleContextMenu}\n onEdit={(e) => {\n e.stopPropagation()\n setEditActivityId(reviewable.activityId)\n }}\n {...reviewable}\n />\n ))}\n </SortableContext>\n\n {/* drag overlay */}\n <DragOverlay modifiers={overlayModifiers}>\n {draggingReview ? (\n <ReviewableCard\n {...draggingReview}\n projectName={projectName}\n isDragOverlay\n isDragging\n isSelected={reviewableIds.includes(draggingReview.fileId)}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n {processing.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'processing'}\n progress={reviewable.processing?.progress}\n fileId={reviewable.fileId}\n />\n ))}\n\n {queued.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'queued'}\n fileId={reviewable.fileId}\n />\n ))}\n\n {incompatible.map((reviewable) => (\n <ReviewableProgressCard\n key={reviewable.fileId}\n name={reviewable.filename}\n type={'unsupported'}\n tooltip={incompatibleMessage}\n src={`/api/projects/${projectName}/files/${reviewable.fileId}/thumbnail`}\n onContextMenu={handleContextMenu}\n fileId={reviewable.fileId}\n />\n ))}\n </>\n )}\n </ReviewableUpload>\n\n {editActivityId && (\n <EditReviewableDialog\n isOpen\n onClose={() => setEditActivityId(null)}\n label={\n reviewables.find((reviewable) => reviewable.activityId === editActivityId)?.label || ''\n }\n projectName={projectName}\n versionId={versionId}\n activityId={editActivityId}\n />\n )}\n </>\n )\n}\n\nexport default ReviewablesList\n"],"names":["reviewable","jsxs","Fragment","jsx","Styled.LoadingCard","_a"],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ require("../../api/queries/addons/updateAddons.cjs.js");
|
|
|
55
55
|
require("../../api/queries/attributes/getAttributes.cjs.js");
|
|
56
56
|
require("../../api/queries/attributes/updateAttributes.cjs.js");
|
|
57
57
|
require("../../api/queries/authentication/getAuthentication.cjs.js");
|
|
58
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
58
59
|
require("../../api/queries/entities/getEntity.cjs.js");
|
|
59
60
|
require("../../api/queries/entities/getEntityPanel.cjs.js");
|
|
60
61
|
require("../../api/queries/entities/updateEntity.cjs.js");
|
|
@@ -63,24 +64,24 @@ require("../../api/queries/entityLists/updateLists.cjs.js");
|
|
|
63
64
|
require("../../api/queries/entityLists/getListsAttributes.cjs.js");
|
|
64
65
|
require("../../api/queries/entityLists/updateListsAttributes.cjs.js");
|
|
65
66
|
require("../../api/queries/folders/getFolders.cjs.js");
|
|
67
|
+
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
66
68
|
require("../../api/queries/overview/getOverview.cjs.js");
|
|
67
69
|
require("../../api/queries/overview/updateOverview.cjs.js");
|
|
70
|
+
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
71
|
+
require("../../api/queries/products/createProduct.cjs.js");
|
|
68
72
|
require("../../api/queries/project/getProject.cjs.js");
|
|
69
73
|
require("../../api/queries/project/updateProject.cjs.js");
|
|
70
74
|
require("../../api/queries/review/getReview.cjs.js");
|
|
71
75
|
require("../../api/queries/review/updateReview.cjs.js");
|
|
76
|
+
require("../../api/queries/share/share.cjs.js");
|
|
72
77
|
require("../../api/queries/system/getSystem.cjs.js");
|
|
73
78
|
require("../../api/queries/userDashboard/getUserDashboard.cjs.js");
|
|
74
79
|
require("../../api/queries/users/getUsers.cjs.js");
|
|
75
80
|
require("../../api/queries/users/updateUsers.cjs.js");
|
|
76
|
-
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
77
|
-
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
78
|
-
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
79
81
|
require("../../api/queries/versions/updateVersions.cjs.js");
|
|
80
|
-
require("../../api/queries/products/createProduct.cjs.js");
|
|
81
|
-
require("../../api/queries/cloud/cloud.cjs.js");
|
|
82
82
|
require("../../api/queries/views/getViews.cjs.js");
|
|
83
83
|
require("../../api/queries/views/updateViews.cjs.js");
|
|
84
|
+
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
84
85
|
require("@dnd-kit/core");
|
|
85
86
|
require("@dnd-kit/sortable");
|
|
86
87
|
require("./ReviewablesList.styled.cjs.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\n// components\nimport { ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\nimport { useReviewablesUpload } from './useReviewablesUpload'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n\n // Use the custom hook for upload logic\n const {\n handleFileUpload: uploadFiles,\n handleRemoveUpload,\n uploading,\n } = useReviewablesUpload({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n })\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n uploadFiles(files)\n }\n }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n // Use the hook's upload function for actual uploading\n await uploadFiles(files)\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["useState","useReviewablesUpload","useEffect","jsxs","Fragment","jsx","Styled.ReviewablesList","ReviewableProgressCard","Styled.Upload","Styled.Dropzone","Icon"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\n// components\nimport { ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\nimport { useReviewablesUpload } from './useReviewablesUpload'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n\n // Use the custom hook for upload logic\n const {\n handleFileUpload: uploadFiles,\n handleRemoveUpload,\n uploading,\n } = useReviewablesUpload({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n })\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n uploadFiles(files)\n }\n }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n // Use the hook's upload function for actual uploading\n await uploadFiles(files)\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["useState","useReviewablesUpload","useEffect","jsxs","Fragment","jsx","Styled.ReviewablesList","ReviewableProgressCard","Styled.Upload","Styled.Dropzone","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,mBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;;AAEJ,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAS,KAAK;AAGpD,QAAA;AAAA,IACJ,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,MACEC,0CAAqB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAGK,QAAA,YAAY,QAAQ,SAAS;AAGnCC,QAAAA,UAAU,MAAM;AACd,QAAI,aAAa,aAAa,aAAa,SAAS,KAAK,iBAAiB;AACxE,YAAM,QAAQ,aAAa,IAAI,CAAC,SAAS,KAAK,IAAI;AAErC,mBAAA,QAAQ,CAAC,SAAS;AAC7B,YAAI,KAAK,SAAS;AACZ,cAAA,gBAAgB,KAAK,OAAO;AAAA,QAAA;AAAA,MAClC,CACD;AACD,sBAAgB,CAAA,CAAE;AAElB,kBAAY,KAAK;AAAA,IAAA;AAAA,EACnB,GACC,CAAC,WAAW,WAAW,aAAa,QAAQ,aAAa,eAAe,CAAC;AAGtE,QAAA,cAAc,CAAC,SAAe;AAC3B,WAAA,KAAK,KAAK,WAAW,QAAQ;AAAA,EACtC;AAGM,QAAA,kBAAkB,CAAC,UAAkB;AAClC,WAAA,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1B;AAAA,MACA,SAAS,YAAY,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI;AAAA,IAAA,EACzD;AAAA,EACJ;AAEM,QAAA,mBAAmB,OAAO,UAA6B;AACrD,UAAA,YAAY,MAAM,KAAK,KAAK;AAGlC,iDAAe;AAGX,QAAA,CAAC,aAAa,CAAC,WAAW;AAC5B,UAAI,iBAAiB;AACH,wBAAA,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,gBAAgB,SAAS,CAAC,CAAC;AAAA,MAAA;AAEpE;AAAA,IAAA;AAIF,UAAM,YAAY,KAAK;AAAA,EACzB;AAEM,QAAA,oBAAoB,CAAC,UAAyC;AAC5D,UAAA,QAAQ,MAAM,OAAO;AAE3B,QAAI,OAAO;AACT,uBAAiB,KAAK;AAAA,IAAA;AAAA,EAE1B;AAGM,QAAA,iBAAiB,CAAC,UAAqC;AAC3D,UAAM,eAAe;AACrB,sBAAkB,KAAK;AAEjB,UAAA,QAAQ,MAAM,aAAa;AAEjC,QAAI,OAAO;AACT,uBAAiB,KAAK;AAAA,IAAA;AAAA,EAE1B;AACM,QAAA,gBACJ,YAAY,UAAU,EAAE,UAAU,SAAS,UAAU,SAAS,WAAW,SAAS,IAAI,CAAC;AAEzF,SAEIC,2BAAA,kBAAA,KAAAC,uCAAA,EAAA,UAAA;AAAA,IAAAC,2BAAA,kBAAA;AAAA,MAACC,yBAAO;AAAA,MAAP;AAAA,QACC,WAAW,KAAK,WAAW,SAAS,EAAE,UAAU,gBAAgB;AAAA,QAC/D,GAAG;AAAA,QACJ,aAAa,MAAM,kBAAkB,IAAI;AAAA,QAEzC,UACGH,2BAAA,kBAAA,KAAAC,uCAAA,EAAA,UAAA;AAAA,UAAA;AAAA,UAEA,CAAC,cACA,6CAAc,IAAI,CAAC,SACjBC,2BAAA,kBAAA;AAAA,YAACE,uBAAA;AAAA,YAAA;AAAA,cAEC,MAAM,KAAK,KAAK;AAAA,cAChB,MAAM,KAAK,KAAK;AAAA,cAChB,KAAK,KAAK;AAAA,cACV,MAAM;AAAA,cACN,UAAU,MAAM;AACd,oBAAI,iBAAiB;AACnB,kCAAgB,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA,gBAAA;AAAA,cAC9E;AAAA,YACF;AAAA,YATK,KAAK,KAAK;AAAA,UAAA;AAAA,UAapB,eACC,eAAU,SAAS,MAAnB,mBAAsB,IAAI,CAAC,SACzBF,2BAAA,kBAAA;AAAA,YAACE,uBAAA;AAAA,YAAA;AAAA,cAEE,GAAG;AAAA,cACJ,MAAM;AAAA,cACN,UAAU,MAAM,mBAAmB,KAAK,IAAI;AAAA,YAAA;AAAA,YAHvC,KAAK;AAAA,UAAA;AAAA,UAQhBJ,2BAAA,kBAAA;AAAA,YAACK,yBAAO;AAAA,YAAP;AAAA,cACC,IAAG;AAAA,cACH,WAAW,KAAK,UAAU,OAAO;AAAA,cACjC,OAAO;AAAA,cACN,GAAG,yBAAI;AAAA,cAER,UAAA;AAAA,gBAAAH,2BAAAA,kBAAAA,IAAC,UAAK,UAAuB,0BAAA,CAAA;AAAA,iEAC5B,SAAM,EAAA,MAAK,QAAO,UAAQ,MAAC,UAAU,kBAAmB,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC3D,EACF,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,IAEC,kBACCF,2BAAA,kBAAA;AAAA,MAACM,yBAAO;AAAA,MAAP;AAAA,QACC,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,QACpC,aAAa,MAAM,kBAAkB,KAAK;AAAA,QAC1C,QAAQ;AAAA,QACP,GAAG,yBAAI;AAAA,QAER,UAAA;AAAA,UAACJ,2BAAAA,kBAAAA,IAAAK,oBAAA,MAAA,EAAK,MAAK,SAAS,CAAA;AAAA,UACpBL,2BAAAA,kBAAAA,IAAC,UAAK,UAAiB,oBAAA,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACzB,GAEJ;AAEJ;;;"}
|
|
@@ -53,6 +53,7 @@ import "../../api/queries/addons/updateAddons.es.js";
|
|
|
53
53
|
import "../../api/queries/attributes/getAttributes.es.js";
|
|
54
54
|
import "../../api/queries/attributes/updateAttributes.es.js";
|
|
55
55
|
import "../../api/queries/authentication/getAuthentication.es.js";
|
|
56
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
56
57
|
import "../../api/queries/entities/getEntity.es.js";
|
|
57
58
|
import "../../api/queries/entities/getEntityPanel.es.js";
|
|
58
59
|
import "../../api/queries/entities/updateEntity.es.js";
|
|
@@ -61,24 +62,24 @@ import "../../api/queries/entityLists/updateLists.es.js";
|
|
|
61
62
|
import "../../api/queries/entityLists/getListsAttributes.es.js";
|
|
62
63
|
import "../../api/queries/entityLists/updateListsAttributes.es.js";
|
|
63
64
|
import "../../api/queries/folders/getFolders.es.js";
|
|
65
|
+
import "../../api/queries/grouping/getGrouping.es.js";
|
|
64
66
|
import "../../api/queries/overview/getOverview.es.js";
|
|
65
67
|
import "../../api/queries/overview/updateOverview.es.js";
|
|
68
|
+
import "../../api/queries/permissions/getPermissions.es.js";
|
|
69
|
+
import "../../api/queries/products/createProduct.es.js";
|
|
66
70
|
import "../../api/queries/project/getProject.es.js";
|
|
67
71
|
import "../../api/queries/project/updateProject.es.js";
|
|
68
72
|
import "../../api/queries/review/getReview.es.js";
|
|
69
73
|
import "../../api/queries/review/updateReview.es.js";
|
|
74
|
+
import "../../api/queries/share/share.es.js";
|
|
70
75
|
import "../../api/queries/system/getSystem.es.js";
|
|
71
76
|
import "../../api/queries/userDashboard/getUserDashboard.es.js";
|
|
72
77
|
import "../../api/queries/users/getUsers.es.js";
|
|
73
78
|
import "../../api/queries/users/updateUsers.es.js";
|
|
74
|
-
import "../../api/queries/watchers/getWatchers.es.js";
|
|
75
|
-
import "../../api/queries/permissions/getPermissions.es.js";
|
|
76
|
-
import "../../api/queries/grouping/getGrouping.es.js";
|
|
77
79
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
78
|
-
import "../../api/queries/products/createProduct.es.js";
|
|
79
|
-
import "../../api/queries/cloud/cloud.es.js";
|
|
80
80
|
import "../../api/queries/views/getViews.es.js";
|
|
81
81
|
import "../../api/queries/views/updateViews.es.js";
|
|
82
|
+
import "../../api/queries/watchers/getWatchers.es.js";
|
|
82
83
|
import "@dnd-kit/core";
|
|
83
84
|
import "@dnd-kit/sortable";
|
|
84
85
|
import "./ReviewablesList.styled.es.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewablesUpload.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\n// components\nimport { ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\nimport { useReviewablesUpload } from './useReviewablesUpload'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n\n // Use the custom hook for upload logic\n const {\n handleFileUpload: uploadFiles,\n handleRemoveUpload,\n uploading,\n } = useReviewablesUpload({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n })\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n uploadFiles(files)\n }\n }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n // Use the hook's upload function for actual uploading\n await uploadFiles(files)\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["jsxs","Fragment","jsx","Styled.ReviewablesList","Styled.Upload","Styled.Dropzone"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReviewablesUpload.es.js","sources":["../../../../../src/components/ReviewablesList/ReviewablesUpload.tsx"],"sourcesContent":["import { FC, useState, DragEvent, ChangeEvent, useEffect } from 'react'\nimport clsx from 'clsx'\n\nimport { Icon } from '@ynput/ayon-react-components'\n\n// components\nimport { ReviewableProgressCard } from '@shared/components'\nimport * as Styled from './ReviewablesUpload.styled'\nimport { useReviewablesUpload } from './useReviewablesUpload'\n\nexport interface ReviewableUploadProps extends React.HTMLProps<HTMLDivElement> {\n projectName: string | null\n taskId?: string | null\n folderId?: string | null\n versionId?: string | null\n productId?: string | null\n variant?: 'normal' | 'large'\n dispatch: any\n pendingFiles?: Array<{ file: File; preview?: string }>\n setPendingFiles?: React.Dispatch<React.SetStateAction<Array<{ file: File; preview?: string }>>>\n onUpload?: () => void\n onFilesAdded?: (files: File[]) => void\n children?: any\n pt?: {\n upload?: React.HTMLProps<HTMLDivElement>\n dropzone?: React.HTMLProps<HTMLDivElement>\n }\n}\n\nexport const ReviewableUpload: FC<ReviewableUploadProps> = ({\n projectName,\n taskId,\n folderId,\n versionId,\n productId,\n onUpload,\n onFilesAdded,\n children,\n dispatch,\n variant = 'normal',\n pendingFiles = [],\n setPendingFiles,\n className,\n pt,\n ...props\n}) => {\n // are we dragging a file over?\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n\n // Use the custom hook for upload logic\n const {\n handleFileUpload: uploadFiles,\n handleRemoveUpload,\n uploading,\n } = useReviewablesUpload({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n })\n\n // Check if we can upload files straight away\n const canUpload = Boolean(versionId)\n\n // Monitor changes to versionId to trigger pending uploads\n useEffect(() => {\n if (canUpload && versionId && pendingFiles.length > 0 && setPendingFiles) {\n const files = pendingFiles.map((item) => item.file)\n // Clear pending files for this version and revoke object URLs\n pendingFiles.forEach((item) => {\n if (item.preview) {\n URL.revokeObjectURL(item.preview)\n }\n })\n setPendingFiles([])\n // Start upload\n uploadFiles(files)\n }\n }, [canUpload, versionId, pendingFiles.length, uploadFiles, setPendingFiles])\n\n // Helper function to check if file is an image\n const isImageFile = (file: File) => {\n return file.type.startsWith('image/')\n }\n\n // Helper function to create file items with previews\n const createFileItems = (files: File[]) => {\n return files.map((file) => ({\n file,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }))\n }\n\n const handleFileUpload = async (files: FileList | File[]) => {\n const fileArray = Array.from(files)\n\n // Notify parent about files being added for version extraction\n onFilesAdded?.(fileArray)\n\n // If we can't upload yet, store files as pending\n if (!canUpload || !versionId) {\n if (setPendingFiles) {\n setPendingFiles((prev) => [...prev, ...createFileItems(fileArray)])\n }\n return\n }\n\n // Use the hook's upload function for actual uploading\n await uploadFiles(files)\n }\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n\n // when the user drops a file\n const handleFileDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsDraggingFile(false)\n\n const files = event.dataTransfer.files\n\n if (files) {\n handleFileUpload(files)\n }\n }\n const variantStyles =\n variant === 'large' ? { minWidth: '360px', maxWidth: '480px', alignSelf: 'center' } : {}\n\n return (\n <>\n <Styled.ReviewablesList\n className={clsx(className, variant, { dragging: isDraggingFile })}\n {...props}\n onDragEnter={() => setIsDraggingFile(true)}\n >\n <>\n {children}\n {/* pending files */}\n {!canUpload &&\n pendingFiles?.map((item) => (\n <ReviewableProgressCard\n key={item.file.name}\n name={item.file.name}\n size={item.file.size}\n src={item.preview}\n type={'waiting'}\n onRemove={() => {\n if (setPendingFiles) {\n setPendingFiles((prev) => prev.filter((f) => f.file.name !== item.file.name))\n }\n }}\n />\n ))}\n {/* uploading items */}\n {versionId &&\n uploading[versionId]?.map((file) => (\n <ReviewableProgressCard\n key={file.name}\n {...file}\n type={'upload'}\n onRemove={() => handleRemoveUpload(file.name)}\n />\n ))}\n\n {/* upload button */}\n <Styled.Upload\n id=\"upload\"\n className={clsx('upload', variant)}\n style={variantStyles}\n {...pt?.upload}\n >\n <span>Drop or click to upload</span>\n <input type=\"file\" multiple onChange={handleInputChange} />\n </Styled.Upload>\n </>\n </Styled.ReviewablesList>\n\n {isDraggingFile && (\n <Styled.Dropzone\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => setIsDraggingFile(false)}\n onDrop={handleFileDrop}\n {...pt?.dropzone}\n >\n <Icon icon=\"upload\" />\n <span>Upload reviewable</span>\n </Styled.Dropzone>\n )}\n </>\n )\n}\n\nexport default ReviewableUpload\n"],"names":["jsxs","Fragment","jsx","Styled.ReviewablesList","Styled.Upload","Styled.Dropzone"],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ require("../../api/queries/addons/updateAddons.cjs.js");
|
|
|
55
55
|
require("../../api/queries/attributes/getAttributes.cjs.js");
|
|
56
56
|
require("../../api/queries/attributes/updateAttributes.cjs.js");
|
|
57
57
|
require("../../api/queries/authentication/getAuthentication.cjs.js");
|
|
58
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
58
59
|
require("../../api/queries/entities/getEntity.cjs.js");
|
|
59
60
|
require("../../api/queries/entities/getEntityPanel.cjs.js");
|
|
60
61
|
require("../../api/queries/entities/updateEntity.cjs.js");
|
|
@@ -63,24 +64,24 @@ require("../../api/queries/entityLists/updateLists.cjs.js");
|
|
|
63
64
|
require("../../api/queries/entityLists/getListsAttributes.cjs.js");
|
|
64
65
|
require("../../api/queries/entityLists/updateListsAttributes.cjs.js");
|
|
65
66
|
require("../../api/queries/folders/getFolders.cjs.js");
|
|
67
|
+
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
66
68
|
require("../../api/queries/overview/getOverview.cjs.js");
|
|
67
69
|
require("../../api/queries/overview/updateOverview.cjs.js");
|
|
70
|
+
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
71
|
+
require("../../api/queries/products/createProduct.cjs.js");
|
|
68
72
|
require("../../api/queries/project/getProject.cjs.js");
|
|
69
73
|
require("../../api/queries/project/updateProject.cjs.js");
|
|
70
74
|
require("../../api/queries/review/getReview.cjs.js");
|
|
71
75
|
require("../../api/queries/review/updateReview.cjs.js");
|
|
76
|
+
require("../../api/queries/share/share.cjs.js");
|
|
72
77
|
require("../../api/queries/system/getSystem.cjs.js");
|
|
73
78
|
require("../../api/queries/userDashboard/getUserDashboard.cjs.js");
|
|
74
79
|
require("../../api/queries/users/getUsers.cjs.js");
|
|
75
80
|
require("../../api/queries/users/updateUsers.cjs.js");
|
|
76
|
-
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
77
|
-
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
78
|
-
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
79
81
|
require("../../api/queries/versions/updateVersions.cjs.js");
|
|
80
|
-
require("../../api/queries/products/createProduct.cjs.js");
|
|
81
|
-
require("../../api/queries/cloud/cloud.cjs.js");
|
|
82
82
|
require("../../api/queries/views/getViews.cjs.js");
|
|
83
83
|
require("../../api/queries/views/updateViews.cjs.js");
|
|
84
|
+
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
84
85
|
require("react");
|
|
85
86
|
require("@dnd-kit/core");
|
|
86
87
|
require("./ReviewablesList.styled.cjs.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableReviewableCard.cjs.js","sources":["../../../../../src/components/ReviewablesList/SortableReviewableCard.tsx"],"sourcesContent":["import { FC } from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ReviewableCardProps, ReviewableCard } from '@shared/components'\n\ntype SortableReviewableCardProps = ReviewableCardProps\n\nconst SortableReviewableCard: FC<SortableReviewableCardProps> = ({ ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: props.fileId,\n animateLayoutChanges: () => false,\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div ref={setNodeRef} style={style}>\n <ReviewableCard\n isDropPlaceholder={isDragging}\n dragProps={{ ...attributes, ...listeners }}\n disabled={props.sortingDisabled}\n {...props}\n />\n </div>\n )\n}\n\nexport default SortableReviewableCard\n"],"names":["useSortable","CSS","jsx","ReviewableCard"],"mappings":"
|
|
1
|
+
{"version":3,"file":"SortableReviewableCard.cjs.js","sources":["../../../../../src/components/ReviewablesList/SortableReviewableCard.tsx"],"sourcesContent":["import { FC } from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ReviewableCardProps, ReviewableCard } from '@shared/components'\n\ntype SortableReviewableCardProps = ReviewableCardProps\n\nconst SortableReviewableCard: FC<SortableReviewableCardProps> = ({ ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: props.fileId,\n animateLayoutChanges: () => false,\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div ref={setNodeRef} style={style}>\n <ReviewableCard\n isDropPlaceholder={isDragging}\n dragProps={{ ...attributes, ...listeners }}\n disabled={props.sortingDisabled}\n {...props}\n />\n </div>\n )\n}\n\nexport default SortableReviewableCard\n"],"names":["useSortable","CSS","jsx","ReviewableCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,yBAA0D,CAAC,EAAE,GAAG,YAAY;AAC1E,QAAA,EAAE,YAAY,WAAW,YAAY,WAAW,YAAY,eAAeA,qBAAY;AAAA,IAC3F,IAAI,MAAM;AAAA,IACV,sBAAsB,MAAM;AAAA,EAAA,CAC7B;AAED,QAAM,QAAQ;AAAA,IACZ,WAAWC,cAAA,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C;AAAA,EACF;AAEA,SACGC,2BAAAA,kBAAAA,IAAA,OAAA,EAAI,KAAK,YAAY,OACpB,UAAAA,2BAAA,kBAAA;AAAA,IAACC,eAAA;AAAA,IAAA;AAAA,MACC,mBAAmB;AAAA,MACnB,WAAW,EAAE,GAAG,YAAY,GAAG,UAAU;AAAA,MACzC,UAAU,MAAM;AAAA,MACf,GAAG;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;;"}
|
|
@@ -54,6 +54,7 @@ import "../../api/queries/addons/updateAddons.es.js";
|
|
|
54
54
|
import "../../api/queries/attributes/getAttributes.es.js";
|
|
55
55
|
import "../../api/queries/attributes/updateAttributes.es.js";
|
|
56
56
|
import "../../api/queries/authentication/getAuthentication.es.js";
|
|
57
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
57
58
|
import "../../api/queries/entities/getEntity.es.js";
|
|
58
59
|
import "../../api/queries/entities/getEntityPanel.es.js";
|
|
59
60
|
import "../../api/queries/entities/updateEntity.es.js";
|
|
@@ -62,24 +63,24 @@ import "../../api/queries/entityLists/updateLists.es.js";
|
|
|
62
63
|
import "../../api/queries/entityLists/getListsAttributes.es.js";
|
|
63
64
|
import "../../api/queries/entityLists/updateListsAttributes.es.js";
|
|
64
65
|
import "../../api/queries/folders/getFolders.es.js";
|
|
66
|
+
import "../../api/queries/grouping/getGrouping.es.js";
|
|
65
67
|
import "../../api/queries/overview/getOverview.es.js";
|
|
66
68
|
import "../../api/queries/overview/updateOverview.es.js";
|
|
69
|
+
import "../../api/queries/permissions/getPermissions.es.js";
|
|
70
|
+
import "../../api/queries/products/createProduct.es.js";
|
|
67
71
|
import "../../api/queries/project/getProject.es.js";
|
|
68
72
|
import "../../api/queries/project/updateProject.es.js";
|
|
69
73
|
import "../../api/queries/review/getReview.es.js";
|
|
70
74
|
import "../../api/queries/review/updateReview.es.js";
|
|
75
|
+
import "../../api/queries/share/share.es.js";
|
|
71
76
|
import "../../api/queries/system/getSystem.es.js";
|
|
72
77
|
import "../../api/queries/userDashboard/getUserDashboard.es.js";
|
|
73
78
|
import "../../api/queries/users/getUsers.es.js";
|
|
74
79
|
import "../../api/queries/users/updateUsers.es.js";
|
|
75
|
-
import "../../api/queries/watchers/getWatchers.es.js";
|
|
76
|
-
import "../../api/queries/permissions/getPermissions.es.js";
|
|
77
|
-
import "../../api/queries/grouping/getGrouping.es.js";
|
|
78
80
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
79
|
-
import "../../api/queries/products/createProduct.es.js";
|
|
80
|
-
import "../../api/queries/cloud/cloud.es.js";
|
|
81
81
|
import "../../api/queries/views/getViews.es.js";
|
|
82
82
|
import "../../api/queries/views/updateViews.es.js";
|
|
83
|
+
import "../../api/queries/watchers/getWatchers.es.js";
|
|
83
84
|
import "react";
|
|
84
85
|
import "@dnd-kit/core";
|
|
85
86
|
import "./ReviewablesList.styled.es.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableReviewableCard.es.js","sources":["../../../../../src/components/ReviewablesList/SortableReviewableCard.tsx"],"sourcesContent":["import { FC } from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ReviewableCardProps, ReviewableCard } from '@shared/components'\n\ntype SortableReviewableCardProps = ReviewableCardProps\n\nconst SortableReviewableCard: FC<SortableReviewableCardProps> = ({ ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: props.fileId,\n animateLayoutChanges: () => false,\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div ref={setNodeRef} style={style}>\n <ReviewableCard\n isDropPlaceholder={isDragging}\n dragProps={{ ...attributes, ...listeners }}\n disabled={props.sortingDisabled}\n {...props}\n />\n </div>\n )\n}\n\nexport default SortableReviewableCard\n"],"names":["jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"SortableReviewableCard.es.js","sources":["../../../../../src/components/ReviewablesList/SortableReviewableCard.tsx"],"sourcesContent":["import { FC } from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ReviewableCardProps, ReviewableCard } from '@shared/components'\n\ntype SortableReviewableCardProps = ReviewableCardProps\n\nconst SortableReviewableCard: FC<SortableReviewableCardProps> = ({ ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: props.fileId,\n animateLayoutChanges: () => false,\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div ref={setNodeRef} style={style}>\n <ReviewableCard\n isDropPlaceholder={isDragging}\n dragProps={{ ...attributes, ...listeners }}\n disabled={props.sortingDisabled}\n {...props}\n />\n </div>\n )\n}\n\nexport default SortableReviewableCard\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,yBAA0D,CAAC,EAAE,GAAG,YAAY;AAC1E,QAAA,EAAE,YAAY,WAAW,YAAY,WAAW,YAAY,eAAe,YAAY;AAAA,IAC3F,IAAI,MAAM;AAAA,IACV,sBAAsB,MAAM;AAAA,EAAA,CAC7B;AAED,QAAM,QAAQ;AAAA,IACZ,WAAW,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C;AAAA,EACF;AAEA,SACGA,kCAAAA,IAAA,OAAA,EAAI,KAAK,YAAY,OACpB,UAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,mBAAmB;AAAA,MACnB,WAAW,EAAE,GAAG,YAAY,GAAG,UAAU;AAAA,MACzC,UAAU,MAAM;AAAA,MACf,GAAG;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;"}
|
|
@@ -50,6 +50,7 @@ require("../../api/queries/addons/updateAddons.cjs.js");
|
|
|
50
50
|
require("../../api/queries/attributes/getAttributes.cjs.js");
|
|
51
51
|
require("../../api/queries/attributes/updateAttributes.cjs.js");
|
|
52
52
|
require("../../api/queries/authentication/getAuthentication.cjs.js");
|
|
53
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
53
54
|
require("../../api/queries/entities/getEntity.cjs.js");
|
|
54
55
|
require("../../api/queries/entities/getEntityPanel.cjs.js");
|
|
55
56
|
require("../../api/queries/entities/updateEntity.cjs.js");
|
|
@@ -58,24 +59,24 @@ require("../../api/queries/entityLists/updateLists.cjs.js");
|
|
|
58
59
|
require("../../api/queries/entityLists/getListsAttributes.cjs.js");
|
|
59
60
|
require("../../api/queries/entityLists/updateListsAttributes.cjs.js");
|
|
60
61
|
require("../../api/queries/folders/getFolders.cjs.js");
|
|
62
|
+
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
61
63
|
require("../../api/queries/overview/getOverview.cjs.js");
|
|
62
64
|
require("../../api/queries/overview/updateOverview.cjs.js");
|
|
65
|
+
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
66
|
+
require("../../api/queries/products/createProduct.cjs.js");
|
|
63
67
|
require("../../api/queries/project/getProject.cjs.js");
|
|
64
68
|
require("../../api/queries/project/updateProject.cjs.js");
|
|
65
69
|
require("../../api/queries/review/getReview.cjs.js");
|
|
66
70
|
const updateReview = require("../../api/queries/review/updateReview.cjs.js");
|
|
71
|
+
require("../../api/queries/share/share.cjs.js");
|
|
67
72
|
require("../../api/queries/system/getSystem.cjs.js");
|
|
68
73
|
require("../../api/queries/userDashboard/getUserDashboard.cjs.js");
|
|
69
74
|
require("../../api/queries/users/getUsers.cjs.js");
|
|
70
75
|
require("../../api/queries/users/updateUsers.cjs.js");
|
|
71
|
-
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
72
|
-
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
73
|
-
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
74
76
|
require("../../api/queries/versions/updateVersions.cjs.js");
|
|
75
|
-
require("../../api/queries/products/createProduct.cjs.js");
|
|
76
|
-
require("../../api/queries/cloud/cloud.cjs.js");
|
|
77
77
|
require("../../api/queries/views/getViews.cjs.js");
|
|
78
78
|
require("../../api/queries/views/updateViews.cjs.js");
|
|
79
|
+
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
79
80
|
const useReviewablesUpload = ({
|
|
80
81
|
projectName,
|
|
81
82
|
versionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/useReviewablesUpload.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport axios, { AxiosProgressEvent, AxiosResponse } from 'axios'\nimport { toast } from 'react-toastify'\n\nimport api, { reviewablesQueries } from '@shared/api'\nimport type { UploadReviewableApiResponse } from '@shared/api'\nimport type { ReviewableProgress } from '@shared/components'\n\nexport interface UseReviewablesUploadProps {\n projectName: string | null\n versionId?: string | null\n taskId?: string | null\n folderId?: string | null\n productId?: string | null\n dispatch: any\n onUpload?: () => void\n onProgress?: (progress: number) => void\n}\n\nexport interface UploadHandlers {\n handleFileUpload: (files: FileList | File[], versionId?: string) => Promise<void>\n handleRemoveUpload: (name: string) => void\n uploading: { [key: string]: ReviewableProgress[] }\n}\n\nexport const useReviewablesUpload = ({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n onProgress,\n}: UseReviewablesUploadProps): UploadHandlers => {\n const [uploading, setUploads] = useState<{ [key: string]: ReviewableProgress[] }>({})\n\n const handleRemoveUpload = useCallback(\n (name: string) => {\n if (!versionId) return\n setUploads((uploads) => ({\n ...uploads,\n [versionId]: uploads[versionId]?.filter((upload) => upload.name !== name) || [],\n }))\n },\n [versionId],\n )\n\n const handleFileUpload = useCallback(\n async (files: FileList | File[], fileVersionId?: string) => {\n // use the passed versionId or the one from props\n const reviewableVersionId = fileVersionId || versionId\n if (!reviewableVersionId || !projectName) return\n\n const fileArray = Array.from(files)\n\n const uploadingFiles = fileArray.map((file) => ({\n name: file.name,\n size: file.size,\n progress: 0,\n }))\n\n const newUploadsForVersion = [...(uploading[reviewableVersionId] || []), ...uploadingFiles]\n\n setUploads({ ...uploading, [reviewableVersionId]: newUploadsForVersion })\n\n const successHandler = (file: File) => (response: AxiosResponse) => {\n if (!reviewableVersionId) return\n // Handle successful upload\n console.log(`Upload successful for ${file.name}`)\n // patch the new data into the reviewables cache\n const data = response.data as UploadReviewableApiResponse\n\n if (!projectName) return\n\n dispatch(\n // @ts-ignore\n reviewablesQueries.util.updateQueryData(\n 'getReviewablesForVersion',\n { projectName, versionId: reviewableVersionId },\n (draft) => {\n if (!draft.reviewables) {\n draft.reviewables = []\n }\n // @ts-ignore\n draft.reviewables.push(data)\n },\n ),\n )\n\n // also invalidate the viewer cache\n productId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: productId }]))\n dispatch(api.util.invalidateTags([{ type: 'viewer', id: reviewableVersionId }]))\n folderId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: folderId }]))\n taskId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: taskId }]))\n // remove the file from the list\n handleRemoveUpload(file.name)\n }\n\n const errorHandler = (file: File) => (error: any) => {\n if (!reviewableVersionId) return\n console.error(`Upload failed for ${file.name}: ${error}`)\n toast.error(`Failed to upload file: ${file.name}`)\n // add error to the file\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n error: error.response.data.detail || error.message,\n }\n })\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n const progressHandler = (file: File) => {\n if (!reviewableVersionId) return () => {}\n return (progressEvent: AxiosProgressEvent) =>\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n progress: progressEvent.total\n ? Math.round((progressEvent.loaded / progressEvent.total) * 100)\n : 0,\n }\n })\n\n // Calculate overall progress across all files\n const totalProgress = updatedUploads.reduce(\n (sum, upload) => sum + (upload.progress || 0),\n 0,\n )\n const overallProgress = Math.round(totalProgress / updatedUploads.length)\n\n // Call the onProgress callback with overall progress\n onProgress?.(overallProgress)\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n try {\n // upload the files\n const uploadPromises = fileArray.map((file) => {\n const autoLabel = file.name.split('.').slice(0, -1).join('.')\n\n const url = `/api/projects/${projectName}/versions/${reviewableVersionId}/reviewables?label=${autoLabel}`\n const headers = { 'content-type': file.type, 'x-file-name': file.name }\n return axios\n .post(url, file, { headers, onUploadProgress: progressHandler(file) })\n .then(successHandler(file))\n .catch(errorHandler(file))\n })\n\n // Wait for all uploads to complete\n await Promise.all(uploadPromises)\n\n // Callback after all uploads are finished\n onUpload && onUpload()\n } catch (error) {\n // something went wrong with everything, EEEEK!\n console.error(error)\n toast.error('Failed to upload file/s')\n }\n },\n [\n versionId,\n projectName,\n uploading,\n dispatch,\n productId,\n folderId,\n taskId,\n handleRemoveUpload,\n onUpload,\n onProgress,\n ],\n )\n\n return {\n handleFileUpload,\n handleRemoveUpload,\n uploading,\n }\n}\n"],"names":["useState","useCallback","reviewablesQueries","api","toast"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useReviewablesUpload.cjs.js","sources":["../../../../../src/components/ReviewablesList/useReviewablesUpload.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport axios, { AxiosProgressEvent, AxiosResponse } from 'axios'\nimport { toast } from 'react-toastify'\n\nimport api, { reviewablesQueries } from '@shared/api'\nimport type { UploadReviewableApiResponse } from '@shared/api'\nimport type { ReviewableProgress } from '@shared/components'\n\nexport interface UseReviewablesUploadProps {\n projectName: string | null\n versionId?: string | null\n taskId?: string | null\n folderId?: string | null\n productId?: string | null\n dispatch: any\n onUpload?: () => void\n onProgress?: (progress: number) => void\n}\n\nexport interface UploadHandlers {\n handleFileUpload: (files: FileList | File[], versionId?: string) => Promise<void>\n handleRemoveUpload: (name: string) => void\n uploading: { [key: string]: ReviewableProgress[] }\n}\n\nexport const useReviewablesUpload = ({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n onProgress,\n}: UseReviewablesUploadProps): UploadHandlers => {\n const [uploading, setUploads] = useState<{ [key: string]: ReviewableProgress[] }>({})\n\n const handleRemoveUpload = useCallback(\n (name: string) => {\n if (!versionId) return\n setUploads((uploads) => ({\n ...uploads,\n [versionId]: uploads[versionId]?.filter((upload) => upload.name !== name) || [],\n }))\n },\n [versionId],\n )\n\n const handleFileUpload = useCallback(\n async (files: FileList | File[], fileVersionId?: string) => {\n // use the passed versionId or the one from props\n const reviewableVersionId = fileVersionId || versionId\n if (!reviewableVersionId || !projectName) return\n\n const fileArray = Array.from(files)\n\n const uploadingFiles = fileArray.map((file) => ({\n name: file.name,\n size: file.size,\n progress: 0,\n }))\n\n const newUploadsForVersion = [...(uploading[reviewableVersionId] || []), ...uploadingFiles]\n\n setUploads({ ...uploading, [reviewableVersionId]: newUploadsForVersion })\n\n const successHandler = (file: File) => (response: AxiosResponse) => {\n if (!reviewableVersionId) return\n // Handle successful upload\n console.log(`Upload successful for ${file.name}`)\n // patch the new data into the reviewables cache\n const data = response.data as UploadReviewableApiResponse\n\n if (!projectName) return\n\n dispatch(\n // @ts-ignore\n reviewablesQueries.util.updateQueryData(\n 'getReviewablesForVersion',\n { projectName, versionId: reviewableVersionId },\n (draft) => {\n if (!draft.reviewables) {\n draft.reviewables = []\n }\n // @ts-ignore\n draft.reviewables.push(data)\n },\n ),\n )\n\n // also invalidate the viewer cache\n productId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: productId }]))\n dispatch(api.util.invalidateTags([{ type: 'viewer', id: reviewableVersionId }]))\n folderId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: folderId }]))\n taskId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: taskId }]))\n // remove the file from the list\n handleRemoveUpload(file.name)\n }\n\n const errorHandler = (file: File) => (error: any) => {\n if (!reviewableVersionId) return\n console.error(`Upload failed for ${file.name}: ${error}`)\n toast.error(`Failed to upload file: ${file.name}`)\n // add error to the file\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n error: error.response.data.detail || error.message,\n }\n })\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n const progressHandler = (file: File) => {\n if (!reviewableVersionId) return () => {}\n return (progressEvent: AxiosProgressEvent) =>\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n progress: progressEvent.total\n ? Math.round((progressEvent.loaded / progressEvent.total) * 100)\n : 0,\n }\n })\n\n // Calculate overall progress across all files\n const totalProgress = updatedUploads.reduce(\n (sum, upload) => sum + (upload.progress || 0),\n 0,\n )\n const overallProgress = Math.round(totalProgress / updatedUploads.length)\n\n // Call the onProgress callback with overall progress\n onProgress?.(overallProgress)\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n try {\n // upload the files\n const uploadPromises = fileArray.map((file) => {\n const autoLabel = file.name.split('.').slice(0, -1).join('.')\n\n const url = `/api/projects/${projectName}/versions/${reviewableVersionId}/reviewables?label=${autoLabel}`\n const headers = { 'content-type': file.type, 'x-file-name': file.name }\n return axios\n .post(url, file, { headers, onUploadProgress: progressHandler(file) })\n .then(successHandler(file))\n .catch(errorHandler(file))\n })\n\n // Wait for all uploads to complete\n await Promise.all(uploadPromises)\n\n // Callback after all uploads are finished\n onUpload && onUpload()\n } catch (error) {\n // something went wrong with everything, EEEEK!\n console.error(error)\n toast.error('Failed to upload file/s')\n }\n },\n [\n versionId,\n projectName,\n uploading,\n dispatch,\n productId,\n folderId,\n taskId,\n handleRemoveUpload,\n onUpload,\n onProgress,\n ],\n )\n\n return {\n handleFileUpload,\n handleRemoveUpload,\n uploading,\n }\n}\n"],"names":["useState","useCallback","reviewablesQueries","api","toast"],"mappings":"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"}
|
|
@@ -48,6 +48,7 @@ import "../../api/queries/addons/updateAddons.es.js";
|
|
|
48
48
|
import "../../api/queries/attributes/getAttributes.es.js";
|
|
49
49
|
import "../../api/queries/attributes/updateAttributes.es.js";
|
|
50
50
|
import "../../api/queries/authentication/getAuthentication.es.js";
|
|
51
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
51
52
|
import "../../api/queries/entities/getEntity.es.js";
|
|
52
53
|
import "../../api/queries/entities/getEntityPanel.es.js";
|
|
53
54
|
import "../../api/queries/entities/updateEntity.es.js";
|
|
@@ -56,24 +57,24 @@ import "../../api/queries/entityLists/updateLists.es.js";
|
|
|
56
57
|
import "../../api/queries/entityLists/getListsAttributes.es.js";
|
|
57
58
|
import "../../api/queries/entityLists/updateListsAttributes.es.js";
|
|
58
59
|
import "../../api/queries/folders/getFolders.es.js";
|
|
60
|
+
import "../../api/queries/grouping/getGrouping.es.js";
|
|
59
61
|
import "../../api/queries/overview/getOverview.es.js";
|
|
60
62
|
import "../../api/queries/overview/updateOverview.es.js";
|
|
63
|
+
import "../../api/queries/permissions/getPermissions.es.js";
|
|
64
|
+
import "../../api/queries/products/createProduct.es.js";
|
|
61
65
|
import "../../api/queries/project/getProject.es.js";
|
|
62
66
|
import "../../api/queries/project/updateProject.es.js";
|
|
63
67
|
import "../../api/queries/review/getReview.es.js";
|
|
64
68
|
import { reviewablesQueries as enhancedEndpoints } from "../../api/queries/review/updateReview.es.js";
|
|
69
|
+
import "../../api/queries/share/share.es.js";
|
|
65
70
|
import "../../api/queries/system/getSystem.es.js";
|
|
66
71
|
import "../../api/queries/userDashboard/getUserDashboard.es.js";
|
|
67
72
|
import "../../api/queries/users/getUsers.es.js";
|
|
68
73
|
import "../../api/queries/users/updateUsers.es.js";
|
|
69
|
-
import "../../api/queries/watchers/getWatchers.es.js";
|
|
70
|
-
import "../../api/queries/permissions/getPermissions.es.js";
|
|
71
|
-
import "../../api/queries/grouping/getGrouping.es.js";
|
|
72
74
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
73
|
-
import "../../api/queries/products/createProduct.es.js";
|
|
74
|
-
import "../../api/queries/cloud/cloud.es.js";
|
|
75
75
|
import "../../api/queries/views/getViews.es.js";
|
|
76
76
|
import "../../api/queries/views/updateViews.es.js";
|
|
77
|
+
import "../../api/queries/watchers/getWatchers.es.js";
|
|
77
78
|
const useReviewablesUpload = ({
|
|
78
79
|
projectName,
|
|
79
80
|
versionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReviewablesUpload.es.js","sources":["../../../../../src/components/ReviewablesList/useReviewablesUpload.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport axios, { AxiosProgressEvent, AxiosResponse } from 'axios'\nimport { toast } from 'react-toastify'\n\nimport api, { reviewablesQueries } from '@shared/api'\nimport type { UploadReviewableApiResponse } from '@shared/api'\nimport type { ReviewableProgress } from '@shared/components'\n\nexport interface UseReviewablesUploadProps {\n projectName: string | null\n versionId?: string | null\n taskId?: string | null\n folderId?: string | null\n productId?: string | null\n dispatch: any\n onUpload?: () => void\n onProgress?: (progress: number) => void\n}\n\nexport interface UploadHandlers {\n handleFileUpload: (files: FileList | File[], versionId?: string) => Promise<void>\n handleRemoveUpload: (name: string) => void\n uploading: { [key: string]: ReviewableProgress[] }\n}\n\nexport const useReviewablesUpload = ({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n onProgress,\n}: UseReviewablesUploadProps): UploadHandlers => {\n const [uploading, setUploads] = useState<{ [key: string]: ReviewableProgress[] }>({})\n\n const handleRemoveUpload = useCallback(\n (name: string) => {\n if (!versionId) return\n setUploads((uploads) => ({\n ...uploads,\n [versionId]: uploads[versionId]?.filter((upload) => upload.name !== name) || [],\n }))\n },\n [versionId],\n )\n\n const handleFileUpload = useCallback(\n async (files: FileList | File[], fileVersionId?: string) => {\n // use the passed versionId or the one from props\n const reviewableVersionId = fileVersionId || versionId\n if (!reviewableVersionId || !projectName) return\n\n const fileArray = Array.from(files)\n\n const uploadingFiles = fileArray.map((file) => ({\n name: file.name,\n size: file.size,\n progress: 0,\n }))\n\n const newUploadsForVersion = [...(uploading[reviewableVersionId] || []), ...uploadingFiles]\n\n setUploads({ ...uploading, [reviewableVersionId]: newUploadsForVersion })\n\n const successHandler = (file: File) => (response: AxiosResponse) => {\n if (!reviewableVersionId) return\n // Handle successful upload\n console.log(`Upload successful for ${file.name}`)\n // patch the new data into the reviewables cache\n const data = response.data as UploadReviewableApiResponse\n\n if (!projectName) return\n\n dispatch(\n // @ts-ignore\n reviewablesQueries.util.updateQueryData(\n 'getReviewablesForVersion',\n { projectName, versionId: reviewableVersionId },\n (draft) => {\n if (!draft.reviewables) {\n draft.reviewables = []\n }\n // @ts-ignore\n draft.reviewables.push(data)\n },\n ),\n )\n\n // also invalidate the viewer cache\n productId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: productId }]))\n dispatch(api.util.invalidateTags([{ type: 'viewer', id: reviewableVersionId }]))\n folderId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: folderId }]))\n taskId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: taskId }]))\n // remove the file from the list\n handleRemoveUpload(file.name)\n }\n\n const errorHandler = (file: File) => (error: any) => {\n if (!reviewableVersionId) return\n console.error(`Upload failed for ${file.name}: ${error}`)\n toast.error(`Failed to upload file: ${file.name}`)\n // add error to the file\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n error: error.response.data.detail || error.message,\n }\n })\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n const progressHandler = (file: File) => {\n if (!reviewableVersionId) return () => {}\n return (progressEvent: AxiosProgressEvent) =>\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n progress: progressEvent.total\n ? Math.round((progressEvent.loaded / progressEvent.total) * 100)\n : 0,\n }\n })\n\n // Calculate overall progress across all files\n const totalProgress = updatedUploads.reduce(\n (sum, upload) => sum + (upload.progress || 0),\n 0,\n )\n const overallProgress = Math.round(totalProgress / updatedUploads.length)\n\n // Call the onProgress callback with overall progress\n onProgress?.(overallProgress)\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n try {\n // upload the files\n const uploadPromises = fileArray.map((file) => {\n const autoLabel = file.name.split('.').slice(0, -1).join('.')\n\n const url = `/api/projects/${projectName}/versions/${reviewableVersionId}/reviewables?label=${autoLabel}`\n const headers = { 'content-type': file.type, 'x-file-name': file.name }\n return axios\n .post(url, file, { headers, onUploadProgress: progressHandler(file) })\n .then(successHandler(file))\n .catch(errorHandler(file))\n })\n\n // Wait for all uploads to complete\n await Promise.all(uploadPromises)\n\n // Callback after all uploads are finished\n onUpload && onUpload()\n } catch (error) {\n // something went wrong with everything, EEEEK!\n console.error(error)\n toast.error('Failed to upload file/s')\n }\n },\n [\n versionId,\n projectName,\n uploading,\n dispatch,\n productId,\n folderId,\n taskId,\n handleRemoveUpload,\n onUpload,\n onProgress,\n ],\n )\n\n return {\n handleFileUpload,\n handleRemoveUpload,\n uploading,\n }\n}\n"],"names":["reviewablesQueries"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useReviewablesUpload.es.js","sources":["../../../../../src/components/ReviewablesList/useReviewablesUpload.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport axios, { AxiosProgressEvent, AxiosResponse } from 'axios'\nimport { toast } from 'react-toastify'\n\nimport api, { reviewablesQueries } from '@shared/api'\nimport type { UploadReviewableApiResponse } from '@shared/api'\nimport type { ReviewableProgress } from '@shared/components'\n\nexport interface UseReviewablesUploadProps {\n projectName: string | null\n versionId?: string | null\n taskId?: string | null\n folderId?: string | null\n productId?: string | null\n dispatch: any\n onUpload?: () => void\n onProgress?: (progress: number) => void\n}\n\nexport interface UploadHandlers {\n handleFileUpload: (files: FileList | File[], versionId?: string) => Promise<void>\n handleRemoveUpload: (name: string) => void\n uploading: { [key: string]: ReviewableProgress[] }\n}\n\nexport const useReviewablesUpload = ({\n projectName,\n versionId,\n taskId,\n folderId,\n productId,\n dispatch,\n onUpload,\n onProgress,\n}: UseReviewablesUploadProps): UploadHandlers => {\n const [uploading, setUploads] = useState<{ [key: string]: ReviewableProgress[] }>({})\n\n const handleRemoveUpload = useCallback(\n (name: string) => {\n if (!versionId) return\n setUploads((uploads) => ({\n ...uploads,\n [versionId]: uploads[versionId]?.filter((upload) => upload.name !== name) || [],\n }))\n },\n [versionId],\n )\n\n const handleFileUpload = useCallback(\n async (files: FileList | File[], fileVersionId?: string) => {\n // use the passed versionId or the one from props\n const reviewableVersionId = fileVersionId || versionId\n if (!reviewableVersionId || !projectName) return\n\n const fileArray = Array.from(files)\n\n const uploadingFiles = fileArray.map((file) => ({\n name: file.name,\n size: file.size,\n progress: 0,\n }))\n\n const newUploadsForVersion = [...(uploading[reviewableVersionId] || []), ...uploadingFiles]\n\n setUploads({ ...uploading, [reviewableVersionId]: newUploadsForVersion })\n\n const successHandler = (file: File) => (response: AxiosResponse) => {\n if (!reviewableVersionId) return\n // Handle successful upload\n console.log(`Upload successful for ${file.name}`)\n // patch the new data into the reviewables cache\n const data = response.data as UploadReviewableApiResponse\n\n if (!projectName) return\n\n dispatch(\n // @ts-ignore\n reviewablesQueries.util.updateQueryData(\n 'getReviewablesForVersion',\n { projectName, versionId: reviewableVersionId },\n (draft) => {\n if (!draft.reviewables) {\n draft.reviewables = []\n }\n // @ts-ignore\n draft.reviewables.push(data)\n },\n ),\n )\n\n // also invalidate the viewer cache\n productId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: productId }]))\n dispatch(api.util.invalidateTags([{ type: 'viewer', id: reviewableVersionId }]))\n folderId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: folderId }]))\n taskId && dispatch(api.util.invalidateTags([{ type: 'viewer', id: taskId }]))\n // remove the file from the list\n handleRemoveUpload(file.name)\n }\n\n const errorHandler = (file: File) => (error: any) => {\n if (!reviewableVersionId) return\n console.error(`Upload failed for ${file.name}: ${error}`)\n toast.error(`Failed to upload file: ${file.name}`)\n // add error to the file\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n error: error.response.data.detail || error.message,\n }\n })\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n const progressHandler = (file: File) => {\n if (!reviewableVersionId) return () => {}\n return (progressEvent: AxiosProgressEvent) =>\n setUploads((uploads) => {\n // current uploads for reviewableVersionId\n const currentUploads = uploads[reviewableVersionId] || []\n const updatedUploads = currentUploads.map((upload) => {\n if (upload.name !== file.name) return upload\n return {\n ...upload,\n progress: progressEvent.total\n ? Math.round((progressEvent.loaded / progressEvent.total) * 100)\n : 0,\n }\n })\n\n // Calculate overall progress across all files\n const totalProgress = updatedUploads.reduce(\n (sum, upload) => sum + (upload.progress || 0),\n 0,\n )\n const overallProgress = Math.round(totalProgress / updatedUploads.length)\n\n // Call the onProgress callback with overall progress\n onProgress?.(overallProgress)\n\n // update state\n return {\n ...uploads,\n [reviewableVersionId]: updatedUploads,\n }\n })\n }\n\n try {\n // upload the files\n const uploadPromises = fileArray.map((file) => {\n const autoLabel = file.name.split('.').slice(0, -1).join('.')\n\n const url = `/api/projects/${projectName}/versions/${reviewableVersionId}/reviewables?label=${autoLabel}`\n const headers = { 'content-type': file.type, 'x-file-name': file.name }\n return axios\n .post(url, file, { headers, onUploadProgress: progressHandler(file) })\n .then(successHandler(file))\n .catch(errorHandler(file))\n })\n\n // Wait for all uploads to complete\n await Promise.all(uploadPromises)\n\n // Callback after all uploads are finished\n onUpload && onUpload()\n } catch (error) {\n // something went wrong with everything, EEEEK!\n console.error(error)\n toast.error('Failed to upload file/s')\n }\n },\n [\n versionId,\n projectName,\n uploading,\n dispatch,\n productId,\n folderId,\n taskId,\n handleRemoveUpload,\n onUpload,\n onProgress,\n ],\n )\n\n return {\n handleFileUpload,\n handleRemoveUpload,\n uploading,\n }\n}\n"],"names":["reviewablesQueries"],"mappings":"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"}
|