@ynput/ayon-frontend-shared 0.2.15 → 0.2.16
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 +3 -0
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +3 -0
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +34 -1
- package/dist/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/ProjectTreeTable.es.js +36 -3
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/_virtual/index.cjs10.js +5 -3
- package/dist/_virtual/index.cjs10.js.map +1 -1
- package/dist/_virtual/index.cjs4.js +4 -4
- package/dist/_virtual/index.cjs5.js +3 -5
- package/dist/_virtual/index.cjs5.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +5 -3
- package/dist/_virtual/index.cjs6.js.map +1 -1
- package/dist/_virtual/index.cjs7.js +3 -5
- package/dist/_virtual/index.cjs7.js.map +1 -1
- package/dist/_virtual/index.cjs8.js +4 -4
- package/dist/_virtual/index.cjs9.js +4 -4
- package/dist/_virtual/index.es10.js +5 -2
- package/dist/_virtual/index.es10.js.map +1 -1
- package/dist/_virtual/index.es4.js +4 -4
- package/dist/_virtual/index.es5.js +2 -5
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +5 -2
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/_virtual/index.es7.js +2 -5
- package/dist/_virtual/index.es7.js.map +1 -1
- package/dist/_virtual/index.es8.js +4 -4
- package/dist/_virtual/index.es9.js +4 -4
- package/dist/api.cjs.js +6 -1
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +8 -3
- package/dist/api.es.js.map +1 -1
- package/dist/components.cjs.js +3 -0
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +3 -0
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +3 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +3 -0
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +24 -0
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +24 -0
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/generated/grouping.cjs.js +18 -0
- package/dist/shared/src/api/generated/grouping.cjs.js.map +1 -0
- package/dist/shared/src/api/generated/grouping.es.js +18 -0
- package/dist/shared/src/api/generated/grouping.es.js.map +1 -0
- package/dist/shared/src/api/generated/tasks.cjs.js +0 -8
- package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/tasks.es.js +0 -8
- package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
- 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/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 +2 -0
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +2 -0
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
- 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 +47 -0
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js +47 -0
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -0
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +4 -5
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +4 -5
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
- 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/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 +2 -0
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +2 -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/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/AttributeEditor/AttributeEditor.cjs.js +2 -2
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +2 -2
- package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
- package/dist/shared/src/components/Badge/Badge.cjs.js +31 -0
- package/dist/shared/src/components/Badge/Badge.cjs.js.map +1 -0
- package/dist/shared/src/components/Badge/Badge.es.js +31 -0
- package/dist/shared/src/components/Badge/Badge.es.js.map +1 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +3 -0
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +3 -0
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +138 -3
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +138 -3
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js +5 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js +5 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js +5 -5
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js +5 -5
- package/dist/shared/src/components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +93 -79
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +93 -79
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +87 -17
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +88 -18
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js +4 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js +4 -0
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.styled.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +3 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +3 -0
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +223 -19
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +224 -20
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
- package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +3 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +3 -0
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +3 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +3 -0
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js +22 -0
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js +22 -0
- package/dist/shared/src/containers/ContextMenu/ContextMenuItem.es.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js +26 -7
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js +26 -7
- package/dist/shared/src/containers/ContextMenu/useCreateContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +13 -10
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +13 -10
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +3 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js +8 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js +9 -2
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +9 -0
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +10 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +25 -26
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +26 -27
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +7 -0
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +7 -0
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +9 -8
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +9 -8
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +3 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +3 -0
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +11 -6
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +11 -6
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +33 -9
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +34 -10
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +37 -16
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +38 -17
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +84 -34
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +85 -35
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +26 -13
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +26 -13
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +24 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +24 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +16 -9
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +16 -9
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js +17 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js +17 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useEntitiesMap.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js +30 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js +30 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useExpandedState.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +363 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +363 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +16 -12
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +16 -13
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +239 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +239 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +82 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +82 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +40 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +40 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js +19 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js +19 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useScopedAttributeFields.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +26 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +26 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +7 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +7 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +12 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +12 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js +8 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js +8 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/errorExtraction.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js +7 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js +7 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/localStorageKeys.es.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/validateUpdateEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +2 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +2 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +0 -8
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +0 -8
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +3 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +3 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
- package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +122 -17
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +123 -18
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +7 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +8 -2
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
- package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
- package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js +8 -2
- package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js +8 -2
- package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
- package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/types/api/generated/graphql.d.ts +33 -38
- package/dist/types/api/generated/grouping.d.ts +40 -0
- package/dist/types/api/generated/index.d.ts +3 -1
- package/dist/types/api/generated/tasks.d.ts +8 -33
- package/dist/types/api/queries/activities/getActivities.d.ts +4 -0
- package/dist/types/api/queries/activities/updateActivities.d.ts +8 -0
- package/dist/types/api/queries/entities/getEntity.d.ts +4 -0
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -0
- package/dist/types/api/queries/entities/updateEntity.d.ts +4 -0
- package/dist/types/api/queries/entityLists/getLists.d.ts +4 -0
- package/dist/types/api/queries/grouping/getGrouping.d.ts +137 -0
- package/dist/types/api/queries/grouping/index.d.ts +1 -0
- package/dist/types/api/queries/index.d.ts +1 -0
- package/dist/types/api/queries/overview/getOverview.d.ts +5 -133
- package/dist/types/api/queries/project/getProject.d.ts +2 -2
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -0
- package/dist/types/api/queries/users/getUsers.d.ts +4 -0
- package/dist/types/components/Badge/Badge.d.ts +10 -0
- package/dist/types/components/Badge/index.d.ts +1 -0
- package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +1 -1
- package/dist/types/components/ReviewableProgressCard/ReviewableProgressCard.d.ts +1 -1
- package/dist/types/components/ReviewablesList/ReviewablesUpload.d.ts +19 -3
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/containers/ContextMenu/ContextMenuItem.d.ts +4 -0
- package/dist/types/containers/ContextMenu/useCreateContextMenu.d.ts +2 -1
- package/dist/types/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +1 -5
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +14 -3
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +22 -2
- package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +13 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +8 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +13 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +12 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useEntitiesMap.d.ts +7 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useExpandedState.d.ts +11 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +37 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useGetGroupedFields.d.ts +9 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useGetTaskGroups.d.ts +10 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +14 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useScopedAttributeFields.d.ts +10 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +10 -0
- package/dist/types/containers/ProjectTreeTable/index.d.ts +1 -4
- package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +46 -0
- package/dist/types/containers/ProjectTreeTable/utils/errorExtraction.d.ts +4 -0
- package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +2 -0
- package/dist/types/containers/ProjectTreeTable/utils/localStorageKeys.d.ts +4 -0
- package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +2 -1
- package/dist/types/context/PowerpackContext.d.ts +2 -1
- package/dist/types/hooks/useLoadModule.d.ts +2 -1
- package/dist/types/utils/extractVersionFromFilename.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateUsers.es.js","sources":["../../../../../../src/api/queries/users/updateUsers.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport { usersApi } from '@shared/api/generated'\n\nconst updateUserApi = usersApi.enhanceEndpoints({\n endpoints: {\n deleteUser: {\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n },\n setFrontendPreferences: {\n // @ts-expect-error - disableInvalidations is not in the api\n invalidatesTags: (_result, _error, { userName, disableInvalidations }) =>\n !disableInvalidations ? [{ type: 'user', id: userName }, 'info'] : [],\n async onQueryStarted({ patchData }, { dispatch, queryFulfilled, getState }) {\n // get current preferences\n\n // optimistic update the user cache\n const patch = dispatch(\n usersApi.util.updateQueryData('getCurrentUser', undefined, (draft) => {\n if (draft?.data) {\n draft.data.frontendPreferences = { ...draft.data.frontendPreferences, ...patchData }\n }\n }),\n )\n try {\n await queryFulfilled\n } catch {\n // rollback the optimistic update if the query fails\n patch.undo()\n }\n }, // onQueryStarted\n },\n },\n})\n\nconst updateUser = updateUserApi.injectEndpoints({\n endpoints: (build) => ({\n updateUser: build.mutation({\n query: ({ name, patch }) => ({\n url: `/api/users/${name}`,\n method: 'PATCH',\n body: patch,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n { type: 'userPool', id: 'LIST' },\n { type: 'feedback', id: 'LIST' },\n 'info',\n ],\n }),\n updateUserName: build.mutation({\n query: ({ name, newName }) => ({\n url: `/api/users/${name}/rename`,\n method: 'PATCH',\n body: { newName },\n }),\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n ],\n transformErrorResponse: (res) => res.data,\n }),\n updateUserPassword: build.mutation({\n query: ({ name, password }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { password },\n }),\n invalidatesTags: () => ['user'],\n transformErrorResponse: (res) => res.data,\n }),\n addUser: build.mutation({\n query: ({ name, user }) => ({\n url: `/api/users/${name}`,\n method: 'PUT',\n body: user,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: [{ type: 'user', id: 'LIST' }],\n }),\n updateUserAPIKey: build.mutation({\n query: ({ name, apiKey }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { apiKey },\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n }),\n invalidateUserSession: build.mutation({\n query: ({ name, token }) => ({\n url: `/api/users/${name}/sessions/${token}`,\n method: 'DELETE',\n }),\n invalidatesTags: (_res, _err, { token }) => [{ type: 'session', id: token }],\n }),\n }),\n overrideExisting: true,\n})\n\nconst updateUser2 = updateUser.injectEndpoints({\n endpoints: (build) => ({\n // update multiple users at once\n updateUsers: build.mutation<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any[],\n { name: string; patch: object }[]\n >({\n //\n queryFn: async (updates, { dispatch }) => {\n const results = await Promise.all(\n updates.map(({ name, patch }: { name: string; patch: object }) => {\n return dispatch(updateUser.endpoints.updateUser.initiate({ name, patch }))\n }),\n )\n\n // Check if any of the results have an error\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const firstError = results.find((result: any) => result.error)\n if (firstError) {\n return { error: firstError.error as FetchBaseQueryError }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { data: results.map((result: any) => result.data) }\n },\n }),\n }),\n})\n\nexport const {\n useUpdateUserMutation,\n useUpdateUsersMutation,\n useUpdateUserNameMutation,\n useUpdateUserPasswordMutation,\n useAddUserMutation,\n useDeleteUserMutation,\n useUpdateUserAPIKeyMutation,\n useInvalidateUserSessionMutation,\n useSetFrontendPreferencesMutation,\n} = updateUser2\nexport { updateUser2 as userQueries }\n"],"names":["usersApi"],"mappings":"
|
|
1
|
+
{"version":3,"file":"updateUsers.es.js","sources":["../../../../../../src/api/queries/users/updateUsers.ts"],"sourcesContent":["import { FetchBaseQueryError } from '@reduxjs/toolkit/query'\nimport { usersApi } from '@shared/api/generated'\n\nconst updateUserApi = usersApi.enhanceEndpoints({\n endpoints: {\n deleteUser: {\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n },\n setFrontendPreferences: {\n // @ts-expect-error - disableInvalidations is not in the api\n invalidatesTags: (_result, _error, { userName, disableInvalidations }) =>\n !disableInvalidations ? [{ type: 'user', id: userName }, 'info'] : [],\n async onQueryStarted({ patchData }, { dispatch, queryFulfilled, getState }) {\n // get current preferences\n\n // optimistic update the user cache\n const patch = dispatch(\n usersApi.util.updateQueryData('getCurrentUser', undefined, (draft) => {\n if (draft?.data) {\n draft.data.frontendPreferences = { ...draft.data.frontendPreferences, ...patchData }\n }\n }),\n )\n try {\n await queryFulfilled\n } catch {\n // rollback the optimistic update if the query fails\n patch.undo()\n }\n }, // onQueryStarted\n },\n },\n})\n\nconst updateUser = updateUserApi.injectEndpoints({\n endpoints: (build) => ({\n updateUser: build.mutation({\n query: ({ name, patch }) => ({\n url: `/api/users/${name}`,\n method: 'PATCH',\n body: patch,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n { type: 'userPool', id: 'LIST' },\n { type: 'feedback', id: 'LIST' },\n 'info',\n ],\n }),\n updateUserName: build.mutation({\n query: ({ name, newName }) => ({\n url: `/api/users/${name}/rename`,\n method: 'PATCH',\n body: { newName },\n }),\n invalidatesTags: (_result, _error, { name }) => [\n { type: 'user', id: name },\n { type: 'user', id: 'LIST' },\n ],\n transformErrorResponse: (res) => res.data,\n }),\n updateUserPassword: build.mutation({\n query: ({ name, password }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { password },\n }),\n invalidatesTags: () => ['user'],\n transformErrorResponse: (res) => res.data,\n }),\n addUser: build.mutation({\n query: ({ name, user }) => ({\n url: `/api/users/${name}`,\n method: 'PUT',\n body: user,\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: [{ type: 'user', id: 'LIST' }],\n }),\n updateUserAPIKey: build.mutation({\n query: ({ name, apiKey }) => ({\n url: `/api/users/${name}/password`,\n method: 'PATCH',\n body: { apiKey },\n }),\n transformErrorResponse: (res) => res.data,\n invalidatesTags: () => [{ type: 'user', id: 'LIST' }],\n }),\n invalidateUserSession: build.mutation({\n query: ({ name, token }) => ({\n url: `/api/users/${name}/sessions/${token}`,\n method: 'DELETE',\n }),\n invalidatesTags: (_res, _err, { token }) => [{ type: 'session', id: token }],\n }),\n }),\n overrideExisting: true,\n})\n\nconst updateUser2 = updateUser.injectEndpoints({\n endpoints: (build) => ({\n // update multiple users at once\n updateUsers: build.mutation<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any[],\n { name: string; patch: object }[]\n >({\n //\n queryFn: async (updates, { dispatch }) => {\n const results = await Promise.all(\n updates.map(({ name, patch }: { name: string; patch: object }) => {\n return dispatch(updateUser.endpoints.updateUser.initiate({ name, patch }))\n }),\n )\n\n // Check if any of the results have an error\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const firstError = results.find((result: any) => result.error)\n if (firstError) {\n return { error: firstError.error as FetchBaseQueryError }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { data: results.map((result: any) => result.data) }\n },\n }),\n }),\n})\n\nexport const {\n useUpdateUserMutation,\n useUpdateUsersMutation,\n useUpdateUserNameMutation,\n useUpdateUserPasswordMutation,\n useAddUserMutation,\n useDeleteUserMutation,\n useUpdateUserAPIKeyMutation,\n useInvalidateUserSessionMutation,\n useSetFrontendPreferencesMutation,\n} = updateUser2\nexport { updateUser2 as userQueries }\n"],"names":["usersApi"],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ require("../../generated/users.cjs.js");
|
|
|
35
35
|
require("../../generated/versions.cjs.js");
|
|
36
36
|
require("../../generated/workfiles.cjs.js");
|
|
37
37
|
require("../../generated/ynputCloud.cjs.js");
|
|
38
|
+
require("../../generated/grouping.cjs.js");
|
|
38
39
|
const enhancedApi = activityFeed.api.enhanceEndpoints({
|
|
39
40
|
endpoints: {
|
|
40
41
|
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":"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"}
|
|
@@ -33,6 +33,7 @@ import "../../generated/users.es.js";
|
|
|
33
33
|
import "../../generated/versions.es.js";
|
|
34
34
|
import "../../generated/workfiles.es.js";
|
|
35
35
|
import "../../generated/ynputCloud.es.js";
|
|
36
|
+
import "../../generated/grouping.es.js";
|
|
36
37
|
const enhancedApi = injectedRtkApi.enhanceEndpoints({
|
|
37
38
|
endpoints: {
|
|
38
39
|
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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"}
|
|
@@ -61,7 +61,7 @@ const initFormData = {
|
|
|
61
61
|
description: "",
|
|
62
62
|
example: "",
|
|
63
63
|
default: void 0,
|
|
64
|
-
enum:
|
|
64
|
+
enum: void 0,
|
|
65
65
|
minLength: void 0,
|
|
66
66
|
maxLength: void 0,
|
|
67
67
|
regex: "",
|
|
@@ -195,7 +195,7 @@ const AttributeEditor = ({
|
|
|
195
195
|
{
|
|
196
196
|
values: value,
|
|
197
197
|
onChange: (val) => {
|
|
198
|
-
onChange(val);
|
|
198
|
+
onChange((val == null ? void 0 : val.length) ? val : void 0);
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: [],\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["useState","useEffect","jsxs","jsx","Button","Spacer","SaveButton","_a","EnumEditor","InputSwitch","camelCase","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","upperFirst","MinMaxField","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttributeEditor.cjs.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["useState","useEffect","jsxs","jsx","Button","Spacer","SaveButton","_a","EnumEditor","InputSwitch","camelCase","Dialog","FormLayout","FormRow","InputText","LockedInput","Dropdown","upperFirst","MinMaxField","_b"],"mappings":"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"}
|
|
@@ -59,7 +59,7 @@ const initFormData = {
|
|
|
59
59
|
description: "",
|
|
60
60
|
example: "",
|
|
61
61
|
default: void 0,
|
|
62
|
-
enum:
|
|
62
|
+
enum: void 0,
|
|
63
63
|
minLength: void 0,
|
|
64
64
|
maxLength: void 0,
|
|
65
65
|
regex: "",
|
|
@@ -193,7 +193,7 @@ const AttributeEditor = ({
|
|
|
193
193
|
{
|
|
194
194
|
values: value,
|
|
195
195
|
onChange: (val) => {
|
|
196
|
-
onChange(val);
|
|
196
|
+
onChange((val == null ? void 0 : val.length) ? val : void 0);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: [],\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["jsxs","jsx","_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttributeEditor.es.js","sources":["../../../../../src/components/AttributeEditor/AttributeEditor.tsx"],"sourcesContent":["import { FC, useEffect, useState } from 'react'\nimport {\n SaveButton,\n Spacer,\n FormLayout,\n FormRow,\n InputText,\n InputSwitch,\n LockedInput,\n Dropdown,\n Dialog,\n Button,\n} from '@ynput/ayon-react-components'\nimport { camelCase, upperFirst } from 'lodash'\nimport { MinMaxField } from './components'\nimport { EnumEditor } from '@shared/components/EnumEditor'\nimport { AttributeData, AttributeModel, AttributeEnumItem } from '@shared/api'\n\nconst SCOPE_OPTIONS = [\n { value: 'project', label: 'Project' },\n { value: 'folder', label: 'Folder' },\n { value: 'task', label: 'Task' },\n { value: 'product', label: 'Product' },\n { value: 'version', label: 'Version' },\n { value: 'representation', label: 'Representation' },\n { value: 'user', label: 'User' },\n]\n\n// Define types for constants\ninterface GlobalFieldEntry {\n value: keyof AttributeData\n scope: (AttributeModel['scope'] | '')[] | null\n}\n\nconst GLOBAL_FIELDS: GlobalFieldEntry[] = [\n { value: 'description', scope: null },\n { value: 'example', scope: null },\n // @ts-expect-error - project is not a scope?\n { value: 'default', scope: ['project'] },\n { value: 'inherit', scope: null },\n]\n\ninterface TypeOptionDef {\n value: AttributeData['type']\n label: string\n fields: (keyof AttributeData)[]\n exclude?: (keyof AttributeData)[]\n}\n\ninterface TypeOptionsMap {\n [key: string]: TypeOptionDef\n}\n\nconst TYPE_OPTIONS: TypeOptionsMap = {\n string: {\n value: 'string',\n label: 'String',\n fields: ['minLength', 'maxLength', 'enum', 'regex'],\n },\n integer: {\n value: 'integer',\n label: 'Integer',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n float: {\n value: 'float',\n label: 'Decimal number',\n fields: ['ge', 'gt', 'le', 'lt'],\n },\n list_of_strings: {\n value: 'list_of_strings',\n label: 'List Of Strings',\n fields: ['minItems', 'maxItems', 'enum'],\n },\n boolean: {\n value: 'boolean',\n label: 'Boolean',\n fields: [],\n exclude: ['example'],\n },\n}\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type AttributeForm = PartialBy<AttributeModel, 'scope' | 'position'>\ntype Excludes = (keyof Omit<AttributeModel, 'data'> | keyof AttributeData)[]\n\nconst initFormData: AttributeForm = {\n name: '',\n scope: ['folder', 'task'],\n builtin: false,\n position: 0,\n data: {\n type: 'string',\n title: '',\n description: '',\n example: '',\n default: undefined,\n enum: undefined,\n minLength: undefined,\n maxLength: undefined,\n regex: '',\n minItems: undefined,\n maxItems: undefined,\n ge: undefined,\n gt: undefined,\n le: undefined,\n lt: undefined,\n },\n}\n\n// build the form data based on excludes and to update any data\nconst buildInitFormData = (excludes: Excludes, data?: Partial<AttributeForm>) => {\n // Create a deep clone of init form data\n const formData = JSON.parse(JSON.stringify(initFormData)) as AttributeForm\n\n // Filter out top-level excludes if not in required\n const required = ['name']\n Object.keys(formData).forEach((key) => {\n if (\n !required.includes(key) &&\n excludes.includes(key as keyof Omit<AttributeModel, 'data'>) &&\n key !== 'data'\n ) {\n delete formData[key as keyof AttributeForm]\n }\n })\n\n // Filter out data field excludes if not in in required\n const requiredData = ['title']\n if (formData.data) {\n Object.keys(formData.data).forEach((key) => {\n if (!requiredData.includes(key) && excludes.includes(key as keyof AttributeData)) {\n delete formData.data[key as keyof AttributeData]\n }\n })\n }\n\n // Merge with provided data if any\n if (data) {\n // Merge top-level fields\n Object.keys(data).forEach((key) => {\n const typedKey = key as keyof AttributeForm\n if (typedKey !== 'data' && excludes.includes(typedKey)) return\n\n if (typedKey === 'data' && data.data && formData.data) {\n // Deep merge of data fields\n formData.data = { ...formData.data, ...data.data }\n } else if (data[typedKey] !== undefined) {\n // @ts-ignore - We know these properties exist\n formData[typedKey] = data[typedKey]\n }\n })\n }\n\n return formData\n}\n\nexport interface AttributeEditorProps {\n attribute: AttributeForm | null\n existingNames: string[]\n error?: string\n isUpdating?: boolean\n excludes?: Excludes\n onHide: () => void\n onEdit: (attribute: AttributeForm) => void\n onDelete?: () => void\n}\n\nexport const AttributeEditor: FC<AttributeEditorProps> = ({\n attribute,\n existingNames,\n error = '',\n isUpdating,\n excludes = [],\n onHide,\n onEdit,\n onDelete,\n}) => {\n const initForm = buildInitFormData(excludes, { position: existingNames.length })\n const [formData, setFormData] = useState<AttributeForm | null>(attribute || initForm)\n\n useEffect(() => {\n if (!!attribute) setFormData(attribute)\n }, [attribute])\n\n const isNew = !attribute\n\n // const setTopLevelData = (key: string, value: string) => {\n const setTopLevelData = <K extends keyof Omit<AttributeModel, 'data'>>(\n key: K,\n value: AttributeModel[K],\n ) => {\n setFormData((d) => {\n if (!d) {\n return d\n }\n return { ...d, [key]: value }\n })\n }\n\n // const setData = (key, value) => {\n const setData = <K extends keyof AttributeData>(key: K, value: AttributeData[K]) => {\n setFormData((d) => {\n // Add a check for d and d.data\n if (!d || !d.data) {\n return d\n }\n const dt = { ...d.data, [key]: value }\n return { ...d, data: dt }\n })\n }\n\n let internalError = ''\n if (formData) {\n if (isNew) {\n if (existingNames.includes(formData.name)) internalError = 'This attribute already exists'\n else if (!formData.name.match('^[a-zA-Z_]{2,64}$')) error = 'Invalid attribute name'\n } // name validation\n }\n\n const handleSubmit = () => {\n if (formData) {\n onEdit(formData)\n }\n }\n\n const footer = (\n <div style={{ display: 'flex', width: '100%', flexDirection: 'row' }}>\n {onDelete && attribute && (\n <Button\n variant=\"danger\"\n label={'Delete attribute'}\n icon={'delete'}\n disabled={isUpdating}\n onClick={onDelete}\n />\n )}\n <Spacer />\n <SaveButton\n label={isNew ? 'Create Attribute' : 'Save Attribute'}\n icon={'check'}\n disabled={!!internalError || !formData}\n active={!internalError && !!formData}\n saving={isUpdating}\n onClick={handleSubmit}\n />\n </div>\n )\n\n let dataFields: (keyof AttributeData)[] = []\n\n // add global fields, only if scope are null (all) or the scope is included\n GLOBAL_FIELDS.forEach((globalField) => {\n // @ts-expect-error - project scope will never be found here?\n if (!globalField?.scope || globalField?.scope?.some((s) => formData?.scope?.includes(s))) {\n dataFields.push(globalField.value)\n }\n })\n\n if (formData?.data.type && TYPE_OPTIONS[formData.data.type]) {\n const typeOpt = TYPE_OPTIONS[formData.data.type]\n dataFields = [...dataFields, ...typeOpt.fields].filter((f) => !typeOpt.exclude?.includes(f))\n }\n\n type CustomFieldRenderer = (value: any, onChange: (newValue: any) => void) => JSX.Element | null\n const customFields: {\n enum: CustomFieldRenderer\n inherit: CustomFieldRenderer\n booleanDefault: CustomFieldRenderer\n } = {\n enum: (value = [], onChange) => (\n <EnumEditor\n values={value as AttributeEnumItem[]}\n onChange={(val) => {\n onChange(val?.length ? val : undefined)\n }}\n />\n ),\n inherit: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n booleanDefault: (value, onChange) => (\n <InputSwitch\n checked={value}\n onChange={(e) => onChange((e.target as HTMLInputElement).checked)}\n />\n ),\n }\n\n const handleTitleChange = (e: React.ChangeEvent) => {\n const v = (e.target as HTMLInputElement).value\n setData('title', v)\n\n if (isNew) {\n setTopLevelData('name', camelCase(v))\n }\n }\n\n return (\n <Dialog\n header={formData?.data?.title || formData?.name || 'New attribute'}\n footer={footer}\n onClose={onHide}\n isOpen={true}\n style={{ width: 700, zIndex: 999 }}\n size=\"full\"\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n >\n {formData && (\n <FormLayout>\n {!excludes.includes('title') && (\n <FormRow label={'Title'} key={'title'}>\n <InputText value={formData?.data['title']} onChange={handleTitleChange} autoFocus />\n </FormRow>\n )}\n {!excludes.includes('name') && (\n <FormRow label={'Name'} key={'name'}>\n <LockedInput\n value={formData.name}\n disabled={!isNew}\n onSubmit={(v) => setTopLevelData('name', v)}\n label=\"name\"\n />\n </FormRow>\n )}\n {!excludes.includes('scope') && (\n <FormRow label=\"Scope\">\n <Dropdown\n options={SCOPE_OPTIONS}\n disabled={formData.builtin}\n value={formData.scope || []}\n onChange={(v) => setTopLevelData('scope', v as AttributeModel['scope'])}\n multiSelect\n widthExpand\n />\n </FormRow>\n )}\n {!excludes.includes('type') && (\n <FormRow label=\"Type\">\n <Dropdown\n value={[formData?.data?.type]}\n disabled={formData.builtin}\n options={Object.values(TYPE_OPTIONS)}\n onChange={(v) => setData('type', v[0] as AttributeData['type'])}\n minSelected={1}\n widthExpand\n />\n </FormRow>\n )}\n {dataFields.map((field) => {\n // skip if field is excluded\n if (excludes.includes(field)) return null\n\n let fieldComp = null\n let fieldLabel = upperFirst(field)\n\n if (field === 'enum' || field === 'inherit') {\n const renderer = customFields[field as 'enum' | 'inherit']\n fieldComp = renderer(formData?.data[field], (value) => setData(field, value))\n } else if (field === 'default' && formData?.data?.type === 'boolean') {\n fieldComp = customFields['booleanDefault'](\n formData?.data[field] as boolean,\n (value) => setData(field, value as AttributeData['default']),\n )\n } else if (['ge', 'gt', 'le', 'lt'].includes(field)) {\n // ignore gt and lt\n if (['gt', 'lt'].includes(field)) return null\n fieldComp = (\n <MinMaxField\n value={formData?.data}\n isMin={field === 'ge'}\n isFloat={formData?.data?.type === 'float'}\n onChange={(v) => {\n const geValue = v.ge !== undefined ? Number(v.ge) : undefined\n const leValue = v.le !== undefined ? Number(v.le) : undefined\n\n if (\n // @ts-expect-error\n (v.ge !== undefined && isNaN(geValue)) ||\n // @ts-expect-error\n (v.le !== undefined && isNaN(leValue))\n ) {\n // Do not update the form if the value is not a valid number\n return\n }\n\n setFormData((d) => {\n if (!d || !d.data) return d\n const dt = { ...d.data, ...v }\n return { ...d, data: dt }\n })\n }}\n />\n )\n\n // rewrite field to min or max for display label\n fieldLabel = field === 'ge' ? 'Min' : 'Max'\n } else {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const strValue = e.target.value\n switch (field) {\n case 'minLength':\n case 'maxLength':\n case 'minItems':\n case 'maxItems': {\n const num = parseInt(strValue, 10)\n setData(field, isNaN(num) ? undefined : num)\n break\n }\n default:\n // For string fields ('description', 'regex') or 'any' type fields ('example', 'default')\n setData(field, strValue as AttributeData[typeof field])\n break\n }\n }\n\n fieldComp = (\n <InputText\n value={String(formData?.data[field] ?? '')}\n onChange={handleInputChange}\n />\n )\n }\n\n return (\n <FormRow\n label={fieldLabel}\n key={field}\n style={{\n alignItems: 'flex-start',\n }}\n >\n {fieldComp}\n </FormRow>\n )\n })}\n <span>\n {(internalError || error) && (\n <span className=\"form-error-text\">{internalError || error}</span>\n )}\n </span>\n </FormLayout>\n )}\n </Dialog>\n )\n}\n"],"names":["jsxs","jsx","_a","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("../../../../_virtual/jsx-runtime.cjs.js");
|
|
4
|
+
const styled = require("styled-components");
|
|
5
|
+
const BadgeWrapper = styled.div`
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
gap: var(--base-gap-small);
|
|
10
|
+
padding: 0 4px;
|
|
11
|
+
margin-left: 12px;
|
|
12
|
+
`;
|
|
13
|
+
const BaseBadge = styled.span`
|
|
14
|
+
font-size: 0.8rem;
|
|
15
|
+
border-radius: 4px;
|
|
16
|
+
color: #161616;
|
|
17
|
+
padding: 0 4px;
|
|
18
|
+
`;
|
|
19
|
+
const WELL_KNOWN_BADGES = ["studio", "project", "producttion", "staging", "development"];
|
|
20
|
+
const Badge = ({ children, hl, style, ...props }) => {
|
|
21
|
+
const nstyle = { ...style };
|
|
22
|
+
if (hl) {
|
|
23
|
+
nstyle.backgroundColor = `var(--color-hl-${hl})`;
|
|
24
|
+
} else if (children && typeof children === "string" && WELL_KNOWN_BADGES.includes(children.toLowerCase())) {
|
|
25
|
+
nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`;
|
|
26
|
+
}
|
|
27
|
+
return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(BaseBadge, { style: nstyle, ...props, children });
|
|
28
|
+
};
|
|
29
|
+
exports.Badge = Badge;
|
|
30
|
+
exports.BadgeWrapper = BadgeWrapper;
|
|
31
|
+
//# sourceMappingURL=Badge.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.cjs.js","sources":["../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import styled from 'styled-components'\nimport { ReactNode, CSSProperties } from 'react'\n\nexport const BadgeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--base-gap-small);\n padding: 0 4px;\n margin-left: 12px;\n`\n\nconst BaseBadge = styled.span`\n font-size: 0.8rem;\n border-radius: 4px;\n color: #161616;\n padding: 0 4px;\n`\n\nconst WELL_KNOWN_BADGES = ['studio', 'project', 'producttion', 'staging', 'development']\n\ninterface BadgeProps {\n children?: ReactNode\n hl?: string\n style?: CSSProperties\n [key: string]: any\n}\n\nexport const Badge = ({ children, hl, style, ...props }: BadgeProps) => {\n const nstyle: CSSProperties = { ...style }\n if (hl) {\n nstyle.backgroundColor = `var(--color-hl-${hl})`\n } else if (\n children &&\n typeof children === 'string' &&\n WELL_KNOWN_BADGES.includes(children.toLowerCase())\n ) {\n nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`\n }\n\n return (\n <BaseBadge style={nstyle} {...props}>\n {children}\n </BaseBadge>\n )\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnC,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,oBAAoB,CAAC,UAAU,WAAW,eAAe,WAAW,aAAa;AAS1E,MAAA,QAAQ,CAAC,EAAE,UAAU,IAAI,OAAO,GAAG,YAAwB;AAChE,QAAA,SAAwB,EAAE,GAAG,MAAM;AACzC,MAAI,IAAI;AACC,WAAA,kBAAkB,kBAAkB,EAAE;AAAA,EAAA,WAE7C,YACA,OAAO,aAAa,YACpB,kBAAkB,SAAS,SAAS,YAAY,CAAC,GACjD;AACA,WAAO,kBAAkB,kBAAkB,SAAS,YAAa,CAAA;AAAA,EAAA;AAGnE,0DACG,WAAU,EAAA,OAAO,QAAS,GAAG,OAC3B,UACH;AAEJ;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
+
import styled from "styled-components";
|
|
3
|
+
const BadgeWrapper = styled.div`
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
gap: var(--base-gap-small);
|
|
8
|
+
padding: 0 4px;
|
|
9
|
+
margin-left: 12px;
|
|
10
|
+
`;
|
|
11
|
+
const BaseBadge = styled.span`
|
|
12
|
+
font-size: 0.8rem;
|
|
13
|
+
border-radius: 4px;
|
|
14
|
+
color: #161616;
|
|
15
|
+
padding: 0 4px;
|
|
16
|
+
`;
|
|
17
|
+
const WELL_KNOWN_BADGES = ["studio", "project", "producttion", "staging", "development"];
|
|
18
|
+
const Badge = ({ children, hl, style, ...props }) => {
|
|
19
|
+
const nstyle = { ...style };
|
|
20
|
+
if (hl) {
|
|
21
|
+
nstyle.backgroundColor = `var(--color-hl-${hl})`;
|
|
22
|
+
} else if (children && typeof children === "string" && WELL_KNOWN_BADGES.includes(children.toLowerCase())) {
|
|
23
|
+
nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`;
|
|
24
|
+
}
|
|
25
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(BaseBadge, { style: nstyle, ...props, children });
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
Badge,
|
|
29
|
+
BadgeWrapper
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=Badge.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.es.js","sources":["../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import styled from 'styled-components'\nimport { ReactNode, CSSProperties } from 'react'\n\nexport const BadgeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--base-gap-small);\n padding: 0 4px;\n margin-left: 12px;\n`\n\nconst BaseBadge = styled.span`\n font-size: 0.8rem;\n border-radius: 4px;\n color: #161616;\n padding: 0 4px;\n`\n\nconst WELL_KNOWN_BADGES = ['studio', 'project', 'producttion', 'staging', 'development']\n\ninterface BadgeProps {\n children?: ReactNode\n hl?: string\n style?: CSSProperties\n [key: string]: any\n}\n\nexport const Badge = ({ children, hl, style, ...props }: BadgeProps) => {\n const nstyle: CSSProperties = { ...style }\n if (hl) {\n nstyle.backgroundColor = `var(--color-hl-${hl})`\n } else if (\n children &&\n typeof children === 'string' &&\n WELL_KNOWN_BADGES.includes(children.toLowerCase())\n ) {\n nstyle.backgroundColor = `var(--color-hl-${children.toLowerCase()})`\n }\n\n return (\n <BaseBadge style={nstyle} {...props}>\n {children}\n </BaseBadge>\n )\n}\n"],"names":[],"mappings":";;AAGO,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnC,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,oBAAoB,CAAC,UAAU,WAAW,eAAe,WAAW,aAAa;AAS1E,MAAA,QAAQ,CAAC,EAAE,UAAU,IAAI,OAAO,GAAG,YAAwB;AAChE,QAAA,SAAwB,EAAE,GAAG,MAAM;AACzC,MAAI,IAAI;AACC,WAAA,kBAAkB,kBAAkB,EAAE;AAAA,EAAA,WAE7C,YACA,OAAO,aAAa,YACpB,kBAAkB,SAAS,SAAS,YAAY,CAAC,GACjD;AACA,WAAO,kBAAkB,kBAAkB,SAAS,YAAa,CAAA;AAAA,EAAA;AAGnE,+CACG,WAAU,EAAA,OAAO,QAAS,GAAG,OAC3B,UACH;AAEJ;"}
|
|
@@ -37,6 +37,7 @@ require("../../api/generated/users.cjs.js");
|
|
|
37
37
|
require("../../api/generated/versions.cjs.js");
|
|
38
38
|
require("../../api/generated/workfiles.cjs.js");
|
|
39
39
|
require("../../api/generated/ynputCloud.cjs.js");
|
|
40
|
+
require("../../api/generated/grouping.cjs.js");
|
|
40
41
|
require("../../api/queries/actions/getActions.cjs.js");
|
|
41
42
|
require("../../api/queries/activities/getActivities.cjs.js");
|
|
42
43
|
require("../../api/queries/activities/updateActivities.cjs.js");
|
|
@@ -67,6 +68,7 @@ require("../../api/queries/users/getUsers.cjs.js");
|
|
|
67
68
|
require("../../api/queries/users/updateUsers.cjs.js");
|
|
68
69
|
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
69
70
|
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
71
|
+
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
70
72
|
const ayonReactComponents = require("@ynput/ayon-react-components");
|
|
71
73
|
const DetailsDialog = ({
|
|
72
74
|
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;;"}
|
|
@@ -35,6 +35,7 @@ import "../../api/generated/users.es.js";
|
|
|
35
35
|
import "../../api/generated/versions.es.js";
|
|
36
36
|
import "../../api/generated/workfiles.es.js";
|
|
37
37
|
import "../../api/generated/ynputCloud.es.js";
|
|
38
|
+
import "../../api/generated/grouping.es.js";
|
|
38
39
|
import "../../api/queries/actions/getActions.es.js";
|
|
39
40
|
import "../../api/queries/activities/getActivities.es.js";
|
|
40
41
|
import "../../api/queries/activities/updateActivities.es.js";
|
|
@@ -65,6 +66,7 @@ import "../../api/queries/users/getUsers.es.js";
|
|
|
65
66
|
import "../../api/queries/users/updateUsers.es.js";
|
|
66
67
|
import "../../api/queries/watchers/getWatchers.es.js";
|
|
67
68
|
import "../../api/queries/permissions/getPermissions.es.js";
|
|
69
|
+
import "../../api/queries/grouping/getGrouping.es.js";
|
|
68
70
|
import { Dialog } from "@ynput/ayon-react-components";
|
|
69
71
|
const DetailsDialog = ({
|
|
70
72
|
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;"}
|
|
@@ -42,6 +42,7 @@ require("../../api/generated/users.cjs.js");
|
|
|
42
42
|
require("../../api/generated/versions.cjs.js");
|
|
43
43
|
require("../../api/generated/workfiles.cjs.js");
|
|
44
44
|
require("../../api/generated/ynputCloud.cjs.js");
|
|
45
|
+
require("../../api/generated/grouping.cjs.js");
|
|
45
46
|
require("../../api/queries/actions/getActions.cjs.js");
|
|
46
47
|
require("../../api/queries/activities/getActivities.cjs.js");
|
|
47
48
|
require("../../api/queries/activities/updateActivities.cjs.js");
|
|
@@ -72,6 +73,7 @@ require("../../api/queries/users/getUsers.cjs.js");
|
|
|
72
73
|
require("../../api/queries/users/updateUsers.cjs.js");
|
|
73
74
|
require("../../api/queries/watchers/getWatchers.cjs.js");
|
|
74
75
|
require("../../api/queries/permissions/getPermissions.cjs.js");
|
|
76
|
+
require("../../api/queries/grouping/getGrouping.cjs.js");
|
|
75
77
|
const DetailsPanelAttributesEditor = require("./DetailsPanelAttributesEditor.cjs.js");
|
|
76
78
|
require("../../context/RemoteModulesContext.cjs.js");
|
|
77
79
|
require("../../../../_virtual/runtime.cjs.js");
|