@ynput/ayon-frontend-shared 0.2.19 → 0.2.20
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 +10 -0
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +10 -0
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/api.cjs.js +16 -0
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +17 -1
- package/dist/api.es.js.map +1 -1
- package/dist/components.cjs.js +22 -0
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +23 -1
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +10 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +10 -0
- package/dist/index.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.cjs.js +5 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.cjs.js.map +1 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.es.js +6 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.es.js.map +1 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.cjs.js +2 -2
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.es.js +2 -2
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.cjs.js +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.es.js +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.cjs.js +58 -41
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.es.js +57 -41
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.cjs.js +20 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.cjs.js.map +1 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.es.js +21 -0
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.es.js.map +1 -0
- package/dist/shared/src/api/base/client.cjs.js +2 -1
- package/dist/shared/src/api/base/client.cjs.js.map +1 -1
- package/dist/shared/src/api/base/client.es.js +2 -1
- package/dist/shared/src/api/base/client.es.js.map +1 -1
- package/dist/shared/src/api/generated/actions.cjs.js +6 -1
- package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/actions.es.js +6 -1
- package/dist/shared/src/api/generated/actions.es.js.map +1 -1
- package/dist/shared/src/api/generated/activityFeed.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/activityFeed.es.js.map +1 -1
- package/dist/shared/src/api/generated/addons.cjs.js +2 -1
- package/dist/shared/src/api/generated/addons.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/addons.es.js +2 -1
- package/dist/shared/src/api/generated/addons.es.js.map +1 -1
- package/dist/shared/src/api/generated/anatomy.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/anatomy.es.js.map +1 -1
- package/dist/shared/src/api/generated/authentication.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/authentication.es.js.map +1 -1
- package/dist/shared/src/api/generated/configuration.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/configuration.es.js.map +1 -1
- package/dist/shared/src/api/generated/links.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/links.es.js.map +1 -1
- package/dist/shared/src/api/generated/onboarding.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/onboarding.es.js.map +1 -1
- package/dist/shared/src/api/generated/operations.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/operations.es.js.map +1 -1
- package/dist/shared/src/api/generated/projects.cjs.js +0 -8
- package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/projects.es.js +0 -8
- package/dist/shared/src/api/generated/projects.es.js.map +1 -1
- package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/system.es.js.map +1 -1
- package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
- package/dist/shared/src/api/generated/views.cjs.js +53 -0
- package/dist/shared/src/api/generated/views.cjs.js.map +1 -0
- package/dist/shared/src/api/generated/views.es.js +53 -0
- package/dist/shared/src/api/generated/views.es.js.map +1 -0
- package/dist/shared/src/api/queries/actions/getActions.cjs.js +1 -0
- package/dist/shared/src/api/queries/actions/getActions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/actions/getActions.es.js +1 -0
- package/dist/shared/src/api/queries/actions/getActions.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getActivities.cjs.js +1 -0
- package/dist/shared/src/api/queries/activities/getActivities.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getActivities.es.js +1 -0
- package/dist/shared/src/api/queries/activities/getActivities.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getMentions.cjs.js +1 -0
- package/dist/shared/src/api/queries/activities/getMentions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/getMentions.es.js +1 -0
- package/dist/shared/src/api/queries/activities/getMentions.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/updateReaction.cjs.js +1 -0
- package/dist/shared/src/api/queries/activities/updateReaction.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/updateReaction.es.js +1 -0
- package/dist/shared/src/api/queries/activities/updateReaction.es.js.map +1 -1
- package/dist/shared/src/api/queries/addons/getAddons.cjs.js +1 -0
- package/dist/shared/src/api/queries/addons/getAddons.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/addons/getAddons.es.js +1 -0
- package/dist/shared/src/api/queries/addons/getAddons.es.js.map +1 -1
- package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js +1 -0
- package/dist/shared/src/api/queries/attributes/getAttributes.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/attributes/getAttributes.es.js +1 -0
- package/dist/shared/src/api/queries/attributes/getAttributes.es.js.map +1 -1
- package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js +1 -0
- package/dist/shared/src/api/queries/authentication/getAuthentication.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/authentication/getAuthentication.es.js +1 -0
- package/dist/shared/src/api/queries/authentication/getAuthentication.es.js.map +1 -1
- package/dist/shared/src/api/queries/cloud/cloud.cjs.js +67 -0
- package/dist/shared/src/api/queries/cloud/cloud.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/cloud/cloud.es.js +67 -0
- package/dist/shared/src/api/queries/cloud/cloud.es.js.map +1 -0
- package/dist/shared/src/api/queries/entities/getEntity.cjs.js +1 -0
- package/dist/shared/src/api/queries/entities/getEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntity.es.js +1 -0
- package/dist/shared/src/api/queries/entities/getEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -0
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +1 -0
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +4 -0
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +4 -0
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +11 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +11 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -0
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +1 -0
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js +1 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js +1 -0
- package/dist/shared/src/api/queries/entityLists/getListsAttributes.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js +1 -0
- package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -0
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.es.js +1 -0
- package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +1 -0
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js +1 -0
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -0
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +1 -0
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +17 -2
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js +17 -2
- package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js +1 -0
- package/dist/shared/src/api/queries/permissions/getPermissions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/permissions/getPermissions.es.js +1 -0
- package/dist/shared/src/api/queries/permissions/getPermissions.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js +1 -0
- package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.es.js +1 -0
- package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -0
- package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.es.js +1 -0
- package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -0
- package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.es.js +1 -0
- package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
- package/dist/shared/src/api/queries/review/updateReview.cjs.js +1 -0
- package/dist/shared/src/api/queries/review/updateReview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/review/updateReview.es.js +1 -0
- package/dist/shared/src/api/queries/review/updateReview.es.js.map +1 -1
- package/dist/shared/src/api/queries/system/getSystem.cjs.js +1 -0
- package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/system/getSystem.es.js +1 -0
- package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -0
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +1 -0
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +4 -0
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +4 -0
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/updateUsers.cjs.js +1 -0
- package/dist/shared/src/api/queries/users/updateUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/updateUsers.es.js +1 -0
- package/dist/shared/src/api/queries/users/updateUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/updateVersions.cjs.js +1 -0
- package/dist/shared/src/api/queries/versions/updateVersions.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/updateVersions.es.js +1 -0
- package/dist/shared/src/api/queries/versions/updateVersions.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js +72 -0
- package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/views/getViews.es.js +72 -0
- package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -0
- package/dist/shared/src/api/queries/views/updateViews.cjs.js +33 -0
- package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/views/updateViews.es.js +33 -0
- package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -0
- package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js +1 -0
- package/dist/shared/src/api/queries/watchers/getWatchers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/watchers/getWatchers.es.js +1 -0
- package/dist/shared/src/api/queries/watchers/getWatchers.es.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +4 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +4 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +12 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +12 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +10 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +10 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +369 -0
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -0
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js +369 -0
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -0
- package/dist/shared/src/components/Feedback/SupportBubble.cjs.js +48 -0
- package/dist/shared/src/components/Feedback/SupportBubble.cjs.js.map +1 -0
- package/dist/shared/src/components/Feedback/SupportBubble.es.js +48 -0
- package/dist/shared/src/components/Feedback/SupportBubble.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/CTAButton.cjs.js +10 -0
- package/dist/shared/src/components/Powerpack/CTAButton.cjs.js.map +1 -0
- package/dist/shared/src/components/Powerpack/CTAButton.es.js +10 -0
- package/dist/shared/src/components/Powerpack/CTAButton.es.js.map +1 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +229 -28
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +230 -29
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +3 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +3 -0
- package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +4 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +4 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +179 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +179 -0
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +4 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +4 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +10 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +10 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +10 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +10 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +10 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +10 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +4 -0
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +4 -0
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +4 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +4 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +10 -0
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +10 -0
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +10 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +10 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +4 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +4 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/components/Views/ViewForm/ViewForm.cjs.js +164 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.es.js +164 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.cjs.js +71 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.es.js +71 -0
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.cjs.js +189 -0
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.es.js +189 -0
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.cjs.js +36 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.es.js +36 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.cjs.js +63 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.es.js +63 -0
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.es.js.map +1 -0
- package/dist/shared/src/components/Views/Views.cjs.js +21 -0
- package/dist/shared/src/components/Views/Views.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/Views.es.js +21 -0
- package/dist/shared/src/components/Views/Views.es.js.map +1 -0
- package/dist/shared/src/components/Views/Views.styled.cjs.js +44 -0
- package/dist/shared/src/components/Views/Views.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/Views.styled.es.js +44 -0
- package/dist/shared/src/components/Views/Views.styled.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.cjs.js +32 -0
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.es.js +32 -0
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.cjs.js +31 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.es.js +31 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.styled.cjs.js +33 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.styled.es.js +33 -0
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.styled.es.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +132 -0
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +132 -0
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -0
- package/dist/shared/src/components/Views/context/ViewsContext.cjs.js +145 -0
- package/dist/shared/src/components/Views/context/ViewsContext.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/context/ViewsContext.es.js +145 -0
- package/dist/shared/src/components/Views/context/ViewsContext.es.js.map +1 -0
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.cjs.js +160 -0
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.es.js +160 -0
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.es.js.map +1 -0
- package/dist/shared/src/components/Views/utils/generatePersonalView.cjs.js +13 -0
- package/dist/shared/src/components/Views/utils/generatePersonalView.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/utils/generatePersonalView.es.js +13 -0
- package/dist/shared/src/components/Views/utils/generatePersonalView.es.js.map +1 -0
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.cjs.js +8 -0
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.es.js +8 -0
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.es.js.map +1 -0
- package/dist/shared/src/components/Views/utils/portalUtils.cjs.js +11 -0
- package/dist/shared/src/components/Views/utils/portalUtils.cjs.js.map +1 -0
- package/dist/shared/src/components/Views/utils/portalUtils.es.js +11 -0
- package/dist/shared/src/components/Views/utils/portalUtils.es.js.map +1 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js +4 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.es.js +4 -0
- package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +10 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +10 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +4 -0
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +4 -0
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +10 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +10 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +10 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +4 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +4 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +4 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +4 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +4 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +4 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +4 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +4 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +10 -2
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +10 -2
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +10 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +10 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +4 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +10 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +10 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js +4 -0
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.es.js +4 -0
- package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +4 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +4 -0
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +9 -0
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +9 -0
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +4 -0
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +4 -0
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.cjs.js +4 -0
- package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.es.js +4 -0
- package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +4 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +4 -0
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js +4 -0
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.es.js +4 -0
- package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +4 -0
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +4 -0
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/types/api/generated/actions.d.ts +11 -4
- package/dist/types/api/generated/activityFeed.d.ts +3 -0
- package/dist/types/api/generated/addons.d.ts +1 -0
- package/dist/types/api/generated/anatomy.d.ts +0 -2
- package/dist/types/api/generated/authentication.d.ts +0 -1
- package/dist/types/api/generated/configuration.d.ts +6 -0
- package/dist/types/api/generated/index.d.ts +2 -0
- package/dist/types/api/generated/links.d.ts +7 -5
- package/dist/types/api/generated/onboarding.d.ts +0 -1
- package/dist/types/api/generated/operations.d.ts +2 -0
- package/dist/types/api/generated/projects.d.ts +0 -35
- package/dist/types/api/generated/system.d.ts +2 -0
- package/dist/types/api/generated/tasks.d.ts +0 -14
- package/dist/types/api/generated/views.d.ts +122 -0
- package/dist/types/api/queries/cloud/cloud.d.ts +593 -0
- package/dist/types/api/queries/cloud/index.d.ts +1 -0
- package/dist/types/api/queries/index.d.ts +2 -0
- package/dist/types/api/queries/project/getProject.d.ts +0 -2
- package/dist/types/api/queries/views/getViews.d.ts +412 -0
- package/dist/types/api/queries/views/index.d.ts +2 -0
- package/dist/types/api/queries/views/updateViews.d.ts +177 -0
- package/dist/types/components/Feedback/FeedbackContext.d.ts +17 -0
- package/dist/types/components/Feedback/SupportBubble.d.ts +4 -0
- package/dist/types/components/Feedback/index.d.ts +2 -0
- package/dist/types/components/Powerpack/CTAButton.d.ts +4 -0
- package/dist/types/components/Powerpack/PowerpackDialog.d.ts +8 -0
- package/dist/types/components/Views/ViewForm/ViewForm.d.ts +14 -0
- package/dist/types/components/Views/ViewForm/ViewForm.styled.d.ts +9 -0
- package/dist/types/components/Views/ViewForm/ViewFormContainer.d.ts +15 -0
- package/dist/types/components/Views/ViewItem/ViewItem.d.ts +15 -0
- package/dist/types/components/Views/ViewItem/ViewItem.styled.d.ts +4 -0
- package/dist/types/components/Views/Views.d.ts +8 -0
- package/dist/types/components/Views/Views.styled.d.ts +4 -0
- package/dist/types/components/Views/ViewsButton/ViewsButton.d.ts +2 -0
- package/dist/types/components/Views/ViewsMenu/ViewsMenu.d.ts +11 -0
- package/dist/types/components/Views/ViewsMenu/ViewsMenu.styled.d.ts +4 -0
- package/dist/types/components/Views/ViewsMenuContainer/ViewsMenuContainer.d.ts +4 -0
- package/dist/types/components/Views/context/ViewsContext.d.ts +31 -0
- package/dist/types/components/Views/hooks/useBuildViewMenuItems.d.ts +14 -0
- package/dist/types/components/Views/index.d.ts +11 -0
- package/dist/types/components/Views/utils/generatePersonalView.d.ts +3 -0
- package/dist/types/components/Views/utils/getCustomViewsFallback.d.ts +12 -0
- package/dist/types/components/Views/utils/portalUtils.d.ts +9 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/context/PowerpackContext.d.ts +5 -5
- package/package.json +1 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getViewsApi } from "./getViews.es.js";
|
|
2
|
+
const updateViewsApi = getViewsApi.enhanceEndpoints({
|
|
3
|
+
endpoints: {
|
|
4
|
+
createView: {
|
|
5
|
+
onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {
|
|
6
|
+
try {
|
|
7
|
+
const { payload } = arg;
|
|
8
|
+
dispatch(
|
|
9
|
+
getViewsApi.util.updateQueryData(
|
|
10
|
+
"getViewList",
|
|
11
|
+
{ viewType: arg.viewType, project: arg.project },
|
|
12
|
+
(draft) => {
|
|
13
|
+
draft.push(payload);
|
|
14
|
+
}
|
|
15
|
+
)
|
|
16
|
+
);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error("Failed to create view:", error);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
transformErrorResponse: (error) => {
|
|
22
|
+
var _a;
|
|
23
|
+
return (_a = error.data) == null ? void 0 : _a.detail;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const { useCreateViewMutation } = updateViewsApi;
|
|
29
|
+
export {
|
|
30
|
+
useCreateViewMutation,
|
|
31
|
+
updateViewsApi as viewsQueries
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=updateViews.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateViews.es.js","sources":["../../../../../../src/api/queries/views/updateViews.ts"],"sourcesContent":["import { getViewsApi } from './getViews'\n\nconst updateViewsApi = getViewsApi.enhanceEndpoints({\n endpoints: {\n createView: {\n onQueryStarted: async (arg, { dispatch, queryFulfilled }) => {\n try {\n const { payload } = arg\n // Optimistically update the view list with the new view\n dispatch(\n getViewsApi.util.updateQueryData(\n 'getViewList',\n { viewType: arg.viewType, project: arg.project },\n (draft) => {\n draft.push(payload)\n },\n ),\n )\n } catch (error) {\n console.error('Failed to create view:', error)\n }\n },\n transformErrorResponse: (error: any) => error.data?.detail,\n },\n },\n})\n\nexport const { useCreateViewMutation } = updateViewsApi\nexport { updateViewsApi as viewsQueries }\n"],"names":[],"mappings":";AAEM,MAAA,iBAAiB,YAAY,iBAAiB;AAAA,EAClD,WAAW;AAAA,IACT,YAAY;AAAA,MACV,gBAAgB,OAAO,KAAK,EAAE,UAAU,qBAAqB;AACvD,YAAA;AACI,gBAAA,EAAE,YAAY;AAEpB;AAAA,YACE,YAAY,KAAK;AAAA,cACf;AAAA,cACA,EAAE,UAAU,IAAI,UAAU,SAAS,IAAI,QAAQ;AAAA,cAC/C,CAAC,UAAU;AACT,sBAAM,KAAK,OAAO;AAAA,cAAA;AAAA,YACpB;AAAA,UAEJ;AAAA,iBACO,OAAO;AACN,kBAAA,MAAM,0BAA0B,KAAK;AAAA,QAAA;AAAA,MAEjD;AAAA,MACA,wBAAwB,CAAC;;AAAe,2BAAM,SAAN,mBAAY;AAAA;AAAA,IAAA;AAAA,EACtD;AAEJ,CAAC;AAEY,MAAA,EAAE,0BAA0B;"}
|
|
@@ -36,6 +36,7 @@ require("../../generated/versions.cjs.js");
|
|
|
36
36
|
require("../../generated/workfiles.cjs.js");
|
|
37
37
|
require("../../generated/ynputCloud.cjs.js");
|
|
38
38
|
require("../../generated/grouping.cjs.js");
|
|
39
|
+
require("../../generated/views.cjs.js");
|
|
39
40
|
const enhancedApi = activityFeed.api.enhanceEndpoints({
|
|
40
41
|
endpoints: {
|
|
41
42
|
getEntityWatchers: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getWatchers.cjs.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAM,cAAcA,iBAAgB,iBAAiB;AAAA,EACnD,WAAW;AAAA,IACT,mBAAmB,CAAC;AAAA,IACpB,mBAAmB,CAAA;AAAA,EAAC;AAExB,CAAC;AAiBD,MAAM,cAAc,YAAY,gBAAgB;AAAA,EAC9C,WAAW,CAAC,WAAW;AAAA,IACrB,qBAAqB,MAAM,MAA4D;AAAA,MACrF,MAAM,QAAQ,EAAE,WAAW,CAAG,EAAA,GAAG,EAAE,SAAA,GAAY;AACzC,YAAA;AACI,gBAAA,mBAAmB,MAAM,QAAQ;AAAA,YACrC,SAAS,IAAI,OAAO,WAAW;;AAC7B,oBAAM,SAAS,MAAM;AAAA,gBACnB,YAAY,UAAU,kBAAkB,SAAS,QAAQ,EAAE,cAAc,KAAM,CAAA;AAAA,cACjF;AACO,qBAAA;AAAA,gBACL,GAAG;AAAA,gBACH,YAAU,YAAO,SAAP,mBAAa,aAAY,CAAA;AAAA,cACrC;AAAA,YACD,CAAA;AAAA,UACH;AAEO,iBAAA,EAAE,MAAM,iBAAiB;AAAA,iBACzB,OAAO;AAEd,kBAAQ,MAAM,KAAK;AACb,gBAAA;AAAA,QAAA;AAAA,MAEV;AAAA,MACA,cAAc,CAAC,SAAS,QAAQ,EAAE,eAChC,SAAS,QAAQ,CAAC,WAAW;AAAA,QAC3B,EAAE,MAAM,YAAY,IAAI,OAAO,SAAS;AAAA,QACxC,EAAE,MAAM,YAAY,IAAI,GAAG,OAAO,WAAW,YAAa,CAAA,QAAQ;AAAA,MACnE,CAAA;AAAA,IACJ,CAAA;AAAA,EACH;AACF,CAAC;AAGK,MAAA,eAAe,YAAY,gBAAgB;AAAA,EAC/C,WAAW,CAAC,WAAW;AAAA,IACrB,qBAAqB,MAAM,SAA+C;AAAA,MACxE,MAAM,QAAQ,EAAE,WAAW,CAAG,EAAA,GAAG,EAAE,SAAA,GAAY;AAC7C,cAAM,WAAW,SAAS;AAAA,UAAI,CAAC,WAC7B;AAAA,YACE,YAAY,UAAU,kBAAkB,SAAS;AAAA,cAC/C,UAAU,OAAO;AAAA,cACjB,YAAY,OAAO;AAAA,cACnB,aAAa,OAAO;AAAA,cACpB,eAAe,EAAE,UAAU,OAAO,SAAS;AAAA,YAC5C,CAAA;AAAA,UAAA;AAAA,QAEL;AAEI,YAAA;AACI,gBAAA,QAAQ,IAAI,QAAQ;AACnB,iBAAA,EAAE,MAAM,OAAU;AAAA,iBAClB,GAAQ;AACf,gBAAM,QAAQ,EAAE,QAAQ,eAAe,OAAO,EAAE,QAAQ;AACxD,iBAAO,EAAE,MAAM;AAAA,QAAA;AAAA,MAEnB;AAAA,MACA,MAAM,eAAe,EAAE,YAAY,EAAE,UAAU,gBAAgB,YAAY;;AACzE,cAAM,QAAQ,SAAS;AACjB,cAAA,OAAO,SAAS,IAAI,CAAC,YAAY,EAAE,MAAM,YAAY,IAAI,OAAO,SAAW,EAAA;AAEjF,cAAM,UAAU,YAAY,KAAK,oBAAoB,OAAO,IAAI;AAEhE,YAAI,UAAiB,CAAC;AAElB,YAAA;AAEM,kBAAA,QAAQ,CAAC,UAAU;AACzB,kBAAM,QAAQ;AAAA,cACZ,YAAY,KAAK;AAAA,gBACf;AAAA,gBACA,MAAM;AAAA,gBACN,CAAC,UAAU;AACT,wBAAM,aAAa,SAAS,QAAQ,CAAC,gBAAyC;AAEtE,0BAAA,SAAS,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa,YAAY,QAAQ;AACvE,wBAAI,CAAC,OAAQ;AAEP,0BAAA,cAAc,MAAM,KAAK,CAAC,MAAM,EAAE,aAAa,OAAO,QAAQ;AACpE,wBAAI,CAAC,YAAmB,OAAA,IAAI,MAAM,wBAAwB;AAC1D,0BAAM,gBAAgB,OAAO;AAG7B,gCAAY,WAAW;AAAA,kBAAA,CACxB;AAAA,gBAAA;AAAA,cACH;AAAA,YAEJ;AACA,oBAAQ,KAAK,KAAK;AAAA,UAAA,CACnB;AAEK,gBAAA;AAAA,iBACC,OAAY;AACnB,gBAAM,UAAU,WAAU,0CAAO,UAAP,mBAAc,SAAd,mBAAoB,MAAM;AAC5C,kBAAA,MAAM,SAAS,KAAK;AAC5B,kBAAQ,QAAQ,CAAC,UAAU,+BAAO,MAAM;AAAA,QAAA;AAAA,MAE5C;AAAA;AAAA,MAEA,iBAAiB,CAAC,SAAS,QAAQ,EAAE,SAAS,MAC5C,SAAS,KAAK,CAAC,WAAW,OAAO,eAAe,MAAM,IAClD,CAAC,EAAE,MAAM,YAAY,IAAI,eAAA,CAAgB,IACzC,CAAA;AAAA,IACP,CAAA;AAAA,EACH;AACF,CAAC;AAEY,MAAA,EAAE,6BAA6B,mCAAmC;;;;"}
|
|
@@ -34,6 +34,7 @@ import "../../generated/versions.es.js";
|
|
|
34
34
|
import "../../generated/workfiles.es.js";
|
|
35
35
|
import "../../generated/ynputCloud.es.js";
|
|
36
36
|
import "../../generated/grouping.es.js";
|
|
37
|
+
import "../../generated/views.es.js";
|
|
37
38
|
const enhancedApi = injectedRtkApi.enhanceEndpoints({
|
|
38
39
|
endpoints: {
|
|
39
40
|
getEntityWatchers: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getWatchers.es.js","sources":["../../../../../../src/api/queries/watchers/getWatchers.ts"],"sourcesContent":["import { activityFeedApi, GetEntityWatchersApiArg } from '@shared/api/generated'\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query'\n\nconst enhancedApi = activityFeedApi.enhanceEndpoints({\n endpoints: {\n getEntityWatchers: {},\n setEntityWatchers: {},\n },\n})\n\ntype GetEntitiesWatchersApiArg = {\n entities: GetEntityWatchersApiArg[]\n}\n\ninterface GetEntitiesWatchers extends GetEntityWatchersApiArg {\n watchers: string[]\n}\n\ntype GetEntitiesWatchersResult = GetEntitiesWatchers[]\n\ntype SetEntitiesWatchersApiArg = {\n entities: GetEntitiesWatchers[]\n}\n\n// GET WATCHERS\nconst injectedApi = enhancedApi.injectEndpoints({\n endpoints: (build) => ({\n getEntitiesWatchers: build.query<GetEntitiesWatchersResult, GetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n try {\n const entitiesWatchers = await Promise.all(\n entities.map(async (entity) => {\n const result = await dispatch(\n enhancedApi.endpoints.getEntityWatchers.initiate(entity, { forceRefetch: true }),\n )\n return {\n ...entity,\n watchers: result.data?.watchers || [],\n }\n }),\n )\n\n return { data: entitiesWatchers }\n } catch (error) {\n // handle errors appropriately\n console.error(error)\n throw error\n }\n },\n providesTags: (_result, _error, { entities }) =>\n entities.flatMap((entity) => [\n { type: 'watchers', id: entity.entityId },\n { type: 'watchers', id: `${entity.entityType.toUpperCase()}-LIST` },\n ]),\n }),\n }),\n})\n\n// UPDATE WATCHERS\nconst injectedApi2 = injectedApi.injectEndpoints({\n endpoints: (build) => ({\n setEntitiesWatchers: build.mutation<undefined, SetEntitiesWatchersApiArg>({\n async queryFn({ entities = [] }, { dispatch }) {\n const promises = entities.map((entity) =>\n dispatch(\n enhancedApi.endpoints.setEntityWatchers.initiate({\n entityId: entity.entityId,\n entityType: entity.entityType,\n projectName: entity.projectName,\n watchersModel: { watchers: entity.watchers },\n }),\n ),\n )\n\n try {\n await Promise.all(promises)\n return { data: undefined }\n } catch (e: any) {\n const error = { status: 'FETCH_ERROR', error: e.message } as FetchBaseQueryError\n return { error }\n }\n },\n async onQueryStarted({ entities }, { dispatch, queryFulfilled, getState }) {\n const state = getState()\n const tags = entities.map((entity) => ({ type: 'watchers', id: entity.entityId }))\n // find all the affected query combinations by seeing which queries are invalidated by the tags\n const entries = enhancedApi.util.selectInvalidatedBy(state, tags)\n\n let patches: any[] = []\n\n try {\n // now update the cache for all affected queries\n entries.forEach((entry) => {\n const patch = dispatch(\n injectedApi.util.updateQueryData(\n 'getEntitiesWatchers',\n entry.originalArgs,\n (draft) => {\n entry.originalArgs.entities.forEach((entryEntity: GetEntityWatchersApiArg) => {\n // find the entity patch\n const entity = entities.find((e) => e.entityId === entryEntity.entityId)\n if (!entity) return\n // find the entity in the draft\n const entityDraft = draft.find((e) => e.entityId === entity.entityId)\n if (!entityDraft) throw new Error('Entity draft not found')\n const watchersPatch = entity.watchers\n\n // update draft\n entityDraft.watchers = watchersPatch\n })\n },\n ),\n )\n patches.push(patch)\n })\n\n await queryFulfilled\n } catch (error: any) {\n const message = `Error: ${error?.error?.data?.detail}` as any\n console.error(message, error)\n patches.forEach((patch) => patch?.undo())\n }\n },\n // invalidates all versions if any of the entities are tasks\n invalidatesTags: (_result, _error, { entities }) =>\n entities.some((entity) => entity.entityType === 'task')\n ? [{ type: 'watchers', id: 'VERSION-LIST' }]\n : [],\n }),\n }),\n})\n\nexport const { useGetEntitiesWatchersQuery, useSetEntitiesWatchersMutation } = injectedApi2\nexport { injectedApi2 as watchersQueries }\n"],"names":["activityFeedApi"],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ require("../../api/generated/versions.cjs.js");
|
|
|
38
38
|
require("../../api/generated/workfiles.cjs.js");
|
|
39
39
|
require("../../api/generated/ynputCloud.cjs.js");
|
|
40
40
|
require("../../api/generated/grouping.cjs.js");
|
|
41
|
+
require("../../api/generated/views.cjs.js");
|
|
41
42
|
require("../../api/queries/actions/getActions.cjs.js");
|
|
42
43
|
require("../../api/queries/activities/getActivities.cjs.js");
|
|
43
44
|
require("../../api/queries/activities/updateActivities.cjs.js");
|
|
@@ -71,6 +72,9 @@ require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
|
71
72
|
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
72
73
|
require("../../api/queries/versions/updateVersions.cjs.js");
|
|
73
74
|
require("../../api/queries/products/createProduct.cjs.js");
|
|
75
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
76
|
+
require("../../api/queries/views/getViews.cjs.js");
|
|
77
|
+
require("../../api/queries/views/updateViews.cjs.js");
|
|
74
78
|
const ayonReactComponents = require("@ynput/ayon-react-components");
|
|
75
79
|
const DetailsDialog = ({
|
|
76
80
|
projectName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsDialog.cjs.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["useGetEntityQuery","toast","jsx","Dialog"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DetailsDialog.cjs.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["useGetEntityQuery","toast","jsx","Dialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACEA,UAAA;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACLC,oBAAAA,MAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAC,2BAAA,kBAAA;AAAA,IAACC,oBAAA;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,4DAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;;"}
|
|
@@ -36,6 +36,7 @@ import "../../api/generated/versions.es.js";
|
|
|
36
36
|
import "../../api/generated/workfiles.es.js";
|
|
37
37
|
import "../../api/generated/ynputCloud.es.js";
|
|
38
38
|
import "../../api/generated/grouping.es.js";
|
|
39
|
+
import "../../api/generated/views.es.js";
|
|
39
40
|
import "../../api/queries/actions/getActions.es.js";
|
|
40
41
|
import "../../api/queries/activities/getActivities.es.js";
|
|
41
42
|
import "../../api/queries/activities/updateActivities.es.js";
|
|
@@ -69,6 +70,9 @@ import "../../api/queries/permissions/getPermissions.es.js";
|
|
|
69
70
|
import "../../api/queries/grouping/getGrouping.es.js";
|
|
70
71
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
71
72
|
import "../../api/queries/products/createProduct.es.js";
|
|
73
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
74
|
+
import "../../api/queries/views/getViews.es.js";
|
|
75
|
+
import "../../api/queries/views/updateViews.es.js";
|
|
72
76
|
import { Dialog } from "@ynput/ayon-react-components";
|
|
73
77
|
const DetailsDialog = ({
|
|
74
78
|
projectName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsDialog.es.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DetailsDialog.es.js","sources":["../../../../../src/components/DetailsDialog/DetailsDialog.tsx"],"sourcesContent":["import { toast } from 'react-toastify'\nimport { useGetEntityQuery } from '@shared/api'\nimport { Dialog } from '@ynput/ayon-react-components'\n\nexport interface DetailsDialogProps {\n projectName?: string\n entityType: string\n entityIds: string[]\n visible: boolean\n onHide: () => void\n}\n\nexport const DetailsDialog = ({\n projectName,\n entityType,\n entityIds,\n visible,\n onHide,\n}: DetailsDialogProps) => {\n const {\n data = {},\n isLoading,\n isError,\n error,\n } = useGetEntityQuery(\n { projectName, entityType: entityType, entityId: entityIds[0] },\n { skip: !visible },\n )\n\n if (isLoading)\n if (isError) {\n toast.error(`Unable to load detail. ${error}`)\n }\n\n if (!visible || data.length < 1) return null\n\n return (\n <Dialog\n isOpen={true}\n onClose={onHide}\n size=\"lg\"\n style={{ width: '50vw' }}\n header={`${entityType} detail`}\n >\n <pre>\n {!isLoading && !isError && JSON.stringify(data, null, 2)}\n {isLoading && 'loading...'}\n {isError && 'error...'}\n </pre>\n </Dialog>\n )\n}\n"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AAClB,QAAA;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAAA,IACF,EAAE,aAAa,YAAwB,UAAU,UAAU,CAAC,EAAE;AAAA,IAC9D,EAAE,MAAM,CAAC,QAAQ;AAAA,EACnB;AAEI,MAAA,WAAA;AACF,QAAI,SAAS;AACL,YAAA,MAAM,0BAA0B,KAAK,EAAE;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,CAAC,WAAW,KAAK,SAAS,EAAU,QAAA;AAGtC,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAO,EAAE,OAAO,OAAO;AAAA,MACvB,QAAQ,GAAG,UAAU;AAAA,MAErB,iDAAC,OACE,EAAA,UAAA;AAAA,QAAA,CAAC,aAAa,CAAC,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,QACtD,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,EACd,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
|
|
@@ -43,6 +43,7 @@ require("../../api/generated/versions.cjs.js");
|
|
|
43
43
|
require("../../api/generated/workfiles.cjs.js");
|
|
44
44
|
require("../../api/generated/ynputCloud.cjs.js");
|
|
45
45
|
require("../../api/generated/grouping.cjs.js");
|
|
46
|
+
require("../../api/generated/views.cjs.js");
|
|
46
47
|
require("../../api/queries/actions/getActions.cjs.js");
|
|
47
48
|
require("../../api/queries/activities/getActivities.cjs.js");
|
|
48
49
|
require("../../api/queries/activities/updateActivities.cjs.js");
|
|
@@ -76,6 +77,9 @@ require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
|
76
77
|
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
77
78
|
require("../../api/queries/versions/updateVersions.cjs.js");
|
|
78
79
|
require("../../api/queries/products/createProduct.cjs.js");
|
|
80
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
81
|
+
require("../../api/queries/views/getViews.cjs.js");
|
|
82
|
+
require("../../api/queries/views/updateViews.cjs.js");
|
|
79
83
|
const DetailsPanelAttributesEditor = require("./DetailsPanelAttributesEditor.cjs.js");
|
|
80
84
|
require("../../context/RemoteModulesContext.cjs.js");
|
|
81
85
|
require("../../../../_virtual/runtime.cjs.js");
|
|
@@ -103,7 +107,6 @@ const readOnlyFields = [
|
|
|
103
107
|
"entityType",
|
|
104
108
|
"projectName",
|
|
105
109
|
"path",
|
|
106
|
-
"name",
|
|
107
110
|
"createdAt",
|
|
108
111
|
"updatedAt"
|
|
109
112
|
];
|
|
@@ -172,6 +175,14 @@ const DetailsPanelAttributes = ({
|
|
|
172
175
|
const { attributes = [] } = info || {};
|
|
173
176
|
const fields = React.useMemo(() => {
|
|
174
177
|
const customFieldsData = [
|
|
178
|
+
{
|
|
179
|
+
name: "name",
|
|
180
|
+
data: {
|
|
181
|
+
type: "string",
|
|
182
|
+
title: "Name",
|
|
183
|
+
description: "The name of the entity, used for identification in the pipeline"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
175
186
|
{
|
|
176
187
|
name: "label",
|
|
177
188
|
data: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelAttributes.cjs.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.path,\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["useState","_a","formData","getMixedState","useEffect","useGetProjectQuery","useGetSiteInfoQuery","useMemo","upperFirst","useEntityUpdate","jsx","Section","DetailsPanelAttributesEditor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsPanelAttributes.cjs.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.path,\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'name',\n data: {\n type: 'string',\n title: 'Name',\n description: 'The name of the entity, used for identification in the pipeline',\n },\n },\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["useState","_a","formData","getMixedState","useEffect","useGetProjectQuery","useGetSiteInfoQuery","useMemo","upperFirst","useEntityUpdate","jsx","Section","DetailsPanelAttributesEditor"],"mappings":"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"}
|
|
@@ -41,6 +41,7 @@ import "../../api/generated/versions.es.js";
|
|
|
41
41
|
import "../../api/generated/workfiles.es.js";
|
|
42
42
|
import "../../api/generated/ynputCloud.es.js";
|
|
43
43
|
import "../../api/generated/grouping.es.js";
|
|
44
|
+
import "../../api/generated/views.es.js";
|
|
44
45
|
import "../../api/queries/actions/getActions.es.js";
|
|
45
46
|
import "../../api/queries/activities/getActivities.es.js";
|
|
46
47
|
import "../../api/queries/activities/updateActivities.es.js";
|
|
@@ -74,6 +75,9 @@ import "../../api/queries/permissions/getPermissions.es.js";
|
|
|
74
75
|
import "../../api/queries/grouping/getGrouping.es.js";
|
|
75
76
|
import "../../api/queries/versions/updateVersions.es.js";
|
|
76
77
|
import "../../api/queries/products/createProduct.es.js";
|
|
78
|
+
import "../../api/queries/cloud/cloud.es.js";
|
|
79
|
+
import "../../api/queries/views/getViews.es.js";
|
|
80
|
+
import "../../api/queries/views/updateViews.es.js";
|
|
77
81
|
import { DetailsPanelAttributesEditor } from "./DetailsPanelAttributesEditor.es.js";
|
|
78
82
|
import "../../context/RemoteModulesContext.es.js";
|
|
79
83
|
import "../../../../_virtual/runtime.es.js";
|
|
@@ -101,7 +105,6 @@ const readOnlyFields = [
|
|
|
101
105
|
"entityType",
|
|
102
106
|
"projectName",
|
|
103
107
|
"path",
|
|
104
|
-
"name",
|
|
105
108
|
"createdAt",
|
|
106
109
|
"updatedAt"
|
|
107
110
|
];
|
|
@@ -170,6 +173,14 @@ const DetailsPanelAttributes = ({
|
|
|
170
173
|
const { attributes = [] } = info || {};
|
|
171
174
|
const fields = useMemo(() => {
|
|
172
175
|
const customFieldsData = [
|
|
176
|
+
{
|
|
177
|
+
name: "name",
|
|
178
|
+
data: {
|
|
179
|
+
type: "string",
|
|
180
|
+
title: "Name",
|
|
181
|
+
description: "The name of the entity, used for identification in the pipeline"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
173
184
|
{
|
|
174
185
|
name: "label",
|
|
175
186
|
data: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsPanelAttributes.es.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'name',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.path,\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["_a","formData","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsPanelAttributes.es.js","sources":["../../../../../src/components/DetailsPanelAttributes/DetailsPanelAttributes.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { Section } from '@ynput/ayon-react-components'\nimport { getMixedState } from '@shared/util'\nimport { useGetSiteInfoQuery, useGetProjectQuery } from '@shared/api'\nimport {\n DetailsPanelAttributesEditor,\n AttributeField,\n DetailsPanelAttributesEditorProps,\n} from './DetailsPanelAttributesEditor'\nimport { useEntityUpdate } from '@shared/hooks'\nimport { upperFirst } from 'lodash'\nimport type { DetailsPanelEntityData } from '@shared/api'\n\ntype EntityForm = {\n id: string\n name: string\n label: string | null | undefined\n entityType: 'folder' | 'task' | 'product' | 'version'\n taskType?: string\n folderType?: string\n productType?: string\n tags: string[]\n status: string\n updatedAt: string\n createdAt: string\n projectName: string\n path: string\n // attribs\n [key: string]: string | number | boolean | Date | any[] | Record<string, any> | undefined | null\n}\n\n// all fields in entity form are visible\nconst visibleFields: Array<keyof EntityForm> = [\n 'id',\n 'name',\n 'label',\n 'entityType',\n 'taskType',\n 'folderType',\n 'productType',\n 'tags',\n 'status',\n 'updatedAt',\n 'createdAt',\n 'projectName',\n 'path',\n]\n\nconst readOnlyFields: Array<keyof EntityForm> = [\n 'id',\n 'entityType',\n 'projectName',\n 'path',\n 'createdAt',\n 'updatedAt',\n]\n\nexport type DetailsPanelAttributesProps = {\n entities: DetailsPanelEntityData[]\n isLoading: boolean\n}\n\nexport const DetailsPanelAttributes = ({\n entities = [],\n isLoading,\n}: DetailsPanelAttributesProps) => {\n // form for project data\n const [mixedFields, setMixedFields] = useState<string[]>([])\n const [formData, setFormData] = useState<EntityForm | null>(null)\n\n const buildInitialForm = () => {\n // Group entity values by field name\n const valuesByField: Record<string, any[]> = {}\n // Track which fields have mixed values\n const mixedFieldsSet = new Set<string>()\n\n entities.forEach((entity) => {\n const mappedEntity: EntityForm = {\n id: entity.id,\n name: entity.name,\n label: entity.label,\n entityType: entity.entityType as 'folder' | 'task' | 'product' | 'version',\n createdAt: entity.createdAt,\n updatedAt: entity.updatedAt,\n projectName: entity.projectName,\n status: entity.status,\n tags: entity.tags || [],\n path: entity.path,\n folderType: entity.folder?.folderType,\n productType: entity.product?.productType,\n taskType: entity.task?.taskType,\n }\n\n // Process regular fields\n Object.keys(mappedEntity).forEach((key) => {\n if (visibleFields.includes(key as keyof EntityForm)) {\n valuesByField[key] = valuesByField[key] || []\n valuesByField[key].push((mappedEntity as any)[key])\n }\n })\n\n // Process attrib fields\n if (entity.attrib) {\n Object.keys(entity.attrib).forEach((key) => {\n const attribKey = `attrib.${key}`\n valuesByField[attribKey] = valuesByField[attribKey] || []\n valuesByField[attribKey].push(entity.attrib?.[key])\n })\n }\n })\n\n // Apply getMixedState to each field\n const formData = Object.entries(valuesByField).reduce((result, [key, values]) => {\n const { value, isMixed } = getMixedState(values)\n result[key] = value\n\n // Add to mixedFields if this field has mixed values\n if (isMixed) {\n mixedFieldsSet.add(key)\n }\n\n return result\n }, {} as Record<string, any>)\n\n setFormData(formData as EntityForm)\n // Update the mixedFields state with all fields that have mixed values\n setMixedFields(Array.from(mixedFieldsSet))\n }\n\n useEffect(() => {\n if (isLoading || entities.length === 0) return\n buildInitialForm()\n }, [entities, isLoading])\n\n const { data: projectData } = useGetProjectQuery(\n { projectName: formData?.projectName || '' },\n { skip: !formData?.projectName || mixedFields.includes('projectName') },\n )\n const { folderTypes = [], taskTypes = [], statuses = [], tags = [] } = projectData || {}\n\n const { data: info } = useGetSiteInfoQuery({ full: true })\n const { attributes = [] } = info || {}\n\n // build the fields array for defining the schema\n const fields: AttributeField[] = useMemo(() => {\n // Create custom fields as proper AttributeModel objects\n const customFieldsData: AttributeField[] = [\n {\n name: 'name',\n data: {\n type: 'string',\n title: 'Name',\n description: 'The name of the entity, used for identification in the pipeline',\n },\n },\n {\n name: 'label',\n data: {\n type: 'string',\n title: 'Label',\n description: 'Used as a nice visual label only',\n },\n },\n {\n name: 'folderType',\n hidden: formData?.entityType !== 'folder',\n data: {\n type: 'string',\n title: 'Folder Type',\n description: 'Type of the folder',\n enum: folderTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'taskType',\n hidden: formData?.entityType !== 'task',\n data: {\n type: 'string',\n title: 'Task Type',\n description: 'Type of the task',\n enum: taskTypes.map((type) => ({\n value: type.name,\n label: type.name,\n icon: type.icon,\n })),\n },\n },\n {\n name: 'status',\n data: {\n type: 'string',\n title: 'Status',\n description: 'The state the entity is in, is it approved or in progress etc.',\n enum: statuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n })),\n },\n },\n {\n name: 'tags',\n data: {\n type: 'list_of_strings',\n title: 'Tags',\n enum: tags.map((tag) => ({\n value: tag.name,\n label: tag.name,\n color: tag.color,\n })),\n },\n },\n ]\n\n // Filter API attributes based on entity type\n const apiAttributesData: AttributeField[] = formData?.entityType\n ? attributes\n .filter((attr) => attr.scope?.includes(formData.entityType))\n .map((attr) => ({\n name: 'attrib.' + attr.name,\n data: attr.data,\n }))\n : []\n\n const readOnlyFieldsData: AttributeField[] = readOnlyFields.map((field) => ({\n name: field as string,\n readonly: true,\n data: {\n type: 'string',\n title: upperFirst(field as string),\n },\n }))\n\n // Combine custom fields with API attributes\n const allFieldsData = [...customFieldsData, ...apiAttributesData, ...readOnlyFieldsData]\n const sortToTop = ['path', 'name']\n const sortedFieldsData = [...allFieldsData].sort((a, b) => {\n const aIndex = sortToTop.indexOf(a.name)\n const bIndex = sortToTop.indexOf(b.name)\n if (aIndex === -1 && bIndex === -1) return 0\n if (aIndex === -1) return 1\n if (bIndex === -1) return -1\n return aIndex - bIndex\n })\n\n return sortedFieldsData\n }, [attributes, folderTypes, taskTypes, statuses, tags, formData?.entityType])\n\n //\n let enableEditing = false\n if (\n ['task', 'folder'].includes(formData?.entityType || '') &&\n !mixedFields.includes('projectName')\n ) {\n enableEditing = true\n }\n\n const entityType = formData?.entityType || 'task'\n const projectName = formData?.projectName || ''\n\n // Setup entity update functionality\n const { updateEntity } = useEntityUpdate({\n entities: entities.map((entity) => ({\n id: entity.id,\n projectName: entity.projectName || '',\n folderId: entity.folder?.id,\n users: entity.task?.assignees || [],\n })),\n entityType,\n })\n\n const handleChange: DetailsPanelAttributesEditorProps['onChange'] = (key, value) => {\n if (key.startsWith('attrib.')) {\n value = {\n [key.replace('attrib.', '')]: value,\n }\n key = 'attrib'\n }\n\n console.log('handleChange', key, value)\n\n // update the form data\n // @ts-ignore\n setFormData((prev) => ({\n ...prev,\n [key]: value,\n }))\n\n // update the entity in database\n updateEntity(key, value)\n }\n\n return (\n <Section style={{ padding: 8, overflow: 'hidden' }}>\n <DetailsPanelAttributesEditor\n fields={fields}\n form={formData || {}}\n mixedFields={mixedFields}\n isLoading={isLoading}\n enableEditing={enableEditing}\n onChange={handleChange}\n />\n </Section>\n )\n}\n"],"names":["_a","formData","jsx"],"mappings":"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"}
|
|
@@ -94,6 +94,7 @@ require("../../api/generated/versions.cjs.js");
|
|
|
94
94
|
require("../../api/generated/workfiles.cjs.js");
|
|
95
95
|
require("../../api/generated/ynputCloud.cjs.js");
|
|
96
96
|
require("../../api/generated/grouping.cjs.js");
|
|
97
|
+
require("../../api/generated/views.cjs.js");
|
|
97
98
|
require("../../api/queries/actions/getActions.cjs.js");
|
|
98
99
|
require("../../api/queries/activities/getActivities.cjs.js");
|
|
99
100
|
require("../../api/queries/activities/updateActivities.cjs.js");
|
|
@@ -127,6 +128,9 @@ require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
|
127
128
|
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
128
129
|
const updateVersions = require("../../api/queries/versions/updateVersions.cjs.js");
|
|
129
130
|
const createProduct = require("../../api/queries/products/createProduct.cjs.js");
|
|
131
|
+
require("../../api/queries/cloud/cloud.cjs.js");
|
|
132
|
+
require("../../api/queries/views/getViews.cjs.js");
|
|
133
|
+
require("../../api/queries/views/updateViews.cjs.js");
|
|
130
134
|
require("../../../../_virtual/runtime.cjs.js");
|
|
131
135
|
require("../../../../_virtual/semver.cjs.js");
|
|
132
136
|
require("react-redux");
|
|
@@ -171,6 +175,7 @@ require("../ProjectTableSettings/ProjectTableSettings.cjs.js");
|
|
|
171
175
|
require("../Powerpack/PowerpackButton.cjs.js");
|
|
172
176
|
require("../Powerpack/PricingLink.cjs.js");
|
|
173
177
|
require("../Powerpack/PowerpackDialog.styled.cjs.js");
|
|
178
|
+
require("../Powerpack/CTAButton.cjs.js");
|
|
174
179
|
require("../SettingsPanel/SettingsPanel.cjs.js");
|
|
175
180
|
require("../SettingsPanel/SettingsPanelItemTemplate.cjs.js");
|
|
176
181
|
require("../AttributeEditor/components/MinMaxField.cjs.js");
|
|
@@ -179,6 +184,11 @@ require("../SearchFilter/filterDates.cjs.js");
|
|
|
179
184
|
require("../Badge/Badge.cjs.js");
|
|
180
185
|
require("../VersionUploader/components/UploadVersionDialog.cjs.js");
|
|
181
186
|
require("../VersionUploader/context/VersionUploadContext.cjs.js");
|
|
187
|
+
require("../Feedback/FeedbackContext.cjs.js");
|
|
188
|
+
require("../Feedback/SupportBubble.cjs.js");
|
|
189
|
+
require("../Views/context/ViewsContext.cjs.js");
|
|
190
|
+
require("../Views/Views.styled.cjs.js");
|
|
191
|
+
require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");
|
|
182
192
|
require("../../containers/DetailsPanel/DetailsPanel.styled.cjs.js");
|
|
183
193
|
require("../../containers/DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");
|
|
184
194
|
const DetailsPanelHeader_styled = require("../../containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { upperFirst } from 'lodash'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n type ProductCreationData,\n type VersionCreationData,\n} from '@shared/utils/versionUploadHelpers'\n// 3811c830436f11f0abc9d6ac5bf0bcfb\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["useDetailsPanelContext","useState","useRef","useReviewablesUpload","progress","sanitizeProductName","toast","createProductHelper","createProduct","handleUploadError","useCreateVersionMutation","useCreateProductMutation","productId","_a","getNextVersionNumber","createVersionHelper","entityType","projectName","res","useUpdateEntitiesMutation","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","jsx","ThumbnailWrapper","Styled.DropZones","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { upperFirst } from 'lodash'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n type ProductCreationData,\n type VersionCreationData,\n} from '@shared/utils/versionUploadHelpers'\n// 3811c830436f11f0abc9d6ac5bf0bcfb\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["useDetailsPanelContext","useState","useRef","useReviewablesUpload","progress","sanitizeProductName","toast","createProductHelper","createProduct","handleUploadError","useCreateVersionMutation","useCreateProductMutation","productId","_a","getNextVersionNumber","createVersionHelper","entityType","projectName","res","useUpdateEntitiesMutation","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","jsx","ThumbnailWrapper","Styled.DropZones","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton"],"mappings":"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"}
|