@ynput/ayon-frontend-shared 0.3.40 → 0.3.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DetailsPanel.cjs.js +1 -1
- package/dist/DetailsPanel.es.js +29 -27
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +1 -1
- package/dist/ProjectTreeTable.es.js +225 -223
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/Slicer.cjs.js +1 -1
- package/dist/Slicer.es.js +25 -16
- package/dist/Slicer.es.js.map +1 -1
- package/dist/_virtual/index.cjs15.js +1 -1
- package/dist/_virtual/index.cjs19.js +1 -1
- package/dist/_virtual/index.cjs4.js +1 -1
- package/dist/_virtual/index.cjs5.js +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.es15.js +2 -2
- package/dist/_virtual/index.es16.js +2 -2
- package/dist/_virtual/index.es17.js +2 -2
- package/dist/_virtual/index.es18.js +2 -2
- package/dist/_virtual/index.es19.js +2 -2
- package/dist/_virtual/index.es4.js +5 -2
- package/dist/_virtual/index.es4.js.map +1 -1
- package/dist/_virtual/index.es5.js +2 -5
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/api.cjs.js +1 -1
- package/dist/api.es.js +227 -227
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +16 -14
- 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/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
- package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
- package/dist/shared/node_modules/prop-types/index.es.js +1 -1
- package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
- package/dist/shared/node_modules/react-is/index.es.js +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +55 -79
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +278 -154
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.es.js +70 -19
- package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/updateActivities.cjs.js +1 -1
- package/dist/shared/src/api/queries/activities/updateActivities.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/updateActivities.es.js +40 -43
- package/dist/shared/src/api/queries/activities/updateActivities.es.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js +149 -55
- package/dist/shared/src/api/queries/activities/util/activityRealtimeHandler.es.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/columnStats.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/columnStats/columnStats.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +105 -51
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +178 -130
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/listFolders.es.js +94 -40
- package/dist/shared/src/api/queries/entityLists/listFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.es.js +109 -55
- package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js +6 -21
- package/dist/shared/src/api/queries/grouping/getGrouping.es.js.map +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/links/getEntityLinks.es.js +117 -63
- package/dist/shared/src/api/queries/links/getEntityLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/links/getLinks.cjs.js +1 -1
- package/dist/shared/src/api/queries/links/getLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/links/getLinks.es.js +108 -54
- package/dist/shared/src/api/queries/links/getLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +220 -167
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.es.js +7 -46
- package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/getProduct.cjs.js +2 -0
- package/dist/shared/src/api/queries/products/getProduct.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/products/getProduct.es.js +52 -0
- package/dist/shared/src/api/queries/products/getProduct.es.js.map +1 -0
- package/dist/shared/src/api/queries/projectFolders/projectFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/projectFolders/projectFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/projectFolders/projectFolders.es.js +133 -80
- package/dist/shared/src/api/queries/projectFolders/projectFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js +1 -1
- package/dist/shared/src/api/queries/review/getReview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/review/getReview.es.js +127 -75
- package/dist/shared/src/api/queries/review/getReview.es.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +142 -90
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +4 -2
- 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/versions/getVersionsProducts.cjs.js +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +537 -331
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.cjs.js.map +1 -1
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js +124 -29
- package/dist/shared/src/components/AttributeEditor/attributeTypeMap.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +5 -5
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +140 -45
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +9 -7
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +4 -4
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js +4 -4
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js +113 -18
- package/dist/shared/src/components/DetailsPanelDetails/DetailsSection.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js +2 -2
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js +108 -13
- package/dist/shared/src/components/DetailsPanelDetails/FieldLabel.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +3 -3
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.es.js +119 -24
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityFormData.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.es.js +97 -2
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useMentionSystem.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +9 -7
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +9 -7
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +5 -5
- package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.es.js +9 -9
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +9 -7
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +1 -1
- package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +4 -4
- package/dist/shared/src/components/Menu/Menu.cjs.js +1 -1
- package/dist/shared/src/components/Menu/Menu.es.js +7 -7
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +23 -21
- package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +57 -55
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js +19 -16
- package/dist/shared/src/components/RemotePage/ProjectPageRemote.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +10 -8
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +9 -7
- package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +9 -7
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +10 -8
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +9 -7
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js +9 -7
- package/dist/shared/src/components/ReviewablesSelector/Card.es.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +340 -354
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js +11 -9
- package/dist/shared/src/components/SimpleFormDialog/FormFile.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +9 -7
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.cjs.js +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.cjs.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/Thumbnail.es.js +122 -27
- package/dist/shared/src/components/Thumbnail/Thumbnail.es.js.map +1 -1
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js +3 -3
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js.map +1 -1
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js +117 -22
- package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +9 -7
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +13 -11
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +9 -7
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +42 -42
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js +2 -2
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js +28 -28
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js +22 -19
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js +25 -22
- package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +9 -7
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +119 -124
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js +9 -7
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js +9 -7
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js +139 -128
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js +6 -6
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js +148 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js +29 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js +34 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js +13 -11
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/DetailsPanelMoreMenu.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js +5 -5
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.es.js +115 -20
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/components/ShareDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js +9 -7
- package/dist/shared/src/containers/DetailsPanel/components/DetailsPanelMoreMenu/hooks/useContextAccess.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js +23 -21
- package/dist/shared/src/containers/DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js +9 -7
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js +9 -7
- package/dist/shared/src/containers/DetailsPanel/containers/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.cjs.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.es.js +9 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/buildEntityTypeIcons.es.js.map +1 -0
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.es.js +12 -12
- package/dist/shared/src/containers/DetailsPanel/helpers/getEntityPathData.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.es.js +105 -10
- package/dist/shared/src/containers/DetailsPanel/helpers/getThumbnails.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -2
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +31 -29
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +9 -7
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +9 -7
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +9 -7
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.es.js +106 -11
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useExpandedWithInitialFolders.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.es.js +122 -27
- package/dist/shared/src/containers/EntityPickerDialog/util/buildEntityPickerTableData.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js +9 -7
- package/dist/shared/src/containers/Feed/components/ActivityCheckbox/ActivityCheckbox.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +91 -80
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +9 -7
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.es.js +119 -24
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js +29 -29
- package/dist/shared/src/containers/Feed/components/ActivityVersionReview/ActivityVersionReview.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +9 -7
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js +13 -11
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.es.js +104 -9
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useBlendedCategoryColor.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/FeedSearchFilter.es.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +9 -7
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/helpers/getActivityUserName.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/helpers/getActivityUserName.cjs.js.map +1 -0
- package/dist/shared/src/containers/Feed/helpers/getActivityUserName.es.js +5 -0
- package/dist/shared/src/containers/Feed/helpers/getActivityUserName.es.js.map +1 -0
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js +185 -87
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.es.js +105 -10
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionTasks.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js +108 -13
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTable.es.js +22 -20
- package/dist/shared/src/containers/ListTable/ListTable.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js +9 -7
- package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js +9 -7
- package/dist/shared/src/containers/ListTable/ListTableHeader.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +622 -616
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +72 -70
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnDndProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +23 -21
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +178 -83
- package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +31 -29
- 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 +24 -22
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +26 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useDeleteEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +72 -72
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +26 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +25 -23
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +10 -8
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +24 -22
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js +13 -16
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSelectedFolders.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +48 -42
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +38 -36
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +10 -8
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CommentsWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +11 -9
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/MarkdownWidget.es.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +25 -23
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +9 -7
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextContentWidget.es.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +175 -80
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +5 -5
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +107 -12
- package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +42 -40
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +9 -7
- package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -2
- package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/Slicer.es.js +57 -70
- package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +9 -7
- package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +273 -124
- package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/context/SlicerContextInstance.cjs.js +2 -0
- package/dist/shared/src/containers/Slicer/context/SlicerContextInstance.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/context/SlicerContextInstance.es.js +6 -0
- package/dist/shared/src/containers/Slicer/context/SlicerContextInstance.es.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js +4 -2
- package/dist/shared/src/containers/Slicer/hooks/useSelectedEntityIds.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js +2 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js +156 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRemotes.es.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js +2 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js +187 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerRowSelection.es.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js +2 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js +143 -0
- package/dist/shared/src/containers/Slicer/hooks/useSlicerSplitter.es.js.map +1 -0
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +47 -43
- package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.cjs.js +1 -1
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.es.js +8 -13
- package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.es.js.map +1 -1
- package/dist/shared/src/containers/Slicer/util/getSelectionDataState.cjs.js +2 -0
- package/dist/shared/src/containers/Slicer/util/getSelectionDataState.cjs.js.map +1 -0
- package/dist/shared/src/containers/Slicer/util/getSelectionDataState.es.js +8 -0
- package/dist/shared/src/containers/Slicer/util/getSelectionDataState.es.js.map +1 -0
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js +124 -29
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +2 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +8 -6
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js +113 -18
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +158 -84
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +2 -2
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +64 -63
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +2 -2
- package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
- package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ProjectContext.es.js +83 -66
- package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.cjs.js +1 -1
- package/dist/shared/src/context/ProjectFoldersContext.es.js +2 -2
- package/dist/shared/src/context/SubtasksModulesContext.cjs.js +1 -1
- package/dist/shared/src/context/SubtasksModulesContext.es.js +2 -2
- package/dist/shared/src/context/UriContext.cjs.js +1 -1
- package/dist/shared/src/context/UriContext.cjs.js.map +1 -1
- package/dist/shared/src/context/UriContext.es.js +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
- package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
- package/dist/shared/src/context/WebsocketContext.es.js +18 -16
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +2 -2
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.cjs.js +1 -1
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.es.js +115 -20
- package/dist/shared/src/hooks/useReviewablesKeyboardNavigation.es.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
- package/dist/shared/src/util/getBundleMode.cjs.js +2 -0
- package/dist/shared/src/util/getBundleMode.cjs.js.map +1 -0
- package/dist/shared/src/util/getBundleMode.es.js +118 -0
- package/dist/shared/src/util/getBundleMode.es.js.map +1 -0
- package/dist/types/api/generated/graphql.d.ts +640 -887
- package/dist/types/api/generated/graphqlLinks.d.ts +190 -284
- package/dist/types/api/queries/activities/getActivities.d.ts +144 -137
- package/dist/types/api/queries/activities/updateActivities.d.ts +288 -274
- package/dist/types/api/queries/columnStats/columnStats.d.ts +3 -21
- package/dist/types/api/queries/entities/getEntity.d.ts +144 -137
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +144 -137
- package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +3 -1
- package/dist/types/api/queries/entities/updateEntity.d.ts +144 -137
- package/dist/types/api/queries/entityLists/getLists.d.ts +1406 -1712
- package/dist/types/api/queries/entityLists/types.d.ts +1 -0
- package/dist/types/api/queries/folders/getFolderDeleteInfo.d.ts +66 -66
- package/dist/types/api/queries/overview/getOverview.d.ts +630 -623
- package/dist/types/api/queries/products/createProduct.d.ts +2 -2
- package/dist/types/api/queries/products/getFolderProducts.d.ts +32 -32
- package/dist/types/api/queries/products/getProduct.d.ts +259 -0
- package/dist/types/api/queries/project/getProject.d.ts +264 -257
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +192 -185
- package/dist/types/api/queries/users/getUsers.d.ts +177 -170
- package/dist/types/api/queries/versions/getVersionsProducts.d.ts +784 -770
- package/dist/types/api/queries/versions/updateVersions.d.ts +106 -143
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -1
- package/dist/types/containers/Actions/Actions.d.ts +3 -2
- package/dist/types/containers/Actions/ActionsDropdown/ActionsDropdown.d.ts +3 -2
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.d.ts +3 -2
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.d.ts +7 -0
- package/dist/types/containers/DetailsPanel/components/DetailsPanelHeader/LinkedTaskRow.styled.d.ts +2 -0
- package/dist/types/containers/DetailsPanel/helpers/buildEntityTypeIcons.d.ts +4 -0
- package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +1 -1
- package/dist/types/containers/Feed/helpers/getActivityUserName.d.ts +4 -0
- package/dist/types/containers/ProjectTreeTable/hooks/useSelectedFolders.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/hooks/useSortBySettings.d.ts +6 -1
- package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
- package/dist/types/containers/Slicer/components/Slicer.d.ts +1 -1
- package/dist/types/containers/Slicer/context/SlicerContext.d.ts +14 -19
- package/dist/types/containers/Slicer/context/SlicerContextInstance.d.ts +2 -0
- package/dist/types/containers/Slicer/hooks/index.d.ts +4 -1
- package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +1 -0
- package/dist/types/containers/Slicer/hooks/useSlicerRemotes.d.ts +6 -0
- package/dist/types/containers/Slicer/hooks/useSlicerRowSelection.d.ts +20 -0
- package/dist/types/containers/Slicer/hooks/useSlicerSplitter.d.ts +9 -0
- package/dist/types/containers/Slicer/types.d.ts +7 -0
- package/dist/types/containers/Slicer/util/createFilterFromSlicer.d.ts +5 -3
- package/dist/types/containers/Slicer/util/getSelectionDataState.d.ts +3 -0
- package/dist/types/containers/Slicer/util/index.d.ts +1 -0
- package/dist/types/context/DetailsPanelContext.d.ts +2 -1
- package/dist/types/context/ProjectContext.d.ts +2 -1
- package/dist/types/util/getBundleMode.d.ts +4 -0
- package/dist/types/util/index.d.ts +1 -0
- package/dist/util.cjs.js +1 -1
- package/dist/util.es.js +33 -30
- package/dist/util.es.js.map +1 -1
- package/package.json +3 -3
- package/dist/shared/src/containers/Slicer/hooks/useSlicerViewSync.cjs.js +0 -2
- package/dist/shared/src/containers/Slicer/hooks/useSlicerViewSync.cjs.js.map +0 -1
- package/dist/shared/src/containers/Slicer/hooks/useSlicerViewSync.es.js +0 -22
- package/dist/shared/src/containers/Slicer/hooks/useSlicerViewSync.es.js.map +0 -1
- package/dist/types/containers/Slicer/hooks/useSlicerViewSync.d.ts +0 -8
|
@@ -1,132 +1,206 @@
|
|
|
1
|
-
import { useViewsContext as z } from "../../context/ViewsContext.es.js";
|
|
2
1
|
import "lodash";
|
|
3
2
|
import "react-toastify";
|
|
4
3
|
import "uuid";
|
|
5
|
-
import { convertColumnConfigToTanstackStates as
|
|
4
|
+
import { convertColumnConfigToTanstackStates as b, convertTanstackStatesToColumnConfig as T } from "../../../../util/columnConfigConverter.es.js";
|
|
5
|
+
import "../../../../api/base/client.es.js";
|
|
6
|
+
import "../../../../api/generated/graphql.es.js";
|
|
7
|
+
import "../../../../api/generated/graphqlLinks.es.js";
|
|
8
|
+
import "../../../../api/generated/access.es.js";
|
|
9
|
+
import "../../../../api/generated/actions.es.js";
|
|
10
|
+
import "../../../../api/generated/activityFeed.es.js";
|
|
11
|
+
import "../../../../api/generated/addons.es.js";
|
|
12
|
+
import "../../../../api/generated/anatomy.es.js";
|
|
13
|
+
import "../../../../api/generated/attributes.es.js";
|
|
14
|
+
import "../../../../api/generated/authentication.es.js";
|
|
15
|
+
import "../../../../api/generated/bundles.es.js";
|
|
16
|
+
import "../../../../api/generated/configuration.es.js";
|
|
17
|
+
import "../../../../api/generated/dataImport.es.js";
|
|
18
|
+
import "../../../../api/generated/desktop.es.js";
|
|
19
|
+
import "../../../../api/generated/entityLists.es.js";
|
|
20
|
+
import "../../../../api/generated/events.es.js";
|
|
21
|
+
import "../../../../api/generated/files.es.js";
|
|
22
|
+
import "../../../../api/generated/folders.es.js";
|
|
23
|
+
import "../../../../api/generated/inbox.es.js";
|
|
24
|
+
import "../../../../api/generated/links.es.js";
|
|
25
|
+
import "../../../../api/generated/market.es.js";
|
|
26
|
+
import "../../../../api/generated/onboarding.es.js";
|
|
27
|
+
import "../../../../api/generated/operations.es.js";
|
|
28
|
+
import "../../../../api/generated/products.es.js";
|
|
29
|
+
import "../../../../api/generated/projectDashboard.es.js";
|
|
30
|
+
import "../../../../api/generated/projects.es.js";
|
|
31
|
+
import "../../../../api/generated/projectFolders.es.js";
|
|
32
|
+
import "../../../../api/generated/reviewables.es.js";
|
|
33
|
+
import "../../../../api/generated/services.es.js";
|
|
34
|
+
import "../../../../api/generated/system.es.js";
|
|
35
|
+
import "../../../../api/generated/tasks.es.js";
|
|
36
|
+
import "../../../../api/generated/teams.es.js";
|
|
37
|
+
import "../../../../api/generated/thumbnails.es.js";
|
|
38
|
+
import "../../../../api/generated/uRIs.es.js";
|
|
39
|
+
import "../../../../api/generated/users.es.js";
|
|
40
|
+
import "../../../../api/generated/versions.es.js";
|
|
41
|
+
import "../../../../api/generated/workfiles.es.js";
|
|
42
|
+
import "../../../../api/generated/ynputCloud.es.js";
|
|
43
|
+
import "../../../../api/generated/grouping.es.js";
|
|
44
|
+
import "../../../../api/generated/views.es.js";
|
|
45
|
+
import "../../../../api/queries/actions/getActions.es.js";
|
|
46
|
+
import "../../../../api/queries/activities/getActivities.es.js";
|
|
47
|
+
import "../../../../api/queries/activities/updateActivities.es.js";
|
|
48
|
+
import "../../../../api/queries/activities/updateReaction.es.js";
|
|
49
|
+
import "../../../../api/queries/activities/getMentions.es.js";
|
|
50
|
+
import "../../../../api/queries/activities/getCategories.es.js";
|
|
51
|
+
import "../../../../api/queries/addons/getAddons.es.js";
|
|
52
|
+
import "../../../../api/queries/addons/updateAddons.es.js";
|
|
53
|
+
import "../../../../api/queries/attributes/getAttributes.es.js";
|
|
54
|
+
import "../../../../api/queries/attributes/updateAttributes.es.js";
|
|
55
|
+
import "../../../../api/queries/authentication/getAuthentication.es.js";
|
|
56
|
+
import "../../../../api/queries/cloud/cloud.es.js";
|
|
57
|
+
import "../../../../api/queries/columnStats/metricTargets.es.js";
|
|
58
|
+
import "../../../../api/queries/config/getConfig.es.js";
|
|
59
|
+
import "../../../../api/queries/config/updateConfig.es.js";
|
|
60
|
+
import "../../../../api/queries/entities/getEntity.es.js";
|
|
61
|
+
import "../../../../api/queries/entities/getEntityPanel.es.js";
|
|
62
|
+
import "../../../../api/queries/overview/getOverview.es.js";
|
|
63
|
+
import "../../../../api/queries/overview/updateOverview.es.js";
|
|
64
|
+
import "../../../../api/queries/versions/getVersionsProducts.es.js";
|
|
65
|
+
import "../../../../api/queries/links/getEntityLinks.es.js";
|
|
66
|
+
import "../../../../api/queries/entities/updateEntity.es.js";
|
|
67
|
+
import "../../../../api/queries/entityLists/getLists.es.js";
|
|
68
|
+
import "../../../../api/queries/entityLists/updateLists.es.js";
|
|
69
|
+
import "../../../../api/queries/entityLists/getListsAttributes.es.js";
|
|
70
|
+
import "../../../../api/queries/entityLists/listItemsColumnStats.es.js";
|
|
71
|
+
import "../../../../api/queries/entityLists/updateListsAttributes.es.js";
|
|
72
|
+
import "../../../../api/queries/entityLists/listFolders.es.js";
|
|
73
|
+
import "../../../../api/queries/folders/getFolders.es.js";
|
|
74
|
+
import "../../../../api/queries/folders/getFolderDeleteInfo.es.js";
|
|
75
|
+
import "../../../../api/queries/grouping/getGrouping.es.js";
|
|
76
|
+
import "../../../../api/queries/links/updateLinks.es.js";
|
|
77
|
+
import "../../../../api/queries/links/getLinks.es.js";
|
|
78
|
+
import "../../../../api/queries/permissions/getPermissions.es.js";
|
|
79
|
+
import "../../../../api/queries/products/createProduct.es.js";
|
|
80
|
+
import "../../../../api/queries/products/getFolderProducts.es.js";
|
|
81
|
+
import "../../../../api/queries/project/getProject.es.js";
|
|
82
|
+
import "../../../../api/queries/project/updateProject.es.js";
|
|
83
|
+
import "../../../../api/queries/projectFolders/projectFolders.es.js";
|
|
84
|
+
import "../../../../api/queries/review/getReview.es.js";
|
|
85
|
+
import "../../../../api/queries/review/updateReview.es.js";
|
|
86
|
+
import "../../../../api/queries/share/share.es.js";
|
|
87
|
+
import "../../../../api/queries/system/getSystem.es.js";
|
|
88
|
+
import "../../../../api/queries/tasks/getTasks.es.js";
|
|
89
|
+
import "../../../../api/queries/tasks/updateTasks.es.js";
|
|
90
|
+
import "../../../../api/queries/teams/getTeams.es.js";
|
|
91
|
+
import "../../../../api/queries/userDashboard/getUserDashboard.es.js";
|
|
92
|
+
import "../../../../api/queries/users/getUsers.es.js";
|
|
93
|
+
import "../../../../api/queries/users/updateUsers.es.js";
|
|
94
|
+
import "../../../../api/queries/users/guests.es.js";
|
|
95
|
+
import "../../../../api/queries/versions/updateVersions.es.js";
|
|
96
|
+
import "../../../../api/queries/views/getViews.es.js";
|
|
97
|
+
import "../../../../api/queries/views/updateViews.es.js";
|
|
98
|
+
import "../../../../api/queries/watchers/getWatchers.es.js";
|
|
99
|
+
import "../../../../api/queries/uris/getUris.es.js";
|
|
6
100
|
import "../../../../util/pubsub.es.js";
|
|
7
|
-
import { useState as
|
|
8
|
-
const
|
|
9
|
-
const [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}, [x]);
|
|
13
|
-
const f = m, J = f?.filter ?? {}, N = f?.showHierarchy ?? !0, w = f?.sliceType, G = B(
|
|
14
|
-
() => Q(f),
|
|
15
|
-
[JSON.stringify(m)]
|
|
101
|
+
import { useState as f, useMemo as j, useEffect as h, useCallback as l } from "react";
|
|
102
|
+
const Nr = ({ viewSettings: i, updateViewSettings: r }) => {
|
|
103
|
+
const [d, C] = f(null), [F, m] = f(null), [v, c] = f(null), n = i, M = n?.filter ?? {}, O = n?.showHierarchy ?? !0, B = n?.sliceType, g = j(
|
|
104
|
+
() => b(n),
|
|
105
|
+
[JSON.stringify(i)]
|
|
16
106
|
);
|
|
17
107
|
h(() => {
|
|
18
|
-
|
|
19
|
-
}, [JSON.stringify(
|
|
20
|
-
|
|
108
|
+
C(null);
|
|
109
|
+
}, [JSON.stringify(i?.filter)]), h(() => {
|
|
110
|
+
m(null);
|
|
21
111
|
}, [
|
|
22
|
-
|
|
23
|
-
|
|
112
|
+
i?.showHierarchy,
|
|
113
|
+
i?.groupBy
|
|
24
114
|
]), h(() => {
|
|
25
|
-
|
|
26
|
-
}, [JSON.stringify(
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
columnSummaries: { ...l.columnSummaries, ...r.summaries },
|
|
30
|
-
columnSummaryScopes: {
|
|
31
|
-
...l.columnSummaryScopes,
|
|
32
|
-
...r.scopes
|
|
33
|
-
},
|
|
34
|
-
columnSummaryFormats: {
|
|
35
|
-
...l.columnSummaryFormats,
|
|
36
|
-
...r.formats
|
|
37
|
-
}
|
|
38
|
-
} : l, [l, r]), D = i(() => {
|
|
39
|
-
}, []), E = i(
|
|
115
|
+
c(null);
|
|
116
|
+
}, [JSON.stringify(i?.columns)]);
|
|
117
|
+
const U = d !== null ? d : M, k = F !== null ? F : O, p = v || g, L = l(() => {
|
|
118
|
+
}, []), J = l(
|
|
40
119
|
async (o) => {
|
|
41
|
-
await
|
|
120
|
+
await r({ sliceType: o }, L, o, {
|
|
42
121
|
errorMessage: "Failed to update slicer type"
|
|
43
122
|
});
|
|
44
123
|
},
|
|
45
|
-
[
|
|
46
|
-
),
|
|
124
|
+
[r]
|
|
125
|
+
), N = l(
|
|
47
126
|
async (o) => {
|
|
48
|
-
await
|
|
127
|
+
await r({ filter: o }, C, o, {
|
|
49
128
|
errorMessage: "Failed to update filter settings"
|
|
50
129
|
});
|
|
51
130
|
},
|
|
52
|
-
[
|
|
53
|
-
),
|
|
131
|
+
[r]
|
|
132
|
+
), x = l(
|
|
54
133
|
async (o) => {
|
|
55
|
-
if (o &&
|
|
56
|
-
const
|
|
57
|
-
t
|
|
58
|
-
const
|
|
59
|
-
await
|
|
60
|
-
{ ...
|
|
61
|
-
|
|
134
|
+
if (o && p?.groupBy) {
|
|
135
|
+
const t = { ...p, groupBy: void 0 };
|
|
136
|
+
c(t);
|
|
137
|
+
const s = T(t);
|
|
138
|
+
await r(
|
|
139
|
+
{ ...s, showHierarchy: !0 },
|
|
140
|
+
m,
|
|
62
141
|
o,
|
|
63
142
|
{ errorMessage: "Failed to update hierarchy setting" }
|
|
64
143
|
);
|
|
65
144
|
return;
|
|
66
145
|
}
|
|
67
|
-
await
|
|
146
|
+
await r(
|
|
68
147
|
{ showHierarchy: o },
|
|
69
|
-
|
|
148
|
+
m,
|
|
70
149
|
o,
|
|
71
150
|
{ errorMessage: "Failed to update hierarchy setting" }
|
|
72
151
|
);
|
|
73
152
|
},
|
|
74
|
-
[
|
|
75
|
-
),
|
|
76
|
-
async (o,
|
|
77
|
-
|
|
78
|
-
summaries: { ...c.summaries, ...o.columnSummaries || {} },
|
|
79
|
-
scopes: { ...c.scopes, ...o.columnSummaryScopes || {} },
|
|
80
|
-
formats: { ...c.formats, ...o.columnSummaryFormats || {} }
|
|
81
|
-
}));
|
|
82
|
-
const u = e || [
|
|
153
|
+
[r, p]
|
|
154
|
+
), G = l(
|
|
155
|
+
async (o, t) => {
|
|
156
|
+
const s = t || [
|
|
83
157
|
...o.columnOrder || [],
|
|
84
158
|
...Object.keys(o.columnVisibility || {}),
|
|
85
159
|
...o.columnPinning?.left || [],
|
|
86
160
|
...o.columnPinning?.right || []
|
|
87
|
-
].filter(Boolean).filter((
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
161
|
+
].filter(Boolean).filter((y, H, e) => e.indexOf(y) === H), a = T(o, s), u = !!o.groupBy;
|
|
162
|
+
u && m(!1), await r(
|
|
163
|
+
u ? { ...a, showHierarchy: !1 } : a,
|
|
164
|
+
c,
|
|
91
165
|
o,
|
|
92
166
|
{ errorMessage: "Failed to update columns" }
|
|
93
167
|
);
|
|
94
168
|
},
|
|
95
|
-
[
|
|
96
|
-
),
|
|
97
|
-
async (o,
|
|
98
|
-
const
|
|
99
|
-
showHierarchy:
|
|
169
|
+
[r]
|
|
170
|
+
), P = l(
|
|
171
|
+
async (o, t, s) => {
|
|
172
|
+
const a = {
|
|
173
|
+
showHierarchy: t,
|
|
100
174
|
groupBy: o,
|
|
101
|
-
groupSortByDesc: o ?
|
|
102
|
-
},
|
|
103
|
-
...
|
|
104
|
-
groupBy: o ? { id: o, desc:
|
|
175
|
+
groupSortByDesc: o ? s ?? !1 : void 0
|
|
176
|
+
}, y = {
|
|
177
|
+
...p,
|
|
178
|
+
groupBy: o ? { id: o, desc: s ?? !1 } : void 0
|
|
105
179
|
};
|
|
106
|
-
await
|
|
107
|
-
|
|
108
|
-
(
|
|
109
|
-
|
|
180
|
+
await r(
|
|
181
|
+
a,
|
|
182
|
+
(e) => {
|
|
183
|
+
e === null ? (m(null), c(null)) : (m(e.showHierarchy), c(e.columns));
|
|
110
184
|
},
|
|
111
|
-
{ showHierarchy:
|
|
185
|
+
{ showHierarchy: t, columns: y },
|
|
112
186
|
{ errorMessage: "Failed to update grouping" }
|
|
113
187
|
);
|
|
114
188
|
},
|
|
115
|
-
[
|
|
189
|
+
[r, p]
|
|
116
190
|
);
|
|
117
191
|
return {
|
|
118
|
-
filters:
|
|
119
|
-
onUpdateFilters:
|
|
120
|
-
showHierarchy:
|
|
121
|
-
onUpdateHierarchy:
|
|
122
|
-
columns:
|
|
123
|
-
onUpdateColumns:
|
|
124
|
-
onUpdateGroupBy:
|
|
125
|
-
sliceType:
|
|
126
|
-
onUpdateSliceType:
|
|
192
|
+
filters: U,
|
|
193
|
+
onUpdateFilters: N,
|
|
194
|
+
showHierarchy: k,
|
|
195
|
+
onUpdateHierarchy: x,
|
|
196
|
+
columns: p,
|
|
197
|
+
onUpdateColumns: G,
|
|
198
|
+
onUpdateGroupBy: P,
|
|
199
|
+
sliceType: B,
|
|
200
|
+
onUpdateSliceType: J
|
|
127
201
|
};
|
|
128
202
|
};
|
|
129
203
|
export {
|
|
130
|
-
|
|
204
|
+
Nr as useOverviewViewSettings
|
|
131
205
|
};
|
|
132
206
|
//# sourceMappingURL=useOverviewViewSettings.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOverviewViewSettings.es.js","sources":["../../../../../../../src/containers/Views/hooks/pages/useOverviewViewSettings.ts"],"sourcesContent":["/**\n * Unified hook for managing all overview page view settings.\n *\n * The hook handles:\n * - Filter settings (QueryFilter format)\n * - Hierarchy visibility toggle\n * - Column configurations (ColumnsConfig format)\n *\n * Must be used within a ViewsProvider context.\n */\n\nimport { useViewsContext } from '../../context/ViewsContext'\nimport { OverviewSettings } from '@shared/api'\nimport { ColumnsConfig } from '@shared/containers/ProjectTreeTable'\nimport {\n convertColumnConfigToTanstackStates,\n convertTanstackStatesToColumnConfig,\n} from '@shared/util'\nimport { UpdateViewSettingsFn } from '../../utils/viewUpdateHelper'\nimport { useState, useEffect, useCallback, useMemo } from 'react'\n\n// Import the internal QueryFilter type that the app uses\nimport { QueryFilter } from '@shared/containers/ProjectTreeTable/types/operations'\nimport {\n SummaryCalc,\n SummaryFormat,\n RowScope,\n} from '@shared/containers/ProjectTreeTable/types/summaryTypes'\n\ntype Return = {\n // Filter management\n filters: QueryFilter\n onUpdateFilters: (filters: QueryFilter) => void\n\n // Hierarchy management\n showHierarchy: boolean\n onUpdateHierarchy: (showHierarchy: boolean) => void\n\n // Column management\n columns: ColumnsConfig\n onUpdateColumns: (columns: ColumnsConfig, allColumnIds?: string[]) => void\n // Atomic groupBy + showHierarchy update (avoids 2-PATCH race)\n onUpdateGroupBy: (groupBy: string | undefined, showHierarchy: boolean, desc?: boolean) => void\n // Slicer type management\n sliceType: string | undefined\n onUpdateSliceType: (sliceType: string) => void\n}\n\ntype Props = {\n viewSettings: OverviewSettings | undefined\n updateViewSettings: UpdateViewSettingsFn\n}\n\nexport const useOverviewViewSettings = ({ viewSettings, updateViewSettings }: Props): Return => {\n // Local state for immediate updates\n const [localFilters, setLocalFilters] = useState<QueryFilter | null>(null)\n const [localHierarchy, setLocalHierarchy] = useState<boolean | null>(null)\n const [localColumns, setLocalColumns] = useState<ColumnsConfig | null>(null)\n\n // Backend drops summary/summaryScope/summaryFormat from ColumnItemModel, so\n // the post-save refetch would revert them — hold the selections here, session only.\n const { selectedView, workingView, isViewWorking, editingViewId } = useViewsContext()\n const [summaryOverrides, setSummaryOverrides] = useState<{\n summaries: Record<string, SummaryCalc>\n scopes: Record<string, RowScope>\n formats: Record<string, SummaryFormat>\n }>({ summaries: {}, scopes: {}, formats: {} })\n\n // Editing a named view forks to the working view (selectedView.id flips), but\n // editingViewId keeps pointing at the origin, so the key stays stable while editing.\n const viewKey = isViewWorking\n ? editingViewId || workingView?.id || 'working'\n : selectedView?.id\n\n // Reset overrides when a different view's settings come on screen\n useEffect(() => {\n setSummaryOverrides({ summaries: {}, scopes: {}, formats: {} })\n }, [viewKey])\n\n // Get server settings\n const overviewSettings = viewSettings as OverviewSettings\n const serverFilters = (overviewSettings?.filter as any) ?? {}\n const serverHierarchy = overviewSettings?.showHierarchy ?? true\n const serverSliceType = overviewSettings?.sliceType\n\n const serverColumns = useMemo(\n () => convertColumnConfigToTanstackStates(overviewSettings),\n [JSON.stringify(viewSettings)],\n )\n\n // Sync local state with server when the relevant setting fields change.\n // Use per-field deps (not JSON.stringify(viewSettings)) so a change to one\n // field does not clear in-flight local state for unrelated fields, which\n // would cause a visible flicker during rapid sequential updates.\n useEffect(() => {\n setLocalFilters(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify((viewSettings as OverviewSettings)?.filter)])\n\n useEffect(() => {\n setLocalHierarchy(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n (viewSettings as OverviewSettings)?.showHierarchy,\n (viewSettings as OverviewSettings)?.groupBy,\n ])\n\n useEffect(() => {\n setLocalColumns(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify((viewSettings as OverviewSettings)?.columns)])\n\n // Use local state if available, otherwise use server state\n const filters = localFilters !== null ? localFilters : serverFilters\n const showHierarchy = localHierarchy !== null ? localHierarchy : serverHierarchy\n const columnsBase = localColumns || serverColumns\n const columns = useMemo(() => {\n const hasOverrides =\n Object.keys(summaryOverrides.summaries).length ||\n Object.keys(summaryOverrides.scopes).length ||\n Object.keys(summaryOverrides.formats).length\n if (!hasOverrides) return columnsBase\n return {\n ...columnsBase,\n columnSummaries: { ...columnsBase.columnSummaries, ...summaryOverrides.summaries },\n columnSummaryScopes: {\n ...columnsBase.columnSummaryScopes,\n ...summaryOverrides.scopes,\n },\n columnSummaryFormats: {\n ...columnsBase.columnSummaryFormats,\n ...summaryOverrides.formats,\n },\n }\n }, [columnsBase, summaryOverrides])\n\n // Slice type update handler\n const noop = useCallback(() => {}, [])\n const onUpdateSliceType = useCallback(\n async (newSliceType: string) => {\n await updateViewSettings({ sliceType: newSliceType }, noop, newSliceType, {\n errorMessage: 'Failed to update slicer type',\n })\n },\n [updateViewSettings],\n )\n\n // Filter update handler\n const onUpdateFilters = useCallback(\n async (newFilters: QueryFilter) => {\n await updateViewSettings({ filter: newFilters as any }, setLocalFilters, newFilters, {\n errorMessage: 'Failed to update filter settings',\n })\n },\n [updateViewSettings],\n )\n\n // Hierarchy update handler\n const onUpdateHierarchy = useCallback(\n async (newShowHierarchy: boolean) => {\n // If turning hierarchy ON while grouped, clear groupBy in the same update\n if (newShowHierarchy && (columns as ColumnsConfig)?.groupBy) {\n const clearedColumns: ColumnsConfig = { ...columns, groupBy: undefined }\n // Optimistically update local columns to remove grouping\n setLocalColumns(clearedColumns)\n const settings = convertTanstackStatesToColumnConfig(clearedColumns)\n await updateViewSettings(\n { ...settings, showHierarchy: true },\n setLocalHierarchy,\n newShowHierarchy,\n { errorMessage: 'Failed to update hierarchy setting' },\n )\n return\n }\n\n await updateViewSettings(\n { showHierarchy: newShowHierarchy },\n setLocalHierarchy,\n newShowHierarchy,\n { errorMessage: 'Failed to update hierarchy setting' },\n )\n },\n [updateViewSettings, columns],\n )\n\n // Column update handler\n const onUpdateColumns = useCallback(\n async (tableSettings: ColumnsConfig, allColumnIds?: string[]) => {\n // Keep the summary footer choices alive across the working-view refetch\n // (backend drops these fields, so server state can't be trusted for them).\n if (\n tableSettings.columnSummaries ||\n tableSettings.columnSummaryScopes ||\n tableSettings.columnSummaryFormats\n ) {\n setSummaryOverrides((prev) => ({\n summaries: { ...prev.summaries, ...(tableSettings.columnSummaries || {}) },\n scopes: { ...prev.scopes, ...(tableSettings.columnSummaryScopes || {}) },\n formats: { ...prev.formats, ...(tableSettings.columnSummaryFormats || {}) },\n }))\n }\n\n // Derive a stable allColumnIds if not provided to preserve order and grouping on server\n const derivedAll =\n allColumnIds ||\n [\n ...(tableSettings.columnOrder || []),\n ...Object.keys(tableSettings.columnVisibility || {}),\n ...((tableSettings.columnPinning?.left as string[]) || []),\n ...((tableSettings.columnPinning?.right as string[]) || []),\n ]\n .filter(Boolean)\n .filter((v, i, a) => a.indexOf(v) === i)\n\n const settings = convertTanstackStatesToColumnConfig(tableSettings, derivedAll)\n const hasGroupBy = !!tableSettings.groupBy\n\n // If grouping is being set, turn off hierarchy in the same update for consistency\n if (hasGroupBy) {\n // Optimistically reflect hierarchy off\n setLocalHierarchy(false)\n }\n\n await updateViewSettings(\n hasGroupBy ? { ...settings, showHierarchy: false } : settings,\n setLocalColumns,\n tableSettings,\n { errorMessage: 'Failed to update columns' },\n )\n },\n [updateViewSettings],\n )\n\n // Atomic groupBy + showHierarchy update.\n // Merges both fields into a single PATCH to avoid a race where two sequential\n // updateViewSettings calls both capture the same pre-update viewSettings snapshot\n // and the second overwrites the first.\n const onUpdateGroupBy = useCallback(\n async (groupBy: string | undefined, newShowHierarchy: boolean, desc?: boolean) => {\n const updates: Partial<OverviewSettings> = {\n showHierarchy: newShowHierarchy,\n groupBy: groupBy,\n groupSortByDesc: groupBy ? desc ?? false : undefined,\n }\n\n const baseColumns = columns as ColumnsConfig\n const newLocalColumns: ColumnsConfig = {\n ...baseColumns,\n groupBy: groupBy ? { id: groupBy, desc: desc ?? false } : undefined,\n }\n\n // Combined setter lets updateViewSettings manage optimism/reset for both\n // local states atomically (so error paths don't leave one stale).\n const combinedSetter = (value: { showHierarchy: boolean; columns: ColumnsConfig } | null) => {\n if (value === null) {\n setLocalHierarchy(null)\n setLocalColumns(null)\n } else {\n setLocalHierarchy(value.showHierarchy)\n setLocalColumns(value.columns)\n }\n }\n\n await updateViewSettings(\n updates,\n combinedSetter,\n { showHierarchy: newShowHierarchy, columns: newLocalColumns },\n { errorMessage: 'Failed to update grouping' },\n )\n },\n [updateViewSettings, columns],\n )\n\n return {\n filters,\n onUpdateFilters,\n showHierarchy,\n onUpdateHierarchy,\n columns,\n onUpdateColumns,\n onUpdateGroupBy,\n sliceType: serverSliceType,\n onUpdateSliceType,\n }\n}\n"],"names":["useOverviewViewSettings","viewSettings","updateViewSettings","localFilters","setLocalFilters","useState","localHierarchy","setLocalHierarchy","localColumns","setLocalColumns","selectedView","workingView","isViewWorking","editingViewId","useViewsContext","summaryOverrides","setSummaryOverrides","viewKey","useEffect","overviewSettings","serverFilters","serverHierarchy","serverSliceType","serverColumns","useMemo","convertColumnConfigToTanstackStates","filters","showHierarchy","columnsBase","columns","noop","useCallback","onUpdateSliceType","newSliceType","onUpdateFilters","newFilters","onUpdateHierarchy","newShowHierarchy","clearedColumns","settings","convertTanstackStatesToColumnConfig","onUpdateColumns","tableSettings","allColumnIds","prev","derivedAll","v","i","a","hasGroupBy","onUpdateGroupBy","groupBy","desc","updates","newLocalColumns","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useOverviewViewSettings.es.js","sources":["../../../../../../../src/containers/Views/hooks/pages/useOverviewViewSettings.ts"],"sourcesContent":["/**\n * Unified hook for managing all overview page view settings.\n *\n * The hook handles:\n * - Filter settings (QueryFilter format)\n * - Hierarchy visibility toggle\n * - Column configurations (ColumnsConfig format)\n *\n * Must be used within a ViewsProvider context.\n */\n\nimport { OverviewSettings } from '@shared/api'\nimport { ColumnsConfig } from '@shared/containers/ProjectTreeTable'\nimport {\n convertColumnConfigToTanstackStates,\n convertTanstackStatesToColumnConfig,\n} from '@shared/util'\nimport { UpdateViewSettingsFn } from '../../utils/viewUpdateHelper'\nimport { useState, useEffect, useCallback, useMemo } from 'react'\n\n// Import the internal QueryFilter type that the app uses\nimport { QueryFilter } from '@shared/containers/ProjectTreeTable/types/operations'\n\ntype Return = {\n // Filter management\n filters: QueryFilter\n onUpdateFilters: (filters: QueryFilter) => void\n\n // Hierarchy management\n showHierarchy: boolean\n onUpdateHierarchy: (showHierarchy: boolean) => void\n\n // Column management\n columns: ColumnsConfig\n onUpdateColumns: (columns: ColumnsConfig, allColumnIds?: string[]) => void\n // Atomic groupBy + showHierarchy update (avoids 2-PATCH race)\n onUpdateGroupBy: (groupBy: string | undefined, showHierarchy: boolean, desc?: boolean) => void\n // Slicer type management\n sliceType: string | undefined\n onUpdateSliceType: (sliceType: string) => void\n}\n\ntype Props = {\n viewSettings: OverviewSettings | undefined\n updateViewSettings: UpdateViewSettingsFn\n}\n\nexport const useOverviewViewSettings = ({ viewSettings, updateViewSettings }: Props): Return => {\n // Local state for immediate updates\n const [localFilters, setLocalFilters] = useState<QueryFilter | null>(null)\n const [localHierarchy, setLocalHierarchy] = useState<boolean | null>(null)\n const [localColumns, setLocalColumns] = useState<ColumnsConfig | null>(null)\n\n // Get server settings\n const overviewSettings = viewSettings as OverviewSettings\n const serverFilters = (overviewSettings?.filter as any) ?? {}\n const serverHierarchy = overviewSettings?.showHierarchy ?? true\n const serverSliceType = overviewSettings?.sliceType\n\n const serverColumns = useMemo(\n () => convertColumnConfigToTanstackStates(overviewSettings),\n [JSON.stringify(viewSettings)],\n )\n\n // Sync local state with server when the relevant setting fields change.\n // Use per-field deps (not JSON.stringify(viewSettings)) so a change to one\n // field does not clear in-flight local state for unrelated fields, which\n // would cause a visible flicker during rapid sequential updates.\n useEffect(() => {\n setLocalFilters(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify((viewSettings as OverviewSettings)?.filter)])\n\n useEffect(() => {\n setLocalHierarchy(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n (viewSettings as OverviewSettings)?.showHierarchy,\n (viewSettings as OverviewSettings)?.groupBy,\n ])\n\n useEffect(() => {\n setLocalColumns(null)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify((viewSettings as OverviewSettings)?.columns)])\n\n // Use local state if available, otherwise use server state\n const filters = localFilters !== null ? localFilters : serverFilters\n const showHierarchy = localHierarchy !== null ? localHierarchy : serverHierarchy\n const columns = localColumns || serverColumns\n\n // Slice type update handler\n const noop = useCallback(() => {}, [])\n const onUpdateSliceType = useCallback(\n async (newSliceType: string) => {\n await updateViewSettings({ sliceType: newSliceType }, noop, newSliceType, {\n errorMessage: 'Failed to update slicer type',\n })\n },\n [updateViewSettings],\n )\n\n // Filter update handler\n const onUpdateFilters = useCallback(\n async (newFilters: QueryFilter) => {\n await updateViewSettings({ filter: newFilters as any }, setLocalFilters, newFilters, {\n errorMessage: 'Failed to update filter settings',\n })\n },\n [updateViewSettings],\n )\n\n // Hierarchy update handler\n const onUpdateHierarchy = useCallback(\n async (newShowHierarchy: boolean) => {\n // If turning hierarchy ON while grouped, clear groupBy in the same update\n if (newShowHierarchy && (columns as ColumnsConfig)?.groupBy) {\n const clearedColumns: ColumnsConfig = { ...columns, groupBy: undefined }\n // Optimistically update local columns to remove grouping\n setLocalColumns(clearedColumns)\n const settings = convertTanstackStatesToColumnConfig(clearedColumns)\n await updateViewSettings(\n { ...settings, showHierarchy: true },\n setLocalHierarchy,\n newShowHierarchy,\n { errorMessage: 'Failed to update hierarchy setting' },\n )\n return\n }\n\n await updateViewSettings(\n { showHierarchy: newShowHierarchy },\n setLocalHierarchy,\n newShowHierarchy,\n { errorMessage: 'Failed to update hierarchy setting' },\n )\n },\n [updateViewSettings, columns],\n )\n\n // Column update handler\n const onUpdateColumns = useCallback(\n async (tableSettings: ColumnsConfig, allColumnIds?: string[]) => {\n // Derive a stable allColumnIds if not provided to preserve order and grouping on server\n const derivedAll =\n allColumnIds ||\n [\n ...(tableSettings.columnOrder || []),\n ...Object.keys(tableSettings.columnVisibility || {}),\n ...((tableSettings.columnPinning?.left as string[]) || []),\n ...((tableSettings.columnPinning?.right as string[]) || []),\n ]\n .filter(Boolean)\n .filter((v, i, a) => a.indexOf(v) === i)\n\n const settings = convertTanstackStatesToColumnConfig(tableSettings, derivedAll)\n const hasGroupBy = !!tableSettings.groupBy\n\n // If grouping is being set, turn off hierarchy in the same update for consistency\n if (hasGroupBy) {\n // Optimistically reflect hierarchy off\n setLocalHierarchy(false)\n }\n\n await updateViewSettings(\n hasGroupBy ? { ...settings, showHierarchy: false } : settings,\n setLocalColumns,\n tableSettings,\n { errorMessage: 'Failed to update columns' },\n )\n },\n [updateViewSettings],\n )\n\n // Atomic groupBy + showHierarchy update.\n // Merges both fields into a single PATCH to avoid a race where two sequential\n // updateViewSettings calls both capture the same pre-update viewSettings snapshot\n // and the second overwrites the first.\n const onUpdateGroupBy = useCallback(\n async (groupBy: string | undefined, newShowHierarchy: boolean, desc?: boolean) => {\n const updates: Partial<OverviewSettings> = {\n showHierarchy: newShowHierarchy,\n groupBy: groupBy,\n groupSortByDesc: groupBy ? desc ?? false : undefined,\n }\n\n const baseColumns = columns as ColumnsConfig\n const newLocalColumns: ColumnsConfig = {\n ...baseColumns,\n groupBy: groupBy ? { id: groupBy, desc: desc ?? false } : undefined,\n }\n\n // Combined setter lets updateViewSettings manage optimism/reset for both\n // local states atomically (so error paths don't leave one stale).\n const combinedSetter = (value: { showHierarchy: boolean; columns: ColumnsConfig } | null) => {\n if (value === null) {\n setLocalHierarchy(null)\n setLocalColumns(null)\n } else {\n setLocalHierarchy(value.showHierarchy)\n setLocalColumns(value.columns)\n }\n }\n\n await updateViewSettings(\n updates,\n combinedSetter,\n { showHierarchy: newShowHierarchy, columns: newLocalColumns },\n { errorMessage: 'Failed to update grouping' },\n )\n },\n [updateViewSettings, columns],\n )\n\n return {\n filters,\n onUpdateFilters,\n showHierarchy,\n onUpdateHierarchy,\n columns,\n onUpdateColumns,\n onUpdateGroupBy,\n sliceType: serverSliceType,\n onUpdateSliceType,\n }\n}\n"],"names":["useOverviewViewSettings","viewSettings","updateViewSettings","localFilters","setLocalFilters","useState","localHierarchy","setLocalHierarchy","localColumns","setLocalColumns","overviewSettings","serverFilters","serverHierarchy","serverSliceType","serverColumns","useMemo","convertColumnConfigToTanstackStates","useEffect","filters","showHierarchy","columns","noop","useCallback","onUpdateSliceType","newSliceType","onUpdateFilters","newFilters","onUpdateHierarchy","newShowHierarchy","clearedColumns","settings","convertTanstackStatesToColumnConfig","onUpdateColumns","tableSettings","allColumnIds","derivedAll","v","i","a","hasGroupBy","onUpdateGroupBy","groupBy","desc","updates","newLocalColumns","value"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const O=require("../../../../../_virtual/jsx-runtime.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");const S=require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const q=require("react"),j=require("../ViewsMenu/ViewsMenu.cjs.js"),F=require("@ynput/ayon-react-components"),G=require("../utils/generateWorkingView.cjs.js"),y=require("react-toastify"),K=require("../../../hooks/useLoadModule.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("lodash");require("../../../context/RemoteModulesContext.cjs.js");const v=require("../../../context/PowerpackContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("../../../context/SubtasksModulesContextInstance.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const O=require("../../../../../_virtual/jsx-runtime.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");const S=require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const q=require("react"),j=require("../ViewsMenu/ViewsMenu.cjs.js"),F=require("@ynput/ayon-react-components"),G=require("../utils/generateWorkingView.cjs.js"),y=require("react-toastify"),K=require("../../../hooks/useLoadModule.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("lodash");require("../../../context/RemoteModulesContext.cjs.js");const v=require("../../../context/PowerpackContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("uuid");require("../../../util/pubsub.cjs.js");require("../../../context/SubtasksModulesContextInstance.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../../ProjectTreeTable/components/GroupSettingsFallback.cjs.js");const Q=require("../utils/getCustomViewsFallback.cjs.js"),o=require("../types.cjs.js"),T=({viewsList:w,workingView:n,viewType:a,viewAlias:u,projectName:m,currentUser:V,useWorkingView:g,editingViewId:I,collapsed:t,setCollapsed:h,onSelect:s,onEdit:D,onSave:$,onResetWorkingView:c,selectedId:l})=>{const{powerLicense:d}=v.usePowerpack(),[C]=S.useCreateViewMutation(),R=q.useMemo(()=>w.map(e=>({...e,isOwner:e.owner===V?.name,highlighted:I===e.id?"save":void 0})),[w,V,I]),x={id:o.WORKING_VIEW_ID,label:g?`Personal ${u.toLowerCase()}`:`Working ${u.toLowerCase()}`,startContent:g&&O.jsxRuntimeExports.jsx(F.Icon,{icon:"person"}),isEditable:!1},E=q.useCallback(async()=>{let e=n?.id;if(!n)try{console.warn(`No working ${u.toLowerCase()} found, creating a new one`);const r=G.generateWorkingView();await C({payload:r,viewType:a,projectName:m}).unwrap(),e=r.id}catch(r){y.toast.error(`Failed to create working ${u}: ${r}`)}s(e)},[n,a,C,m,s]),P=async e=>{try{await $(e),s(e)}catch(r){y.toast.error(r)}},[B,{isLoading:z}]=K.useLoadModule({addon:"powerpack",remote:"views",module:"getCustomViews",fallback:Q.getCustomViewsFallback,skip:!a||!d}),{myViews:_,sharedViews:k,allPrivateViews:p}=B({viewsList:R,onEdit:D,onSelect:s,onSave:P}),f=q.useCallback(e=>{h({...t,[e]:!t[e]})},[t,h]),W=q.useMemo(()=>[{id:"myViews",title:`My ${u.toLowerCase()}s`,items:_},{id:"sharedViews",title:`Shared ${u.toLowerCase()}s`,items:k},{id:"allPrivateViews",title:`All private ${u.toLowerCase()}s`,items:p}],[_,k,p]),L=q.useMemo(()=>({...x,onClick:E,isEditable:!!c,onResetView:c}),[E,c]);return q.useMemo(()=>{const e=[L],r=W.filter(i=>d&&(i.items?.length||0)>0);return r.length>0&&e.push(j.VIEW_DIVIDER),r.forEach(i=>{const M=!!t[i.id];if(e.push({type:"section",id:i.id,title:i.title,collapsed:M,onToggle:()=>f(i.id)}),!M)e.push(...i.items);else if(l){const b=i.items.find(N=>N.id===l);b&&e.push(b)}}),e},[L,W,t,f,l,d])};exports.BASE_VIEW_ID=o.BASE_VIEW_ID;exports.NEW_VIEW_ID=o.NEW_VIEW_ID;exports.WORKING_VIEW_ID=o.WORKING_VIEW_ID;exports.default=T;
|
|
2
2
|
//# sourceMappingURL=useBuildViewMenuItems.cjs.js.map
|
|
@@ -107,6 +107,8 @@ import "../../../context/RemoteModulesContext.es.js";
|
|
|
107
107
|
import { usePowerpack as q } from "../../../context/PowerpackContext.es.js";
|
|
108
108
|
import "../../../context/UriContext.es.js";
|
|
109
109
|
import "../../../context/DetailsPanelContextInstance.es.js";
|
|
110
|
+
import "uuid";
|
|
111
|
+
import "../../../util/pubsub.es.js";
|
|
110
112
|
import "../../../context/SubtasksModulesContextInstance.es.js";
|
|
111
113
|
import "../../../context/ThumbnailUploaderContext.es.js";
|
|
112
114
|
import "../../../context/SettingsPanelContext.es.js";
|
|
@@ -124,8 +126,6 @@ import "../../../context/ProjectFoldersContext.es.js";
|
|
|
124
126
|
import "react-redux";
|
|
125
127
|
import "custom-protocol-check";
|
|
126
128
|
import "../../ProjectTreeTable/components/GroupSettingsFallback.es.js";
|
|
127
|
-
import "uuid";
|
|
128
|
-
import "../../../util/pubsub.es.js";
|
|
129
129
|
import { getCustomViewsFallback as z } from "../utils/getCustomViewsFallback.es.js";
|
|
130
130
|
import { WORKING_VIEW_ID as H } from "../types.es.js";
|
|
131
131
|
import { BASE_VIEW_ID as Ir, NEW_VIEW_ID as Er } from "../types.es.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewUpdateHelper.cjs.js","sources":["../../../../../../src/containers/Views/utils/viewUpdateHelper.ts"],"sourcesContent":["/**\n * Shared helper for updating view settings with optimistic local state management.\n *\n * Sequential updateViewSettings calls in the same event tick MUST chain correctly:\n * the second call has to see the first call's changes. Closure-captured\n * `viewSettings` does not refresh between sync calls (no re-render yet), so we\n * read the latest settings from the RTK Query cache at call time instead.\n * RTK's updateView mutation performs an optimistic cache write in\n * `onQueryStarted`, so the cache is already up-to-date by the time the next\n * call reads it.\n */\n\nimport {\n CreateViewApiArg,\n EntityIdResponse,\n useCreateViewMutation,\n useUpdateViewMutation,\n viewsQueries,\n} from '@shared/api'\nimport { generateWorkingView } from './generateWorkingView'\nimport { toast } from 'react-toastify'\nimport { useCallback } from 'react'\nimport { useStore } from 'react-redux'\nimport { useViewsContext, ViewsContextValue } from '../context/ViewsContext'\n\ninterface UpdateOptions {\n successMessage?: string\n errorMessage?: string\n}\n\n// Module-level flag shared across every useViewUpdateHelper instance. Set true\n// when a mutation has been dispatched in the current tick (RTK cache is now\n// optimistically fresh); reset on the next microtask. Must be module-level so\n// that two different hook instances (e.g. ProjectOverviewDataProvider +\n// ProjectOverviewContext) coordinate correctly when writes flow through one\n// and subsequent reads come from the other in the same event tick.\nlet cacheDirtyThisTick = false\nconst markCacheDirty = () => {\n if (cacheDirtyThisTick) return\n cacheDirtyThisTick = true\n queueMicrotask(() => {\n cacheDirtyThisTick = false\n })\n}\n\nexport type UpdateViewSettingsFn = (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions,\n) => Promise<void>\n\nexport interface LatestSettingsResult {\n settings?: any\n workingViewId?: string\n}\n\nexport const updateViewSettings = async (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions = {},\n viewContext: ViewsContextValue,\n onApplyViewChanges: (arg: any, viewId?: string) => Promise<EntityIdResponse | void>,\n // Reads latest effective settings from RTK Query cache at call time. Required to\n // prevent stale-closure races when two updates fire in the same tick.\n getLatest: () => LatestSettingsResult,\n // Invoked synchronously right after the mutation is dispatched. The caller\n // uses this to flip a \"cache is fresh this tick\" flag so subsequent sync\n // calls in the same tick read the just-updated cache instead of stale state.\n markCacheDirty: () => void,\n): Promise<void> => {\n const {\n viewSettings,\n viewType,\n projectName,\n selectedView,\n setSelectedView,\n workingView,\n onSettingsChanged,\n } = viewContext\n\n if (!viewType) throw new Error('No view type provided for updating view settings')\n\n const previousSelectedViewId = selectedView?.id\n const wasWorking = selectedView?.working\n\n try {\n // Immediately update local state for fast UI response\n localStateSetter(newLocalValue)\n\n // Read latest settings from RTK cache (includes prior same-tick optimistic writes).\n // Fallback to closure-captured value if cache has nothing (first render, etc.).\n const { settings: latestSettingsFromCache, workingViewId: latestWorkingViewIdFromCache } =\n getLatest()\n const latestSettings = latestSettingsFromCache ?? viewSettings\n\n // If we have no settings baseline at all (neither from cache nor from context),\n // abort to prevent writing a partial payload that would overwrite saved settings.\n // This is a defence-in-depth guard; in normal flow isLoadingViews prevents callers\n // from triggering updates before data is available.\n if (latestSettings === undefined) {\n console.warn(\n 'updateViewSettings: no settings baseline available, aborting to prevent data loss.',\n )\n return\n }\n\n // Create settings with updates\n const newSettings = { ...latestSettings, ...updatedSettings }\n\n // always update the working view no matter what\n const newWorkingView = generateWorkingView(newSettings)\n\n // Ensure the payload uses the consistent ID if we already have a working view\n const viewId = latestWorkingViewIdFromCache ?? workingView?.id\n if (viewId) {\n newWorkingView.id = viewId\n }\n const newWorkingViewId = newWorkingView.id\n\n // Make API call in background\n // only include the fields that are updating (just settings)\n const payload = viewId ? { settings: newSettings } : newWorkingView\n\n const promise = onApplyViewChanges(\n {\n payload,\n viewType: viewType,\n projectName: projectName,\n },\n viewId,\n )\n\n // Mutation dispatch above ran onQueryStarted synchronously → RTK cache now\n // reflects `newSettings`. Signal this so any subsequent sync call in the\n // same tick reads the fresh cache instead of the stale closure baseline.\n markCacheDirty()\n\n // if not already on the working view: set that the settings have been changed to show the little blue save button and switch to the working view\n // Note: selectedView?.id is always a real UUID from the server, never the WORKING_VIEW_ID sentinel.\n if (!wasWorking || selectedView?.id !== viewId) {\n if (selectedView) {\n onSettingsChanged(true)\n }\n setSelectedView(newWorkingViewId as string)\n }\n\n await promise\n\n // Clear local state after successful API call - the server data will take over\n localStateSetter(null)\n\n if (options.successMessage) {\n toast.success(options.successMessage)\n }\n } catch (error) {\n // Revert local state on error\n localStateSetter(null)\n\n if (previousSelectedViewId) {\n setSelectedView(previousSelectedViewId)\n }\n\n if (selectedView && !wasWorking) {\n onSettingsChanged(false)\n }\n\n console.error(error)\n const errorMsg = options.errorMessage || `Failed to update view settings: ${error}`\n toast.error(errorMsg)\n }\n}\n\nexport const useViewUpdateHelper = () => {\n const [createView] = useCreateViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const viewContext = useViewsContext()\n const store = useStore()\n\n const onApplyViewChanges = useCallback(\n async (arg: any, viewId?: string) => {\n if (viewId) {\n // Filter the payload to only include valid patch fields\n // and ideally only include fields that are actually being updated.\n // Expecting the caller to provide only the fields they want to update in the payload.\n const patchPayload: any = {}\n const patchFields = ['label', 'owner', 'settings']\n patchFields.forEach((key) => {\n if (arg.payload[key] !== undefined) {\n patchPayload[key] = arg.payload[key]\n }\n })\n\n return await updateView({\n viewType: arg.viewType,\n projectName: arg.projectName,\n viewId,\n payload: patchPayload,\n }).unwrap()\n } else {\n return await createView(arg).unwrap()\n }\n },\n [createView, updateView],\n )\n\n // Returns cached settings when a same-tick prior write has refreshed the\n // cache. Otherwise returns undefined and the caller falls back to the\n // closure-captured viewSettings (correct baseline for the first write in a\n // tick, including the named-view → working-view fork).\n const getLatest = useCallback((): LatestSettingsResult => {\n const { viewType, projectName, selectedView, workingView } = viewContext\n if (!viewType) return {}\n\n const state = store.getState() as any\n\n // 1. Get the working view from the store — most authoritative after optimistic writes.\n const workingViewEntry = viewsQueries.endpoints.getWorkingView.select({\n viewType,\n projectName,\n })(state)\n const storeWorkingViewId = workingViewEntry?.data?.id\n // Prefer the store's working view ID over the potentially stale context closure value.\n const resolvedWorkingViewId = storeWorkingViewId || workingView?.id\n\n // 2. Determine the currently targeted view ID.\n // Use the store's getDefaultView cache (updated optimistically by setSelectedView) so that\n // an in-flight selection change is visible before React re-renders the context.\n const defaultViewEntry = viewsQueries.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n const targetViewId = defaultViewEntry?.data?.id || selectedView?.id\n\n // 3. Determine if the working view is active.\n // IMPORTANT: use !!resolvedWorkingViewId to avoid the undefined === undefined false-positive\n // that would occur on a new project before any working view exists.\n // Note: WORKING_VIEW_ID ('_working_') is a UI-only sentinel; it never appears in\n // server-side cache IDs, so there is no point checking for it here.\n const isWorkingViewActive =\n (!!resolvedWorkingViewId && targetViewId === resolvedWorkingViewId) || cacheDirtyThisTick\n\n // 4. If the working view is active, use its cache as the baseline to prevent stale merges.\n if (isWorkingViewActive && workingViewEntry?.data?.settings) {\n return {\n settings: workingViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n // 5. For named views: use the defaultView cache settings as the baseline.\n // This is populated by the initial useGetDefaultViewQuery fetch and is more reliable\n // than the getView endpoint cache (which is only fetched on-demand when editing).\n if (defaultViewEntry?.data?.settings) {\n return {\n settings: defaultViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n return { workingViewId: resolvedWorkingViewId }\n }, [store, viewContext])\n\n const updateViewSettingsHandler = useCallback<UpdateViewSettingsFn>(\n async (...args) =>\n await updateViewSettings(...args, viewContext, onApplyViewChanges, getLatest, markCacheDirty),\n [viewContext, onApplyViewChanges, getLatest],\n )\n\n return {\n updateViewSettings: updateViewSettingsHandler,\n onCreateView: onApplyViewChanges,\n getLatestSettings: getLatest,\n markCacheDirty,\n }\n}\n"],"names":["cacheDirtyThisTick","markCacheDirty","updateViewSettings","updatedSettings","localStateSetter","newLocalValue","options","viewContext","onApplyViewChanges","getLatest","viewSettings","viewType","projectName","selectedView","setSelectedView","workingView","onSettingsChanged","previousSelectedViewId","wasWorking","latestSettingsFromCache","latestWorkingViewIdFromCache","latestSettings","newSettings","newWorkingView","generateWorkingView","viewId","newWorkingViewId","promise","toast","error","errorMsg","useViewUpdateHelper","createView","useCreateViewMutation","updateView","useUpdateViewMutation","useViewsContext","store","useStore","useCallback","arg","patchPayload","key","state","workingViewEntry","viewsQueries","resolvedWorkingViewId","defaultViewEntry","targetViewId","args"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewUpdateHelper.cjs.js","sources":["../../../../../../src/containers/Views/utils/viewUpdateHelper.ts"],"sourcesContent":["/**\n * Shared helper for updating view settings with optimistic local state management.\n *\n * Sequential updateViewSettings calls in the same event tick MUST chain correctly:\n * the second call has to see the first call's changes. Closure-captured\n * `viewSettings` does not refresh between sync calls (no re-render yet), so we\n * read the latest settings from the RTK Query cache at call time instead.\n * RTK's updateView mutation performs an optimistic cache write in\n * `onQueryStarted`, so the cache is already up-to-date by the time the next\n * call reads it.\n */\n\nimport {\n EntityIdResponse,\n useCreateViewMutation,\n useUpdateViewMutation,\n viewsQueries,\n} from '@shared/api'\nimport { generateWorkingView } from './generateWorkingView'\nimport { toast } from 'react-toastify'\nimport { useCallback } from 'react'\nimport { useStore } from 'react-redux'\nimport { useViewsContext, ViewsContextValue } from '../context/ViewsContext'\n\ninterface UpdateOptions {\n successMessage?: string\n errorMessage?: string\n}\n\n// Module-level flag shared across every useViewUpdateHelper instance. Set true\n// when a mutation has been dispatched in the current tick (RTK cache is now\n// optimistically fresh); reset on the next microtask. Must be module-level so\n// that two different hook instances (e.g. ProjectOverviewDataProvider +\n// ProjectOverviewContext) coordinate correctly when writes flow through one\n// and subsequent reads come from the other in the same event tick.\nlet cacheDirtyThisTick = false\nconst markCacheDirty = () => {\n if (cacheDirtyThisTick) return\n cacheDirtyThisTick = true\n queueMicrotask(() => {\n cacheDirtyThisTick = false\n })\n}\n\nexport type UpdateViewSettingsFn = (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions,\n) => Promise<void>\n\nexport interface LatestSettingsResult {\n settings?: any\n workingViewId?: string\n}\n\nexport const updateViewSettings = async (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions = {},\n viewContext: ViewsContextValue,\n onApplyViewChanges: (arg: any, viewId?: string) => Promise<EntityIdResponse | void>,\n // Reads latest effective settings from RTK Query cache at call time. Required to\n // prevent stale-closure races when two updates fire in the same tick.\n getLatest: () => LatestSettingsResult,\n // Invoked synchronously right after the mutation is dispatched. The caller\n // uses this to flip a \"cache is fresh this tick\" flag so subsequent sync\n // calls in the same tick read the just-updated cache instead of stale state.\n markCacheDirty: () => void,\n): Promise<void> => {\n const {\n viewSettings,\n viewType,\n projectName,\n selectedView,\n setSelectedView,\n workingView,\n onSettingsChanged,\n } = viewContext\n\n if (!viewType) throw new Error('No view type provided for updating view settings')\n\n const previousSelectedViewId = selectedView?.id\n const wasWorking = selectedView?.working\n\n try {\n // Immediately update local state for fast UI response\n localStateSetter(newLocalValue)\n\n // Read latest settings from RTK cache (includes prior same-tick optimistic writes).\n // Fallback to closure-captured value if cache has nothing (first render, etc.).\n const { settings: latestSettingsFromCache, workingViewId: latestWorkingViewIdFromCache } =\n getLatest()\n const latestSettings = latestSettingsFromCache ?? viewSettings\n\n // If we have no settings baseline at all (neither from cache nor from context),\n // abort to prevent writing a partial payload that would overwrite saved settings.\n // This is a defence-in-depth guard; in normal flow isLoadingViews prevents callers\n // from triggering updates before data is available.\n if (latestSettings === undefined) {\n console.warn(\n 'updateViewSettings: no settings baseline available, aborting to prevent data loss.',\n )\n return\n }\n\n // Create settings with updates\n const newSettings = { ...latestSettings, ...updatedSettings }\n\n // always update the working view no matter what\n const newWorkingView = generateWorkingView(newSettings)\n\n // Ensure the payload uses the consistent ID if we already have a working view\n const viewId = latestWorkingViewIdFromCache ?? workingView?.id\n if (viewId) {\n newWorkingView.id = viewId\n }\n const newWorkingViewId = newWorkingView.id\n\n // Make API call in background\n // only include the fields that are updating (just settings)\n const payload = viewId ? { settings: newSettings } : newWorkingView\n\n const promise = onApplyViewChanges(\n {\n payload,\n viewType: viewType,\n projectName: projectName,\n },\n viewId,\n )\n\n // Mutation dispatch above ran onQueryStarted synchronously → RTK cache now\n // reflects `newSettings`. Signal this so any subsequent sync call in the\n // same tick reads the fresh cache instead of the stale closure baseline.\n markCacheDirty()\n\n // if not already on the working view: set that the settings have been changed to show the little blue save button and switch to the working view\n // Note: selectedView?.id is always a real UUID from the server, never the WORKING_VIEW_ID sentinel.\n if (!wasWorking || selectedView?.id !== viewId) {\n if (selectedView) {\n onSettingsChanged(true)\n }\n setSelectedView(newWorkingViewId as string)\n }\n\n await promise\n\n // Clear local state after successful API call - the server data will take over\n localStateSetter(null)\n\n if (options.successMessage) {\n toast.success(options.successMessage)\n }\n } catch (error) {\n // Revert local state on error\n localStateSetter(null)\n\n if (previousSelectedViewId) {\n setSelectedView(previousSelectedViewId)\n }\n\n if (selectedView && !wasWorking) {\n onSettingsChanged(false)\n }\n\n console.error(error)\n const errorMsg = options.errorMessage || `Failed to update view settings: ${error}`\n toast.error(errorMsg)\n }\n}\n\nexport const useViewUpdateHelper = () => {\n const [createView] = useCreateViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const viewContext = useViewsContext()\n const store = useStore()\n\n const onApplyViewChanges = useCallback(\n async (arg: any, viewId?: string) => {\n if (viewId) {\n // Filter the payload to only include valid patch fields\n // and ideally only include fields that are actually being updated.\n // Expecting the caller to provide only the fields they want to update in the payload.\n const patchPayload: any = {}\n const patchFields = ['label', 'owner', 'settings']\n patchFields.forEach((key) => {\n if (arg.payload[key] !== undefined) {\n patchPayload[key] = arg.payload[key]\n }\n })\n\n return await updateView({\n viewType: arg.viewType,\n projectName: arg.projectName,\n viewId,\n payload: patchPayload,\n }).unwrap()\n } else {\n return await createView(arg).unwrap()\n }\n },\n [createView, updateView],\n )\n\n // Returns cached settings when a same-tick prior write has refreshed the\n // cache. Otherwise returns undefined and the caller falls back to the\n // closure-captured viewSettings (correct baseline for the first write in a\n // tick, including the named-view → working-view fork).\n const getLatest = useCallback((): LatestSettingsResult => {\n const { viewType, projectName, selectedView, workingView } = viewContext\n if (!viewType) return {}\n\n const state = store.getState() as any\n\n // 1. Get the working view from the store — most authoritative after optimistic writes.\n const workingViewEntry = viewsQueries.endpoints.getWorkingView.select({\n viewType,\n projectName,\n })(state)\n const storeWorkingViewId = workingViewEntry?.data?.id\n // Prefer the store's working view ID over the potentially stale context closure value.\n const resolvedWorkingViewId = storeWorkingViewId || workingView?.id\n\n // 2. Determine the currently targeted view ID.\n // Use the store's getDefaultView cache (updated optimistically by setSelectedView) so that\n // an in-flight selection change is visible before React re-renders the context.\n const defaultViewEntry = viewsQueries.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n const targetViewId = defaultViewEntry?.data?.id || selectedView?.id\n\n // 3. Determine if the working view is active.\n // IMPORTANT: use !!resolvedWorkingViewId to avoid the undefined === undefined false-positive\n // that would occur on a new project before any working view exists.\n // Note: WORKING_VIEW_ID ('_working_') is a UI-only sentinel; it never appears in\n // server-side cache IDs, so there is no point checking for it here.\n const isWorkingViewActive =\n (!!resolvedWorkingViewId && targetViewId === resolvedWorkingViewId) || cacheDirtyThisTick\n\n // 4. If the working view is active, use its cache as the baseline to prevent stale merges.\n if (isWorkingViewActive && workingViewEntry?.data?.settings) {\n return {\n settings: workingViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n // 5. For named views: use the defaultView cache settings as the baseline.\n // This is populated by the initial useGetDefaultViewQuery fetch and is more reliable\n // than the getView endpoint cache (which is only fetched on-demand when editing).\n if (defaultViewEntry?.data?.settings) {\n return {\n settings: defaultViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n return { workingViewId: resolvedWorkingViewId }\n }, [store, viewContext])\n\n const updateViewSettingsHandler = useCallback<UpdateViewSettingsFn>(\n async (...args) =>\n await updateViewSettings(...args, viewContext, onApplyViewChanges, getLatest, markCacheDirty),\n [viewContext, onApplyViewChanges, getLatest],\n )\n\n return {\n updateViewSettings: updateViewSettingsHandler,\n onCreateView: onApplyViewChanges,\n getLatestSettings: getLatest,\n markCacheDirty,\n }\n}\n"],"names":["cacheDirtyThisTick","markCacheDirty","updateViewSettings","updatedSettings","localStateSetter","newLocalValue","options","viewContext","onApplyViewChanges","getLatest","viewSettings","viewType","projectName","selectedView","setSelectedView","workingView","onSettingsChanged","previousSelectedViewId","wasWorking","latestSettingsFromCache","latestWorkingViewIdFromCache","latestSettings","newSettings","newWorkingView","generateWorkingView","viewId","newWorkingViewId","promise","toast","error","errorMsg","useViewUpdateHelper","createView","useCreateViewMutation","updateView","useUpdateViewMutation","useViewsContext","store","useStore","useCallback","arg","patchPayload","key","state","workingViewEntry","viewsQueries","resolvedWorkingViewId","defaultViewEntry","targetViewId","args"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewUpdateHelper.es.js","sources":["../../../../../../src/containers/Views/utils/viewUpdateHelper.ts"],"sourcesContent":["/**\n * Shared helper for updating view settings with optimistic local state management.\n *\n * Sequential updateViewSettings calls in the same event tick MUST chain correctly:\n * the second call has to see the first call's changes. Closure-captured\n * `viewSettings` does not refresh between sync calls (no re-render yet), so we\n * read the latest settings from the RTK Query cache at call time instead.\n * RTK's updateView mutation performs an optimistic cache write in\n * `onQueryStarted`, so the cache is already up-to-date by the time the next\n * call reads it.\n */\n\nimport {\n CreateViewApiArg,\n EntityIdResponse,\n useCreateViewMutation,\n useUpdateViewMutation,\n viewsQueries,\n} from '@shared/api'\nimport { generateWorkingView } from './generateWorkingView'\nimport { toast } from 'react-toastify'\nimport { useCallback } from 'react'\nimport { useStore } from 'react-redux'\nimport { useViewsContext, ViewsContextValue } from '../context/ViewsContext'\n\ninterface UpdateOptions {\n successMessage?: string\n errorMessage?: string\n}\n\n// Module-level flag shared across every useViewUpdateHelper instance. Set true\n// when a mutation has been dispatched in the current tick (RTK cache is now\n// optimistically fresh); reset on the next microtask. Must be module-level so\n// that two different hook instances (e.g. ProjectOverviewDataProvider +\n// ProjectOverviewContext) coordinate correctly when writes flow through one\n// and subsequent reads come from the other in the same event tick.\nlet cacheDirtyThisTick = false\nconst markCacheDirty = () => {\n if (cacheDirtyThisTick) return\n cacheDirtyThisTick = true\n queueMicrotask(() => {\n cacheDirtyThisTick = false\n })\n}\n\nexport type UpdateViewSettingsFn = (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions,\n) => Promise<void>\n\nexport interface LatestSettingsResult {\n settings?: any\n workingViewId?: string\n}\n\nexport const updateViewSettings = async (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions = {},\n viewContext: ViewsContextValue,\n onApplyViewChanges: (arg: any, viewId?: string) => Promise<EntityIdResponse | void>,\n // Reads latest effective settings from RTK Query cache at call time. Required to\n // prevent stale-closure races when two updates fire in the same tick.\n getLatest: () => LatestSettingsResult,\n // Invoked synchronously right after the mutation is dispatched. The caller\n // uses this to flip a \"cache is fresh this tick\" flag so subsequent sync\n // calls in the same tick read the just-updated cache instead of stale state.\n markCacheDirty: () => void,\n): Promise<void> => {\n const {\n viewSettings,\n viewType,\n projectName,\n selectedView,\n setSelectedView,\n workingView,\n onSettingsChanged,\n } = viewContext\n\n if (!viewType) throw new Error('No view type provided for updating view settings')\n\n const previousSelectedViewId = selectedView?.id\n const wasWorking = selectedView?.working\n\n try {\n // Immediately update local state for fast UI response\n localStateSetter(newLocalValue)\n\n // Read latest settings from RTK cache (includes prior same-tick optimistic writes).\n // Fallback to closure-captured value if cache has nothing (first render, etc.).\n const { settings: latestSettingsFromCache, workingViewId: latestWorkingViewIdFromCache } =\n getLatest()\n const latestSettings = latestSettingsFromCache ?? viewSettings\n\n // If we have no settings baseline at all (neither from cache nor from context),\n // abort to prevent writing a partial payload that would overwrite saved settings.\n // This is a defence-in-depth guard; in normal flow isLoadingViews prevents callers\n // from triggering updates before data is available.\n if (latestSettings === undefined) {\n console.warn(\n 'updateViewSettings: no settings baseline available, aborting to prevent data loss.',\n )\n return\n }\n\n // Create settings with updates\n const newSettings = { ...latestSettings, ...updatedSettings }\n\n // always update the working view no matter what\n const newWorkingView = generateWorkingView(newSettings)\n\n // Ensure the payload uses the consistent ID if we already have a working view\n const viewId = latestWorkingViewIdFromCache ?? workingView?.id\n if (viewId) {\n newWorkingView.id = viewId\n }\n const newWorkingViewId = newWorkingView.id\n\n // Make API call in background\n // only include the fields that are updating (just settings)\n const payload = viewId ? { settings: newSettings } : newWorkingView\n\n const promise = onApplyViewChanges(\n {\n payload,\n viewType: viewType,\n projectName: projectName,\n },\n viewId,\n )\n\n // Mutation dispatch above ran onQueryStarted synchronously → RTK cache now\n // reflects `newSettings`. Signal this so any subsequent sync call in the\n // same tick reads the fresh cache instead of the stale closure baseline.\n markCacheDirty()\n\n // if not already on the working view: set that the settings have been changed to show the little blue save button and switch to the working view\n // Note: selectedView?.id is always a real UUID from the server, never the WORKING_VIEW_ID sentinel.\n if (!wasWorking || selectedView?.id !== viewId) {\n if (selectedView) {\n onSettingsChanged(true)\n }\n setSelectedView(newWorkingViewId as string)\n }\n\n await promise\n\n // Clear local state after successful API call - the server data will take over\n localStateSetter(null)\n\n if (options.successMessage) {\n toast.success(options.successMessage)\n }\n } catch (error) {\n // Revert local state on error\n localStateSetter(null)\n\n if (previousSelectedViewId) {\n setSelectedView(previousSelectedViewId)\n }\n\n if (selectedView && !wasWorking) {\n onSettingsChanged(false)\n }\n\n console.error(error)\n const errorMsg = options.errorMessage || `Failed to update view settings: ${error}`\n toast.error(errorMsg)\n }\n}\n\nexport const useViewUpdateHelper = () => {\n const [createView] = useCreateViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const viewContext = useViewsContext()\n const store = useStore()\n\n const onApplyViewChanges = useCallback(\n async (arg: any, viewId?: string) => {\n if (viewId) {\n // Filter the payload to only include valid patch fields\n // and ideally only include fields that are actually being updated.\n // Expecting the caller to provide only the fields they want to update in the payload.\n const patchPayload: any = {}\n const patchFields = ['label', 'owner', 'settings']\n patchFields.forEach((key) => {\n if (arg.payload[key] !== undefined) {\n patchPayload[key] = arg.payload[key]\n }\n })\n\n return await updateView({\n viewType: arg.viewType,\n projectName: arg.projectName,\n viewId,\n payload: patchPayload,\n }).unwrap()\n } else {\n return await createView(arg).unwrap()\n }\n },\n [createView, updateView],\n )\n\n // Returns cached settings when a same-tick prior write has refreshed the\n // cache. Otherwise returns undefined and the caller falls back to the\n // closure-captured viewSettings (correct baseline for the first write in a\n // tick, including the named-view → working-view fork).\n const getLatest = useCallback((): LatestSettingsResult => {\n const { viewType, projectName, selectedView, workingView } = viewContext\n if (!viewType) return {}\n\n const state = store.getState() as any\n\n // 1. Get the working view from the store — most authoritative after optimistic writes.\n const workingViewEntry = viewsQueries.endpoints.getWorkingView.select({\n viewType,\n projectName,\n })(state)\n const storeWorkingViewId = workingViewEntry?.data?.id\n // Prefer the store's working view ID over the potentially stale context closure value.\n const resolvedWorkingViewId = storeWorkingViewId || workingView?.id\n\n // 2. Determine the currently targeted view ID.\n // Use the store's getDefaultView cache (updated optimistically by setSelectedView) so that\n // an in-flight selection change is visible before React re-renders the context.\n const defaultViewEntry = viewsQueries.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n const targetViewId = defaultViewEntry?.data?.id || selectedView?.id\n\n // 3. Determine if the working view is active.\n // IMPORTANT: use !!resolvedWorkingViewId to avoid the undefined === undefined false-positive\n // that would occur on a new project before any working view exists.\n // Note: WORKING_VIEW_ID ('_working_') is a UI-only sentinel; it never appears in\n // server-side cache IDs, so there is no point checking for it here.\n const isWorkingViewActive =\n (!!resolvedWorkingViewId && targetViewId === resolvedWorkingViewId) || cacheDirtyThisTick\n\n // 4. If the working view is active, use its cache as the baseline to prevent stale merges.\n if (isWorkingViewActive && workingViewEntry?.data?.settings) {\n return {\n settings: workingViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n // 5. For named views: use the defaultView cache settings as the baseline.\n // This is populated by the initial useGetDefaultViewQuery fetch and is more reliable\n // than the getView endpoint cache (which is only fetched on-demand when editing).\n if (defaultViewEntry?.data?.settings) {\n return {\n settings: defaultViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n return { workingViewId: resolvedWorkingViewId }\n }, [store, viewContext])\n\n const updateViewSettingsHandler = useCallback<UpdateViewSettingsFn>(\n async (...args) =>\n await updateViewSettings(...args, viewContext, onApplyViewChanges, getLatest, markCacheDirty),\n [viewContext, onApplyViewChanges, getLatest],\n )\n\n return {\n updateViewSettings: updateViewSettingsHandler,\n onCreateView: onApplyViewChanges,\n getLatestSettings: getLatest,\n markCacheDirty,\n }\n}\n"],"names":["cacheDirtyThisTick","markCacheDirty","updateViewSettings","updatedSettings","localStateSetter","newLocalValue","options","viewContext","onApplyViewChanges","getLatest","viewSettings","viewType","projectName","selectedView","setSelectedView","workingView","onSettingsChanged","previousSelectedViewId","wasWorking","latestSettingsFromCache","latestWorkingViewIdFromCache","latestSettings","newSettings","newWorkingView","generateWorkingView","viewId","newWorkingViewId","promise","toast","error","errorMsg","useViewUpdateHelper","createView","useCreateViewMutation","updateView","useUpdateViewMutation","useViewsContext","store","useStore","useCallback","arg","patchPayload","key","state","workingViewEntry","viewsQueries","resolvedWorkingViewId","defaultViewEntry","targetViewId","args"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,IAAIA,IAAqB;AACzB,MAAMC,IAAiB,MAAM;AAC3B,EAAID,MACJA,IAAqB,IACrB,eAAe,MAAM;AACnB,IAAAA,IAAqB;AAAA,EACvB,CAAC;AACH,GAcaE,IAAqB,OAChCC,GACAC,GACAC,GACAC,IAAyB,CAAA,GACzBC,GACAC,GAGAC,GAIAR,MACkB;AAClB,QAAM;AAAA,IACJ,cAAAS;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,IACET;AAEJ,MAAI,CAACI,EAAU,OAAM,IAAI,MAAM,kDAAkD;AAEjF,QAAMM,IAAyBJ,GAAc,IACvCK,IAAaL,GAAc;AAEjC,MAAI;AAEF,IAAAT,EAAiBC,CAAa;AAI9B,UAAM,EAAE,UAAUc,GAAyB,eAAeC,EAAA,IACxDX,EAAA,GACIY,IAAiBF,KAA2BT;AAMlD,QAAIW,MAAmB,QAAW;AAChC,cAAQ;AAAA,QACN;AAAA,MAAA;AAEF;AAAA,IACF;AAGA,UAAMC,IAAc,EAAE,GAAGD,GAAgB,GAAGlB,EAAA,GAGtCoB,IAAiBC,EAAoBF,CAAW,GAGhDG,IAASL,KAAgCL,GAAa;AAC5D,IAAIU,MACFF,EAAe,KAAKE;AAEtB,UAAMC,IAAmBH,EAAe,IAMlCI,IAAUnB;AAAA,MACd;AAAA,QACE,SAJYiB,IAAS,EAAE,UAAUH,MAAgBC;AAAA,QAKjD,UAAAZ;AAAA,QACA,aAAAC;AAAA,MAAA;AAAA,MAEFa;AAAA,IAAA;AAMFxB,IAAAA,EAAAA,IAII,CAACiB,KAAcL,GAAc,OAAOY,OAClCZ,KACFG,EAAkB,EAAI,GAExBF,EAAgBY,CAA0B,IAG5C,MAAMC,GAGNvB,EAAiB,IAAI,GAEjBE,EAAQ,kBACVsB,EAAM,QAAQtB,EAAQ,cAAc;AAAA,EAExC,SAASuB,GAAO;AAEd,IAAAzB,EAAiB,IAAI,GAEjBa,KACFH,EAAgBG,CAAsB,GAGpCJ,KAAgB,CAACK,KACnBF,EAAkB,EAAK,GAGzB,QAAQ,MAAMa,CAAK;AACnB,UAAMC,IAAWxB,EAAQ,gBAAgB,mCAAmCuB,CAAK;AACjF,IAAAD,EAAM,MAAME,CAAQ;AAAA,EACtB;AACF,GAEaC,KAAsB,MAAM;AACvC,QAAM,CAACC,CAAU,IAAIC,EAAA,GACf,CAACC,CAAU,IAAIC,EAAA,GAEf5B,IAAc6B,EAAA,GACdC,IAAQC,EAAA,GAER9B,IAAqB+B;AAAA,IACzB,OAAOC,GAAUf,MAAoB;AACnC,UAAIA,GAAQ;AAIV,cAAMgB,IAAoB,CAAA;AAE1B,eADoB,CAAC,SAAS,SAAS,UAAU,EACrC,QAAQ,CAACC,MAAQ;AAC3B,UAAIF,EAAI,QAAQE,CAAG,MAAM,WACvBD,EAAaC,CAAG,IAAIF,EAAI,QAAQE,CAAG;AAAA,QAEvC,CAAC,GAEM,MAAMR,EAAW;AAAA,UACtB,UAAUM,EAAI;AAAA,UACd,aAAaA,EAAI;AAAA,UACjB,QAAAf;AAAA,UACA,SAASgB;AAAA,QAAA,CACV,EAAE,OAAA;AAAA,MACL;AACE,eAAO,MAAMT,EAAWQ,CAAG,EAAE,OAAA;AAAA,IAEjC;AAAA,IACA,CAACR,GAAYE,CAAU;AAAA,EAAA,GAOnBzB,IAAY8B,EAAY,MAA4B;AACxD,UAAM,EAAE,UAAA5B,GAAU,aAAAC,GAAa,cAAAC,GAAc,aAAAE,MAAgBR;AAC7D,QAAI,CAACI,EAAU,QAAO,CAAA;AAEtB,UAAMgC,IAAQN,EAAM,SAAA,GAGdO,IAAmBC,EAAa,UAAU,eAAe,OAAO;AAAA,MACpE,UAAAlC;AAAA,MACA,aAAAC;AAAA,IAAA,CACD,EAAE+B,CAAK,GAGFG,IAFqBF,GAAkB,MAAM,MAEC7B,GAAa,IAK3DgC,IAAmBF,EAAa,UAAU,eAAe,OAAO;AAAA,MACpE,UAAAlC;AAAA,MACA,aAAAC;AAAA,IAAA,CACD,EAAE+B,CAAK,GACFK,IAAeD,GAAkB,MAAM,MAAMlC,GAAc;AAWjE,YAHG,CAAC,CAACiC,KAAyBE,MAAiBF,KAA0B9C,MAG9C4C,GAAkB,MAAM,WAC1C;AAAA,MACL,UAAUA,EAAiB,KAAK;AAAA,MAChC,eAAeE;AAAA,IAAA,IAOfC,GAAkB,MAAM,WACnB;AAAA,MACL,UAAUA,EAAiB,KAAK;AAAA,MAChC,eAAeD;AAAA,IAAA,IAIZ,EAAE,eAAeA,EAAA;AAAA,EAC1B,GAAG,CAACT,GAAO9B,CAAW,CAAC;AAQvB,SAAO;AAAA,IACL,oBAPgCgC;AAAA,MAChC,UAAUU,MACR,MAAM/C,EAAmB,GAAG+C,GAAM1C,GAAaC,GAAoBC,GAAWR,CAAc;AAAA,MAC9F,CAACM,GAAaC,GAAoBC,CAAS;AAAA,IAAA;AAAA,IAK3C,cAAcD;AAAA,IACd,mBAAmBC;AAAA,IACnB,gBAAAR;AAAA,EAAA;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"viewUpdateHelper.es.js","sources":["../../../../../../src/containers/Views/utils/viewUpdateHelper.ts"],"sourcesContent":["/**\n * Shared helper for updating view settings with optimistic local state management.\n *\n * Sequential updateViewSettings calls in the same event tick MUST chain correctly:\n * the second call has to see the first call's changes. Closure-captured\n * `viewSettings` does not refresh between sync calls (no re-render yet), so we\n * read the latest settings from the RTK Query cache at call time instead.\n * RTK's updateView mutation performs an optimistic cache write in\n * `onQueryStarted`, so the cache is already up-to-date by the time the next\n * call reads it.\n */\n\nimport {\n EntityIdResponse,\n useCreateViewMutation,\n useUpdateViewMutation,\n viewsQueries,\n} from '@shared/api'\nimport { generateWorkingView } from './generateWorkingView'\nimport { toast } from 'react-toastify'\nimport { useCallback } from 'react'\nimport { useStore } from 'react-redux'\nimport { useViewsContext, ViewsContextValue } from '../context/ViewsContext'\n\ninterface UpdateOptions {\n successMessage?: string\n errorMessage?: string\n}\n\n// Module-level flag shared across every useViewUpdateHelper instance. Set true\n// when a mutation has been dispatched in the current tick (RTK cache is now\n// optimistically fresh); reset on the next microtask. Must be module-level so\n// that two different hook instances (e.g. ProjectOverviewDataProvider +\n// ProjectOverviewContext) coordinate correctly when writes flow through one\n// and subsequent reads come from the other in the same event tick.\nlet cacheDirtyThisTick = false\nconst markCacheDirty = () => {\n if (cacheDirtyThisTick) return\n cacheDirtyThisTick = true\n queueMicrotask(() => {\n cacheDirtyThisTick = false\n })\n}\n\nexport type UpdateViewSettingsFn = (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions,\n) => Promise<void>\n\nexport interface LatestSettingsResult {\n settings?: any\n workingViewId?: string\n}\n\nexport const updateViewSettings = async (\n updatedSettings: any,\n localStateSetter: (value: any) => void,\n newLocalValue: any,\n options: UpdateOptions = {},\n viewContext: ViewsContextValue,\n onApplyViewChanges: (arg: any, viewId?: string) => Promise<EntityIdResponse | void>,\n // Reads latest effective settings from RTK Query cache at call time. Required to\n // prevent stale-closure races when two updates fire in the same tick.\n getLatest: () => LatestSettingsResult,\n // Invoked synchronously right after the mutation is dispatched. The caller\n // uses this to flip a \"cache is fresh this tick\" flag so subsequent sync\n // calls in the same tick read the just-updated cache instead of stale state.\n markCacheDirty: () => void,\n): Promise<void> => {\n const {\n viewSettings,\n viewType,\n projectName,\n selectedView,\n setSelectedView,\n workingView,\n onSettingsChanged,\n } = viewContext\n\n if (!viewType) throw new Error('No view type provided for updating view settings')\n\n const previousSelectedViewId = selectedView?.id\n const wasWorking = selectedView?.working\n\n try {\n // Immediately update local state for fast UI response\n localStateSetter(newLocalValue)\n\n // Read latest settings from RTK cache (includes prior same-tick optimistic writes).\n // Fallback to closure-captured value if cache has nothing (first render, etc.).\n const { settings: latestSettingsFromCache, workingViewId: latestWorkingViewIdFromCache } =\n getLatest()\n const latestSettings = latestSettingsFromCache ?? viewSettings\n\n // If we have no settings baseline at all (neither from cache nor from context),\n // abort to prevent writing a partial payload that would overwrite saved settings.\n // This is a defence-in-depth guard; in normal flow isLoadingViews prevents callers\n // from triggering updates before data is available.\n if (latestSettings === undefined) {\n console.warn(\n 'updateViewSettings: no settings baseline available, aborting to prevent data loss.',\n )\n return\n }\n\n // Create settings with updates\n const newSettings = { ...latestSettings, ...updatedSettings }\n\n // always update the working view no matter what\n const newWorkingView = generateWorkingView(newSettings)\n\n // Ensure the payload uses the consistent ID if we already have a working view\n const viewId = latestWorkingViewIdFromCache ?? workingView?.id\n if (viewId) {\n newWorkingView.id = viewId\n }\n const newWorkingViewId = newWorkingView.id\n\n // Make API call in background\n // only include the fields that are updating (just settings)\n const payload = viewId ? { settings: newSettings } : newWorkingView\n\n const promise = onApplyViewChanges(\n {\n payload,\n viewType: viewType,\n projectName: projectName,\n },\n viewId,\n )\n\n // Mutation dispatch above ran onQueryStarted synchronously → RTK cache now\n // reflects `newSettings`. Signal this so any subsequent sync call in the\n // same tick reads the fresh cache instead of the stale closure baseline.\n markCacheDirty()\n\n // if not already on the working view: set that the settings have been changed to show the little blue save button and switch to the working view\n // Note: selectedView?.id is always a real UUID from the server, never the WORKING_VIEW_ID sentinel.\n if (!wasWorking || selectedView?.id !== viewId) {\n if (selectedView) {\n onSettingsChanged(true)\n }\n setSelectedView(newWorkingViewId as string)\n }\n\n await promise\n\n // Clear local state after successful API call - the server data will take over\n localStateSetter(null)\n\n if (options.successMessage) {\n toast.success(options.successMessage)\n }\n } catch (error) {\n // Revert local state on error\n localStateSetter(null)\n\n if (previousSelectedViewId) {\n setSelectedView(previousSelectedViewId)\n }\n\n if (selectedView && !wasWorking) {\n onSettingsChanged(false)\n }\n\n console.error(error)\n const errorMsg = options.errorMessage || `Failed to update view settings: ${error}`\n toast.error(errorMsg)\n }\n}\n\nexport const useViewUpdateHelper = () => {\n const [createView] = useCreateViewMutation()\n const [updateView] = useUpdateViewMutation()\n\n const viewContext = useViewsContext()\n const store = useStore()\n\n const onApplyViewChanges = useCallback(\n async (arg: any, viewId?: string) => {\n if (viewId) {\n // Filter the payload to only include valid patch fields\n // and ideally only include fields that are actually being updated.\n // Expecting the caller to provide only the fields they want to update in the payload.\n const patchPayload: any = {}\n const patchFields = ['label', 'owner', 'settings']\n patchFields.forEach((key) => {\n if (arg.payload[key] !== undefined) {\n patchPayload[key] = arg.payload[key]\n }\n })\n\n return await updateView({\n viewType: arg.viewType,\n projectName: arg.projectName,\n viewId,\n payload: patchPayload,\n }).unwrap()\n } else {\n return await createView(arg).unwrap()\n }\n },\n [createView, updateView],\n )\n\n // Returns cached settings when a same-tick prior write has refreshed the\n // cache. Otherwise returns undefined and the caller falls back to the\n // closure-captured viewSettings (correct baseline for the first write in a\n // tick, including the named-view → working-view fork).\n const getLatest = useCallback((): LatestSettingsResult => {\n const { viewType, projectName, selectedView, workingView } = viewContext\n if (!viewType) return {}\n\n const state = store.getState() as any\n\n // 1. Get the working view from the store — most authoritative after optimistic writes.\n const workingViewEntry = viewsQueries.endpoints.getWorkingView.select({\n viewType,\n projectName,\n })(state)\n const storeWorkingViewId = workingViewEntry?.data?.id\n // Prefer the store's working view ID over the potentially stale context closure value.\n const resolvedWorkingViewId = storeWorkingViewId || workingView?.id\n\n // 2. Determine the currently targeted view ID.\n // Use the store's getDefaultView cache (updated optimistically by setSelectedView) so that\n // an in-flight selection change is visible before React re-renders the context.\n const defaultViewEntry = viewsQueries.endpoints.getDefaultView.select({\n viewType,\n projectName,\n })(state)\n const targetViewId = defaultViewEntry?.data?.id || selectedView?.id\n\n // 3. Determine if the working view is active.\n // IMPORTANT: use !!resolvedWorkingViewId to avoid the undefined === undefined false-positive\n // that would occur on a new project before any working view exists.\n // Note: WORKING_VIEW_ID ('_working_') is a UI-only sentinel; it never appears in\n // server-side cache IDs, so there is no point checking for it here.\n const isWorkingViewActive =\n (!!resolvedWorkingViewId && targetViewId === resolvedWorkingViewId) || cacheDirtyThisTick\n\n // 4. If the working view is active, use its cache as the baseline to prevent stale merges.\n if (isWorkingViewActive && workingViewEntry?.data?.settings) {\n return {\n settings: workingViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n // 5. For named views: use the defaultView cache settings as the baseline.\n // This is populated by the initial useGetDefaultViewQuery fetch and is more reliable\n // than the getView endpoint cache (which is only fetched on-demand when editing).\n if (defaultViewEntry?.data?.settings) {\n return {\n settings: defaultViewEntry.data.settings,\n workingViewId: resolvedWorkingViewId,\n }\n }\n\n return { workingViewId: resolvedWorkingViewId }\n }, [store, viewContext])\n\n const updateViewSettingsHandler = useCallback<UpdateViewSettingsFn>(\n async (...args) =>\n await updateViewSettings(...args, viewContext, onApplyViewChanges, getLatest, markCacheDirty),\n [viewContext, onApplyViewChanges, getLatest],\n )\n\n return {\n updateViewSettings: updateViewSettingsHandler,\n onCreateView: onApplyViewChanges,\n getLatestSettings: getLatest,\n markCacheDirty,\n }\n}\n"],"names":["cacheDirtyThisTick","markCacheDirty","updateViewSettings","updatedSettings","localStateSetter","newLocalValue","options","viewContext","onApplyViewChanges","getLatest","viewSettings","viewType","projectName","selectedView","setSelectedView","workingView","onSettingsChanged","previousSelectedViewId","wasWorking","latestSettingsFromCache","latestWorkingViewIdFromCache","latestSettings","newSettings","newWorkingView","generateWorkingView","viewId","newWorkingViewId","promise","toast","error","errorMsg","useViewUpdateHelper","createView","useCreateViewMutation","updateView","useUpdateViewMutation","useViewsContext","store","useStore","useCallback","arg","patchPayload","key","state","workingViewEntry","viewsQueries","resolvedWorkingViewId","defaultViewEntry","targetViewId","args"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,IAAIA,IAAqB;AACzB,MAAMC,IAAiB,MAAM;AAC3B,EAAID,MACJA,IAAqB,IACrB,eAAe,MAAM;AACnB,IAAAA,IAAqB;AAAA,EACvB,CAAC;AACH,GAcaE,IAAqB,OAChCC,GACAC,GACAC,GACAC,IAAyB,CAAA,GACzBC,GACAC,GAGAC,GAIAR,MACkB;AAClB,QAAM;AAAA,IACJ,cAAAS;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,IACET;AAEJ,MAAI,CAACI,EAAU,OAAM,IAAI,MAAM,kDAAkD;AAEjF,QAAMM,IAAyBJ,GAAc,IACvCK,IAAaL,GAAc;AAEjC,MAAI;AAEF,IAAAT,EAAiBC,CAAa;AAI9B,UAAM,EAAE,UAAUc,GAAyB,eAAeC,EAAA,IACxDX,EAAA,GACIY,IAAiBF,KAA2BT;AAMlD,QAAIW,MAAmB,QAAW;AAChC,cAAQ;AAAA,QACN;AAAA,MAAA;AAEF;AAAA,IACF;AAGA,UAAMC,IAAc,EAAE,GAAGD,GAAgB,GAAGlB,EAAA,GAGtCoB,IAAiBC,EAAoBF,CAAW,GAGhDG,IAASL,KAAgCL,GAAa;AAC5D,IAAIU,MACFF,EAAe,KAAKE;AAEtB,UAAMC,IAAmBH,EAAe,IAMlCI,IAAUnB;AAAA,MACd;AAAA,QACE,SAJYiB,IAAS,EAAE,UAAUH,MAAgBC;AAAA,QAKjD,UAAAZ;AAAA,QACA,aAAAC;AAAA,MAAA;AAAA,MAEFa;AAAA,IAAA;AAMFxB,IAAAA,EAAAA,IAII,CAACiB,KAAcL,GAAc,OAAOY,OAClCZ,KACFG,EAAkB,EAAI,GAExBF,EAAgBY,CAA0B,IAG5C,MAAMC,GAGNvB,EAAiB,IAAI,GAEjBE,EAAQ,kBACVsB,EAAM,QAAQtB,EAAQ,cAAc;AAAA,EAExC,SAASuB,GAAO;AAEd,IAAAzB,EAAiB,IAAI,GAEjBa,KACFH,EAAgBG,CAAsB,GAGpCJ,KAAgB,CAACK,KACnBF,EAAkB,EAAK,GAGzB,QAAQ,MAAMa,CAAK;AACnB,UAAMC,IAAWxB,EAAQ,gBAAgB,mCAAmCuB,CAAK;AACjF,IAAAD,EAAM,MAAME,CAAQ;AAAA,EACtB;AACF,GAEaC,KAAsB,MAAM;AACvC,QAAM,CAACC,CAAU,IAAIC,EAAA,GACf,CAACC,CAAU,IAAIC,EAAA,GAEf5B,IAAc6B,EAAA,GACdC,IAAQC,EAAA,GAER9B,IAAqB+B;AAAA,IACzB,OAAOC,GAAUf,MAAoB;AACnC,UAAIA,GAAQ;AAIV,cAAMgB,IAAoB,CAAA;AAE1B,eADoB,CAAC,SAAS,SAAS,UAAU,EACrC,QAAQ,CAACC,MAAQ;AAC3B,UAAIF,EAAI,QAAQE,CAAG,MAAM,WACvBD,EAAaC,CAAG,IAAIF,EAAI,QAAQE,CAAG;AAAA,QAEvC,CAAC,GAEM,MAAMR,EAAW;AAAA,UACtB,UAAUM,EAAI;AAAA,UACd,aAAaA,EAAI;AAAA,UACjB,QAAAf;AAAA,UACA,SAASgB;AAAA,QAAA,CACV,EAAE,OAAA;AAAA,MACL;AACE,eAAO,MAAMT,EAAWQ,CAAG,EAAE,OAAA;AAAA,IAEjC;AAAA,IACA,CAACR,GAAYE,CAAU;AAAA,EAAA,GAOnBzB,IAAY8B,EAAY,MAA4B;AACxD,UAAM,EAAE,UAAA5B,GAAU,aAAAC,GAAa,cAAAC,GAAc,aAAAE,MAAgBR;AAC7D,QAAI,CAACI,EAAU,QAAO,CAAA;AAEtB,UAAMgC,IAAQN,EAAM,SAAA,GAGdO,IAAmBC,EAAa,UAAU,eAAe,OAAO;AAAA,MACpE,UAAAlC;AAAA,MACA,aAAAC;AAAA,IAAA,CACD,EAAE+B,CAAK,GAGFG,IAFqBF,GAAkB,MAAM,MAEC7B,GAAa,IAK3DgC,IAAmBF,EAAa,UAAU,eAAe,OAAO;AAAA,MACpE,UAAAlC;AAAA,MACA,aAAAC;AAAA,IAAA,CACD,EAAE+B,CAAK,GACFK,IAAeD,GAAkB,MAAM,MAAMlC,GAAc;AAWjE,YAHG,CAAC,CAACiC,KAAyBE,MAAiBF,KAA0B9C,MAG9C4C,GAAkB,MAAM,WAC1C;AAAA,MACL,UAAUA,EAAiB,KAAK;AAAA,MAChC,eAAeE;AAAA,IAAA,IAOfC,GAAkB,MAAM,WACnB;AAAA,MACL,UAAUA,EAAiB,KAAK;AAAA,MAChC,eAAeD;AAAA,IAAA,IAIZ,EAAE,eAAeA,EAAA;AAAA,EAC1B,GAAG,CAACT,GAAO9B,CAAW,CAAC;AAQvB,SAAO;AAAA,IACL,oBAPgCgC;AAAA,MAChC,UAAUU,MACR,MAAM/C,EAAmB,GAAG+C,GAAM1C,GAAaC,GAAoBC,GAAWR,CAAc;AAAA,MAC9F,CAACM,GAAaC,GAAoBC,CAAS;AAAA,IAAA;AAAA,IAK3C,cAAcD;AAAA,IACd,mBAAmBC;AAAA,IACnB,gBAAAR;AAAA,EAAA;AAEJ;"}
|