@ynput/ayon-frontend-shared 0.2.37 → 0.2.38
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 +67 -66
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +1 -1
- package/dist/ProjectTreeTable.es.js +182 -167
- package/dist/ProjectTreeTable.es.js.map +1 -1
- package/dist/Views.cjs.js.map +1 -1
- package/dist/Views.es.js.map +1 -1
- package/dist/_virtual/index.cjs10.js +1 -1
- package/dist/_virtual/index.cjs11.js +1 -1
- package/dist/_virtual/index.cjs12.js +1 -1
- package/dist/_virtual/index.es10.js +3 -3
- package/dist/_virtual/index.es11.js +5 -5
- package/dist/_virtual/index.es12.js +5 -5
- package/dist/api.cjs.js +1 -1
- package/dist/api.es.js +107 -106
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +135 -133
- package/dist/components.es.js.map +1 -1
- package/dist/context.cjs.js +1 -1
- package/dist/context.es.js +15 -12
- package/dist/context.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +56 -55
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/views.es.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
- package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.es.js +7 -1
- package/dist/shared/src/api/queries/project/getProject.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 +73 -67
- package/dist/shared/src/api/queries/userDashboard/getUserDashboard.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 +131 -114
- package/dist/shared/src/api/queries/versions/getVersionsProducts.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 +3 -2
- 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.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +3 -2
- package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +61 -50
- package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.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.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +3 -2
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.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 +70 -69
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +3 -2
- package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js +5 -4
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +106 -106
- package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +53 -52
- package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +58 -46
- package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +5 -4
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +44 -43
- package/dist/shared/src/components/Powerpack/PowerpackDialog.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 +81 -80
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +43 -42
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +2 -0
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -0
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +263 -0
- package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -0
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +2 -2
- package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
- package/dist/shared/src/components/RenameForm/RenameForm.es.js +65 -64
- 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 +139 -142
- 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 +49 -48
- 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 +48 -47
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js +1 -1
- package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.es.js +19 -27
- package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.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 +221 -211
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +23 -22
- package/dist/shared/src/components/SettingsPanel/SettingsPanel.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 +47 -46
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +8 -7
- package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +6 -6
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +108 -112
- 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 +22 -23
- 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 +48 -47
- 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 +3 -2
- package/dist/shared/src/containers/Actions/Actions.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 +49 -48
- 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 +164 -166
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +57 -56
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +103 -97
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +87 -86
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +18 -17
- package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js +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 +25 -22
- 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.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +3 -2
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +44 -43
- 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 +48 -47
- 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 +48 -47
- 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 +48 -47
- package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +44 -46
- package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +4 -3
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.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 +110 -109
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +3 -2
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +12 -11
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +43 -43
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +6 -5
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/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 +11 -9
- package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.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 +333 -333
- 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 +52 -51
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.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 +42 -41
- 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 +52 -51
- 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 +50 -49
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +235 -214
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +45 -40
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +160 -156
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.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 +59 -58
- package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +10 -9
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.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 +65 -66
- 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 +111 -112
- 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 +57 -57
- 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 +50 -49
- 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 +59 -53
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.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 +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +15 -20
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.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 +49 -48
- 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 +46 -45
- 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 +50 -49
- 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 +51 -50
- 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 +66 -65
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.es.js +4 -4
- package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.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 +55 -54
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +130 -116
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.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 +57 -56
- package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +26 -34
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +108 -220
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.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 +63 -62
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +46 -45
- package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +58 -62
- package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.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 +114 -113
- 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 +48 -47
- package/dist/shared/src/containers/SimpleTable/SimpleTable.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.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +3 -2
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +3 -2
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js +92 -87
- package/dist/shared/src/containers/Views/context/ViewsContext.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.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +3 -2
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +3 -2
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.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 +5 -4
- 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.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +7 -6
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/ProjectContext.cjs.js +2 -0
- package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -0
- package/dist/shared/src/context/ProjectContext.es.js +182 -0
- package/dist/shared/src/context/ProjectContext.es.js.map +1 -0
- 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 +47 -46
- package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +3 -2
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useGetEntityGroups.cjs.js +1 -1
- package/dist/shared/src/hooks/useGetEntityGroups.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useGetEntityGroups.es.js +6 -5
- package/dist/shared/src/hooks/useGetEntityGroups.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 +3 -2
- package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +3 -2
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/shared/src/util/versionUploadHelpers.cjs.js +1 -1
- package/dist/shared/src/util/versionUploadHelpers.cjs.js.map +1 -1
- package/dist/shared/src/util/versionUploadHelpers.es.js +24 -34
- package/dist/shared/src/util/versionUploadHelpers.es.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +1 -1
- package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/Menu.es.js +3 -2
- package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +6 -5
- package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -1
- package/dist/src/components/Menu/MenuComponents/MenuList.es.js +3 -2
- package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -1
- package/dist/types/api/generated/views.d.ts +13 -21
- package/dist/types/api/queries/actions/getActions.d.ts +6 -6
- package/dist/types/api/queries/activities/getActivities.d.ts +8 -8
- package/dist/types/api/queries/activities/getCategories.d.ts +2 -2
- package/dist/types/api/queries/activities/getMentions.d.ts +2 -2
- package/dist/types/api/queries/addons/getAddons.d.ts +8 -8
- package/dist/types/api/queries/attributes/getAttributes.d.ts +4 -4
- package/dist/types/api/queries/authentication/getAuthentication.d.ts +2 -2
- package/dist/types/api/queries/cloud/cloud.d.ts +4 -4
- package/dist/types/api/queries/entities/getEntity.d.ts +10 -10
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -4
- package/dist/types/api/queries/entityLists/getLists.d.ts +188 -188
- package/dist/types/api/queries/entityLists/getListsAttributes.d.ts +2 -2
- package/dist/types/api/queries/entityLists/listFolders.d.ts +2 -2
- package/dist/types/api/queries/folders/getFolders.d.ts +4 -4
- package/dist/types/api/queries/grouping/getGrouping.d.ts +2 -2
- package/dist/types/api/queries/links/getEntityLinks.d.ts +2 -2
- package/dist/types/api/queries/overview/getOverview.d.ts +10 -10
- package/dist/types/api/queries/permissions/getPermissions.d.ts +4 -4
- package/dist/types/api/queries/project/getProject.d.ts +190 -6
- package/dist/types/api/queries/review/getReview.d.ts +6 -6
- package/dist/types/api/queries/share/share.d.ts +2 -2
- package/dist/types/api/queries/system/getSystem.d.ts +6 -6
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +11 -8
- package/dist/types/api/queries/users/getUsers.d.ts +20 -20
- package/dist/types/api/queries/users/guests.d.ts +2 -2
- package/dist/types/api/queries/versions/getVersionsProducts.d.ts +9 -6
- package/dist/types/api/queries/versions/getVersionsProductsUtils.d.ts +5 -5
- package/dist/types/api/queries/versions/updateVersions.d.ts +2 -2
- package/dist/types/api/queries/views/getViews.d.ts +8 -8
- package/dist/types/api/queries/watchers/getWatchers.d.ts +2 -2
- package/dist/types/components/DetailsPanelDetails/hooks/index.d.ts +0 -1
- package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +29 -0
- package/dist/types/components/RemotePage/index.d.ts +1 -0
- package/dist/types/components/ReviewablesList/getGroupedReviewables.d.ts +1 -2
- package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +1 -0
- package/dist/types/components/index.d.ts +31 -30
- package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +3 -2
- package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +4 -2
- package/dist/types/containers/Feed/mentionHelpers/getMentionVersions.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +0 -5
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -4
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +1 -7
- package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +2 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.d.ts +1 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +5 -3
- package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +3 -2
- package/dist/types/containers/Views/index.d.ts +1 -1
- package/dist/types/context/AddonProjectContext.d.ts +9 -14
- package/dist/types/context/ProjectContext.d.ts +33 -0
- package/dist/types/context/index.d.ts +1 -0
- package/dist/types/hooks/useGroupByRemoteModules.d.ts +2 -1
- package/dist/types/util/index.d.ts +0 -2
- package/dist/types/util/versionUploadHelpers.d.ts +0 -1
- package/dist/util.cjs.js +1 -1
- package/dist/util.es.js +55 -58
- package/dist/util.es.js.map +1 -1
- package/package.json +1 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js +0 -2
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js.map +0 -1
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js +0 -113
- package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js.map +0 -1
- package/dist/shared/src/util/productTypes.cjs.js +0 -2
- package/dist/shared/src/util/productTypes.cjs.js.map +0 -1
- package/dist/shared/src/util/productTypes.es.js +0 -25
- package/dist/shared/src/util/productTypes.es.js.map +0 -1
- package/dist/types/components/DetailsPanelDetails/hooks/useEntityData.d.ts +0 -12
- package/dist/types/util/productTypes.d.ts +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserDashboard.cjs.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModel | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModel | undefined> = {}\n for (const project of projects) {\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const response = await dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName: project },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected') {\n throw 'No projects found'\n }\n projectInfo[project] = response.data\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","projectQueries","_res","useGetProjectsInfoQuery"],"mappings":"s9DAyCMA,EAAmBC,GACvBA,EAAS,OAAO,MACb,IAAI,CAAC,CAAE,KAAAC,CAAA,IAAWA,CAAI,EACtB,KAAK,CAACC,EAAGC,IAAM,CACR,MAAAC,EAASF,EAAE,OAASA,EAAE,KACtBG,EAASF,EAAE,OAASA,EAAE,KACrB,OAAAC,EAAO,cAAcC,CAAM,CACpC,CAAC,EAECC,EAAoB,CAACC,EAAuCC,EAAaC,IAC7EF,GAAA,MAAAA,EAAQ,OACJ,CACE,CAAE,KAAM,aAAc,GAAI,MAAO,EACjC,GAAGA,EAAO,QAAQ,CAAC,CAAE,GAAAG,EAAI,YAAAC,EAAa,UAAAC,KAAgB,CACpD,CAAE,KAAM,OAAQ,GAAAF,CAAG,EACnB,CAAE,KAAM,SAAU,GAAI,WAAaC,CAAY,EAC/C,GAAGC,EAAU,IAAKC,IAAc,CAAE,KAAM,SAAU,GAAI,QAAUA,CAAA,EAAW,EAC3E,GAAGD,EAAU,IAAKC,IAAc,CAC9B,KAAM,SACN,GAAI,QAAUA,EAAW,YAAcF,CAAA,EACvC,EACF,CAAE,KAAM,SAAU,GAAI,KAAK,UAAUF,CAAI,CAAE,CAC5C,CAAA,CACH,EACA,CAAC,CAAE,KAAM,aAAc,GAAI,OAAQ,EAE5BK,EAAiB,MAC5B,CACE,SAAAC,EAAW,CAAC,EACZ,QAAAC,EAAU,CAAA,CACZ,EAIAC,IACG,CACC,GAAA,CAEF,MAAMjB,EAAW,MAAMiB,EACrBC,EAA4B,UAAU,eAAe,SACnD,CAAE,SAAAH,EAAU,QAAAC,CAAQ,EACpB,CAAE,aAAc,EAAK,CAAA,CAEzB,EAEA,GAAIhB,EAAS,SAAW,YAAc,CAACA,EAAS,KACtC,cAAA,MAAM,iBAAkBgB,CAAO,EACjC,IAAI,MAAM,kBAAkBA,EAAQ,KAAK,IAAI,CAAC,EAAE,EAGxD,OAAIhB,EAAS,SAAW,YAAoB,CAAC,EAEtCA,EAAS,WACTmB,EAAO,CACd,eAAQ,MAAMA,CAAK,EACZ,CAAC,CAAA,CAEZ,EAEMD,EAA8BE,MAAO,iBAA+C,CACxF,UAAW,CACT,UAAW,CACT,kBAAmBrB,EACnB,aAAcO,EACd,MAAM,kBACJ,CAAE,UAAAM,EAAY,GAAI,SAAAG,EAAW,CAAG,CAAA,EAAI,CACpC,EAAA,CAAE,iBAAAM,EAAkB,gBAAAC,EAAiB,kBAAAC,EAAmB,SAAAN,GACxD,CACI,IAAAO,EACA,GAAA,CAEI,MAAAF,EAEN,MAAMG,EAAkB,MAAO,CAC7B,SAAAV,EAAW,CAAC,EACZ,QAAAC,EAAU,CAAA,CAAC,IAIP,CACE,MAAAU,EAAQ,MAAMZ,EAAe,CAAE,SAAAC,EAAU,QAAAC,GAAWC,CAAQ,EAG5DU,EAAwBD,EAAM,OAAQE,GAC1CA,EAAK,UAAU,KAAMf,GAAaD,GAAA,YAAAA,EAAW,SAASC,EAAS,CACjE,EAEMgB,EAA2BH,EAAM,OACpCE,GAAS,CAACA,EAAK,UAAU,KAAMf,GAAaD,GAAA,YAAAA,EAAW,SAASC,EAAS,CAC5E,EAGAQ,EAAkBS,GAAU,CAEJH,EAAA,QAASC,GAAS,CAChC,MAAAG,EAAQD,EAAM,UAAWE,GAAMA,EAAE,KAAOJ,EAAK,EAAE,EACjDG,IAAU,GACZD,EAAM,KAAKF,CAAI,EAGfE,EAAMC,CAAK,EAAIH,CACjB,CACD,EAEwBC,EAAA,QAASD,GAAS,CACnC,MAAAG,EAAQD,EAAM,UAAWE,GAAMA,EAAE,KAAOJ,EAAK,EAAE,EACjDG,IAAU,IACND,EAAA,OAAOC,EAAO,CAAC,CACvB,CACD,CAAA,CACF,CACH,EAEME,EAAe,MAAOC,EAAgBC,IAAiB,CAC3D,MAAMC,EAAUD,EAAQ,QAEpB,GAAA,EAACpB,GAAA,MAAAA,EAAU,SAASqB,IAAiB,OAAA,QAAQ,IAAI,sBAAsB,EAErE,MAAAC,EAAWF,EAAQ,QAAQ,SACjC,GAAI,CAACE,EAAiB,OAAA,QAAQ,IAAI,oBAAoB,EAGtCZ,EAAA,CACd,QAAS,CAACY,CAAQ,EAClB,SAAU,CAACD,CAAO,CAAA,CACnB,CACH,EAGQZ,EAAAc,EAAO,UAAU,cAAeL,CAAY,QAC7Cd,EAAO,CACd,QAAQ,MAAMA,CAAK,CAAA,CAKf,MAAAI,EAENe,EAAO,YAAYd,CAAK,CAAA,CAa5B,EAGA,eAAgB,CACd,kBAAmBzB,EACnB,aAAcO,CAChB,EAEA,sBAAuB,CACrB,kBAAmB,CAACN,EAAsCuC,EAAO,CAAE,SAAAxB,CAAa,EAAA,CAC9E,IAAAf,EAAS,MAAM,MAAM,IAAI,CAAC,CAAE,KAAMwC,KAAW,CACrC,MAAAC,EAAeC,EAAwBF,EAAK,YAAY,EAI9D,IAAIG,EAFW,CAACH,EAAK,WAAa,CAACA,EAAK,QAEVI,EAAsBH,CAAY,EAAI1B,GAChE,OAAO4B,GAAmB,UAAY,CAACA,OAAiC,CAAC,GAGvE,MAAAE,EAAY,cAAcL,EAAK,IAAI,UAElC,MAAA,CACL,GAAGA,EACH,aAAAC,EACA,SAAUE,EACV,UAAAE,CACF,CAAA,CACD,EACH,aAAetC,GACbA,GAAA,MAAAA,EAAQ,OACJ,CACE,CAAE,KAAM,OAAQ,GAAI,MAAO,EAC3B,GAAGA,EAAO,IAAI,CAAC,CAAE,KAAAuC,CAAA,KAAY,CAAE,KAAM,OAAQ,GAAIA,GAAO,GAE1D,CAAC,CAAE,KAAM,OAAQ,GAAI,MAAQ,CAAA,CAAA,CACrC,CAEJ,CAAC,EAEY,CAAE,kBAAAC,EAAmB,8BAAAC,GAAkC9B,EAQ9D+B,EAA2B/B,EAA4B,gBAAgB,CAC3E,UAAYgC,IAAW,CACrB,gBAAiBA,EAAM,MAAsD,CAC3E,MAAM,QAAQ,CAAE,SAAAnC,EAAW,CAAG,CAAA,EAAG,CAAE,SAAAE,CAAA,EAAY,CACzC,GAAA,CAEF,MAAMkC,EAAwD,CAAC,EAC/D,UAAWf,KAAWrB,EAAU,CAG9B,MAAMf,EAAW,MAAMiB,EACrBmC,UAAe,UAAU,WAAW,SAClC,CAAE,YAAahB,CAAQ,EACvB,CAAE,aAAc,EAAK,CAAA,CAEzB,EAEI,GAAApC,EAAS,SAAW,WAChB,KAAA,oBAEImD,EAAAf,CAAO,EAAIpC,EAAS,IAAA,CAGlC,MAAO,CAAE,KAAMmD,EAAa,KAAM,OAAW,MAAO,MAAU,QACvDhC,EAAY,CACnB,eAAQ,MAAMA,CAAK,EACZ,CAAE,MAAAA,EAAO,KAAM,OAAW,KAAM,MAAU,CAAA,CAErD,EACA,aAAc,CAACkC,EAAM7C,EAAQ,CAAE,SAAAO,CAC7B,IAAAA,EAAS,IAAKJ,IAAiB,CAAE,KAAM,UAAW,GAAIA,GAAc,CACvE,CAAA,CACH,EACF,CAAC,EAEY,CAAE,wBAAA2C,GAA4BL"}
|
|
1
|
+
{"version":3,"file":"getUserDashboard.cjs.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n Anatomy,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type ProjectModeWithAnatomy = ProjectModel & { anatomy?: Anatomy }\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModeWithAnatomy | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModeWithAnatomy | undefined> = {}\n for (const project of projects) {\n const projectName = project as string\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const responses = [\n dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n dispatch(\n projectQueries.endpoints.getProjectAnatomy.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n ]\n\n const response = await Promise.all(responses)\n\n const projectData = response[0] as ProjectModel | undefined\n const anatomyData = response[1] as Anatomy | undefined\n\n if (projectData) {\n projectInfo[projectName] = { ...projectData, anatomy: anatomyData }\n }\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","responses","projectQueries","projectData","anatomyData","_res","useGetProjectsInfoQuery"],"mappings":"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"}
|
|
@@ -36,36 +36,36 @@ import "../../generated/workfiles.es.js";
|
|
|
36
36
|
import "../../generated/ynputCloud.es.js";
|
|
37
37
|
import "../../generated/grouping.es.js";
|
|
38
38
|
import "../../generated/views.es.js";
|
|
39
|
-
import
|
|
39
|
+
import j from "../project/getProject.es.js";
|
|
40
40
|
import "../project/updateProject.es.js";
|
|
41
41
|
import "lodash";
|
|
42
42
|
import "react-toastify";
|
|
43
43
|
import "uuid";
|
|
44
|
-
import
|
|
44
|
+
import k from "../../../util/pubsub.es.js";
|
|
45
45
|
import G from "./convertAccessGroupsData.es.js";
|
|
46
|
-
import
|
|
47
|
-
const
|
|
48
|
-
const t = r.label || r.name,
|
|
49
|
-
return t.localeCompare(
|
|
50
|
-
}),
|
|
46
|
+
import P from "./getUserProjectsAccess.es.js";
|
|
47
|
+
const T = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, e) => {
|
|
48
|
+
const t = r.label || r.name, n = e.label || e.name;
|
|
49
|
+
return t.localeCompare(n);
|
|
50
|
+
}), g = (o, r, e) => o != null && o.length ? [
|
|
51
51
|
{ type: "kanBanTask", id: "LIST" },
|
|
52
|
-
...o.flatMap(({ id: t, projectName:
|
|
52
|
+
...o.flatMap(({ id: t, projectName: n, assignees: i }) => [
|
|
53
53
|
{ type: "task", id: t },
|
|
54
|
-
{ type: "kanban", id: "project-" +
|
|
55
|
-
...
|
|
56
|
-
...
|
|
54
|
+
{ type: "kanban", id: "project-" + n },
|
|
55
|
+
...i.map((a) => ({ type: "kanban", id: "user-" + a })),
|
|
56
|
+
...i.map((a) => ({
|
|
57
57
|
type: "kanban",
|
|
58
|
-
id: "user-" +
|
|
58
|
+
id: "user-" + a + "-project-" + n
|
|
59
59
|
})),
|
|
60
|
-
{ type: "kanban", id: JSON.stringify(
|
|
60
|
+
{ type: "kanban", id: JSON.stringify(e) }
|
|
61
61
|
])
|
|
62
|
-
] : [{ type: "kanBanTask", id: "LIST" }],
|
|
62
|
+
] : [{ type: "kanBanTask", id: "LIST" }], I = async ({
|
|
63
63
|
projects: o = [],
|
|
64
64
|
taskIds: r = []
|
|
65
|
-
},
|
|
65
|
+
}, e) => {
|
|
66
66
|
try {
|
|
67
|
-
const t = await
|
|
68
|
-
|
|
67
|
+
const t = await e(
|
|
68
|
+
h.endpoints.GetKanbanTasks.initiate(
|
|
69
69
|
{ projects: o, taskIds: r },
|
|
70
70
|
{ forceRefetch: !0 }
|
|
71
71
|
)
|
|
@@ -76,48 +76,48 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
|
|
|
76
76
|
} catch (t) {
|
|
77
77
|
return console.error(t), [];
|
|
78
78
|
}
|
|
79
|
-
},
|
|
79
|
+
}, h = v.enhanceEndpoints({
|
|
80
80
|
endpoints: {
|
|
81
81
|
GetKanban: {
|
|
82
|
-
transformResponse:
|
|
83
|
-
providesTags:
|
|
84
|
-
async onCacheEntryAdded({ assignees: o = [], projects: r = [] } = {}, { updateCachedData:
|
|
85
|
-
let
|
|
82
|
+
transformResponse: T,
|
|
83
|
+
providesTags: g,
|
|
84
|
+
async onCacheEntryAdded({ assignees: o = [], projects: r = [] } = {}, { updateCachedData: e, cacheDataLoaded: t, cacheEntryRemoved: n, dispatch: i }) {
|
|
85
|
+
let a;
|
|
86
86
|
try {
|
|
87
87
|
await t;
|
|
88
88
|
const c = async ({
|
|
89
|
-
projects:
|
|
90
|
-
taskIds:
|
|
89
|
+
projects: u = [],
|
|
90
|
+
taskIds: y = []
|
|
91
91
|
}) => {
|
|
92
|
-
const m = await
|
|
93
|
-
(
|
|
94
|
-
),
|
|
95
|
-
(
|
|
92
|
+
const m = await I({ projects: u, taskIds: y }, i), b = m.filter(
|
|
93
|
+
(s) => s.assignees.some((p) => o == null ? void 0 : o.includes(p))
|
|
94
|
+
), A = m.filter(
|
|
95
|
+
(s) => !s.assignees.some((p) => o == null ? void 0 : o.includes(p))
|
|
96
96
|
);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const d =
|
|
100
|
-
d === -1 ?
|
|
101
|
-
}),
|
|
102
|
-
const d =
|
|
103
|
-
d !== -1 &&
|
|
97
|
+
e((s) => {
|
|
98
|
+
b.forEach((p) => {
|
|
99
|
+
const d = s.findIndex((l) => l.id === p.id);
|
|
100
|
+
d === -1 ? s.push(p) : s[d] = p;
|
|
101
|
+
}), A.forEach((p) => {
|
|
102
|
+
const d = s.findIndex((l) => l.id === p.id);
|
|
103
|
+
d !== -1 && s.splice(d, 1);
|
|
104
104
|
});
|
|
105
105
|
});
|
|
106
|
-
},
|
|
107
|
-
const m =
|
|
106
|
+
}, f = async (u, y) => {
|
|
107
|
+
const m = y.project;
|
|
108
108
|
if (!(r != null && r.includes(m))) return console.log("project not selected");
|
|
109
|
-
const
|
|
110
|
-
if (!
|
|
109
|
+
const b = y.summary.entityId;
|
|
110
|
+
if (!b) return console.log("no entity id found");
|
|
111
111
|
c({
|
|
112
|
-
taskIds: [
|
|
112
|
+
taskIds: [b],
|
|
113
113
|
projects: [m]
|
|
114
114
|
});
|
|
115
115
|
};
|
|
116
|
-
|
|
116
|
+
a = k.subscribe("entity.task", f);
|
|
117
117
|
} catch (c) {
|
|
118
118
|
console.error(c);
|
|
119
119
|
}
|
|
120
|
-
await
|
|
120
|
+
await n, k.unsubscribe(a);
|
|
121
121
|
}
|
|
122
122
|
// // there is only one cache for kanban
|
|
123
123
|
// serializeQueryArgs: () => '',
|
|
@@ -134,20 +134,20 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
|
|
|
134
134
|
// same query as GetKanban but for specific tasks
|
|
135
135
|
// used mainly for patching tasks into the kanban cache
|
|
136
136
|
GetKanbanTasks: {
|
|
137
|
-
transformResponse:
|
|
138
|
-
providesTags:
|
|
137
|
+
transformResponse: T,
|
|
138
|
+
providesTags: g
|
|
139
139
|
},
|
|
140
140
|
// get all users on all selected projects
|
|
141
141
|
GetKanbanProjectUsers: {
|
|
142
|
-
transformResponse: (o, r, { projects:
|
|
143
|
-
const
|
|
144
|
-
let
|
|
145
|
-
(typeof
|
|
142
|
+
transformResponse: (o, r, { projects: e } = {}) => o.users.edges.map(({ node: t }) => {
|
|
143
|
+
const n = G(t.accessGroups);
|
|
144
|
+
let a = !t.isManager && !t.isAdmin ? P(n) : e;
|
|
145
|
+
(typeof a == "string" || !a) && (a = []);
|
|
146
146
|
const c = `/api/users/${t.name}/avatar`;
|
|
147
147
|
return {
|
|
148
148
|
...t,
|
|
149
|
-
accessGroups:
|
|
150
|
-
projects:
|
|
149
|
+
accessGroups: n,
|
|
150
|
+
projects: a,
|
|
151
151
|
avatarUrl: c
|
|
152
152
|
};
|
|
153
153
|
}),
|
|
@@ -157,37 +157,43 @@ const j = (o) => o.kanban.edges.map(({ node: r }) => r).sort((r, n) => {
|
|
|
157
157
|
] : [{ type: "user", id: "LIST" }]
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
}), { useGetKanbanQuery: Tt, useGetKanbanProjectUsersQuery: gt } =
|
|
160
|
+
}), { useGetKanbanQuery: Tt, useGetKanbanProjectUsersQuery: gt } = h, K = h.injectEndpoints({
|
|
161
161
|
endpoints: (o) => ({
|
|
162
162
|
getProjectsInfo: o.query({
|
|
163
|
-
async queryFn({ projects: r = [] }, { dispatch:
|
|
163
|
+
async queryFn({ projects: r = [] }, { dispatch: e }) {
|
|
164
164
|
try {
|
|
165
165
|
const t = {};
|
|
166
|
-
for (const
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
166
|
+
for (const n of r) {
|
|
167
|
+
const i = n, a = [
|
|
168
|
+
e(
|
|
169
|
+
j.endpoints.getProject.initiate(
|
|
170
|
+
{ projectName: i },
|
|
171
|
+
{ forceRefetch: !0 }
|
|
172
|
+
)
|
|
173
|
+
).unwrap(),
|
|
174
|
+
e(
|
|
175
|
+
j.endpoints.getProjectAnatomy.initiate(
|
|
176
|
+
{ projectName: i },
|
|
177
|
+
{ forceRefetch: !0 }
|
|
178
|
+
)
|
|
179
|
+
).unwrap()
|
|
180
|
+
], c = await Promise.all(a), f = c[0], u = c[1];
|
|
181
|
+
f && (t[i] = { ...f, anatomy: u });
|
|
176
182
|
}
|
|
177
183
|
return { data: t, meta: void 0, error: void 0 };
|
|
178
184
|
} catch (t) {
|
|
179
185
|
return console.error(t), { error: t, meta: void 0, data: void 0 };
|
|
180
186
|
}
|
|
181
187
|
},
|
|
182
|
-
providesTags: (r,
|
|
188
|
+
providesTags: (r, e, { projects: t }) => t.map((n) => ({ type: "project", id: n }))
|
|
183
189
|
})
|
|
184
190
|
})
|
|
185
|
-
}), { useGetProjectsInfoQuery:
|
|
191
|
+
}), { useGetProjectsInfoQuery: At } = K;
|
|
186
192
|
export {
|
|
187
|
-
|
|
188
|
-
|
|
193
|
+
K as dashboardQueries,
|
|
194
|
+
I as getKanbanTasks,
|
|
189
195
|
gt as useGetKanbanProjectUsersQuery,
|
|
190
196
|
Tt as useGetKanbanQuery,
|
|
191
|
-
|
|
197
|
+
At as useGetProjectsInfoQuery
|
|
192
198
|
};
|
|
193
199
|
//# sourceMappingURL=getUserDashboard.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserDashboard.es.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModel | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModel | undefined> = {}\n for (const project of projects) {\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const response = await dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName: project },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected') {\n throw 'No projects found'\n }\n projectInfo[project] = response.data\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","projectQueries","_res","useGetProjectsInfoQuery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getUserDashboard.es.js","sources":["../../../../../../src/api/queries/userDashboard/getUserDashboard.ts"],"sourcesContent":["import {\n gqlApi,\n GetKanbanProjectUsersQuery,\n GetKanbanQuery,\n ProjectModel,\n KanbanNode,\n Anatomy,\n} from '@shared/api/generated'\nimport { projectQueries } from '@shared/api/queries/project'\nimport { PubSub } from '@shared/util'\nimport convertAccessGroupsData, { AccessGroups } from './convertAccessGroupsData'\n\n// GetKanban response type\nexport type GetKanbanResponse = KanbanNode[]\n\n// GetKanbanProjectUsers response type\nexport type KanbanProjectUserNode = Omit<\n GetKanbanProjectUsersQuery['users']['edges'][0]['node'],\n 'accessGroups'\n> & { accessGroups: AccessGroups; projects: string[]; avatarUrl: string }\nexport type GetKanbanProjectUsersResponse = KanbanProjectUserNode[]\n\nimport { DefinitionsFromApi, OverrideResultType, TagTypesFromApi } from '@reduxjs/toolkit/query'\nimport getUserProjectsAccess from './getUserProjectsAccess'\nimport { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<\n Definitions,\n 'GetKanban' | 'GetKanbanTasks' | 'GetKanbanProjectUsers'\n> & {\n GetKanban: OverrideResultType<Definitions['GetKanban'], GetKanbanResponse>\n GetKanbanTasks: OverrideResultType<Definitions['GetKanbanTasks'], GetKanbanResponse>\n GetKanbanProjectUsers: OverrideResultType<\n Definitions['GetKanbanProjectUsers'],\n GetKanbanProjectUsersResponse\n >\n}\n\n// get edges and sort by task label || name\nconst transformKanban = (response: GetKanbanQuery) =>\n response.kanban.edges\n .map(({ node }) => node)\n .sort((a, b) => {\n const aLabel = a.label || a.name\n const bLabel = b.label || b.name\n return aLabel.localeCompare(bLabel)\n })\n\nconst provideKanbanTags = (result: GetKanbanResponse | undefined, _error: any, args: any) =>\n result?.length\n ? [\n { type: 'kanBanTask', id: 'LIST' },\n ...result.flatMap(({ id, projectName, assignees }) => [\n { type: 'task', id },\n { type: 'kanban', id: 'project-' + projectName },\n ...assignees.map((assignee) => ({ type: 'kanban', id: 'user-' + assignee })),\n ...assignees.map((assignee) => ({\n type: 'kanban',\n id: 'user-' + assignee + '-project-' + projectName,\n })),\n { type: 'kanban', id: JSON.stringify(args) },\n ]),\n ]\n : [{ type: 'kanBanTask', id: 'LIST' }]\n\nexport const getKanbanTasks = async (\n {\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n },\n dispatch: ThunkDispatch<any, any, UnknownAction>,\n) => {\n try {\n // get the task\n const response = await dispatch(\n enhancedDashboardGraphqlApi.endpoints.GetKanbanTasks.initiate(\n { projects, taskIds },\n { forceRefetch: true },\n ),\n )\n\n if (response.status === 'rejected' || !response.data) {\n console.error('No tasks found', taskIds)\n throw new Error(`No tasks found ${taskIds.join(', ')}`)\n }\n\n if (response.status !== 'fulfilled') return []\n // get tasks from response (usually only one task)\n return response.data\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nconst enhancedDashboardGraphqlApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n GetKanban: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n async onCacheEntryAdded(\n { assignees = [], projects = [] } = {},\n { updateCachedData, cacheDataLoaded, cacheEntryRemoved, dispatch },\n ) {\n let token\n try {\n // wait for the initial query to resolve before proceeding\n await cacheDataLoaded\n\n const patchKanbanTask = async ({\n projects = [],\n taskIds = [],\n }: {\n projects: string[]\n taskIds: string[]\n }) => {\n const tasks = await getKanbanTasks({ projects, taskIds }, dispatch)\n\n // get all tasks that have been ADDED to the assignees\n const tasksWithArgAssignees = tasks.filter((task) =>\n task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n // get all tasks that have been REMOVED from the assignees\n const tasksWithoutArgAssignees = tasks.filter(\n (task) => !task.assignees.some((assignee) => assignees?.includes(assignee)),\n )\n\n // patch the kanban query by adding new tasks and remove old tasks\n updateCachedData((draft) => {\n // add new tasks\n tasksWithArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index === -1) {\n draft.push(task)\n } else {\n // update the task\n draft[index] = task\n }\n })\n // remove old tasks\n tasksWithoutArgAssignees.forEach((task) => {\n const index = draft.findIndex((t) => t.id === task.id)\n if (index !== -1) {\n draft.splice(index, 1)\n }\n })\n })\n }\n\n const handlePubSub = async (_topic: string, message: any) => {\n const project = message.project as string\n // first check the project name as selected\n if (!projects?.includes(project)) return console.log('project not selected')\n // then get entity id\n const entityId = message.summary.entityId\n if (!entityId) return console.log('no entity id found')\n\n // patch task updates into kanban cache\n patchKanbanTask({\n taskIds: [entityId],\n projects: [project],\n })\n }\n\n // sub to websocket topic\n token = PubSub.subscribe('entity.task', handlePubSub)\n } catch (error) {\n console.error(error)\n // no-op in case `cacheEntryRemoved` resolves before `cacheDataLoaded`,\n // in which case `cacheDataLoaded` will throw\n }\n // cacheEntryRemoved will resolve when the cache subscription is no longer active\n await cacheEntryRemoved\n // perform cleanup steps once the `cacheEntryRemoved` promise resolves\n PubSub.unsubscribe(token)\n },\n // // there is only one cache for kanban\n // serializeQueryArgs: () => '',\n // // whenever the assignees or projects change, we need to refetch the one query\n // forceRefetch: (params) => {\n // const { currentArg, previousArg } = params\n // // if the assignees are different, we need to refetch the query\n // if (!isEqual(currentArg?.assignees, previousArg?.assignees)) return true\n // // if the projects are different, we need to refetch the query\n // if (!isEqual(currentArg?.projects, previousArg?.projects)) return true\n // return false\n // },\n },\n // same query as GetKanban but for specific tasks\n // used mainly for patching tasks into the kanban cache\n GetKanbanTasks: {\n transformResponse: transformKanban,\n providesTags: provideKanbanTags,\n },\n // get all users on all selected projects\n GetKanbanProjectUsers: {\n transformResponse: (response: GetKanbanProjectUsersQuery, _meta, { projects } = {}) =>\n response.users.edges.map(({ node: user }) => {\n const accessGroups = convertAccessGroupsData(user.accessGroups)\n // parse access groups json\n const isUser = !user.isManager && !user.isAdmin\n // get the projects that the user has access to\n let projectsAccess = isUser ? getUserProjectsAccess(accessGroups) : projects\n if (typeof projectsAccess === 'string' || !projectsAccess) projectsAccess = []\n\n // assignees select requires avatarUrl\n const avatarUrl = `/api/users/${user.name}/avatar`\n\n return {\n ...user,\n accessGroups: accessGroups,\n projects: projectsAccess,\n avatarUrl,\n }\n }),\n providesTags: (result) =>\n result?.length\n ? [\n { type: 'user', id: 'LIST' },\n ...result.map(({ name }) => ({ type: 'user', id: name })),\n ]\n : [{ type: 'user', id: 'LIST' }],\n },\n },\n})\n\nexport const { useGetKanbanQuery, useGetKanbanProjectUsersQuery } = enhancedDashboardGraphqlApi\n\ntype GetProjectsInfoParams = {\n projects: string[]\n}\n\nexport type ProjectModeWithAnatomy = ProjectModel & { anatomy?: Anatomy }\n\nexport type GetProjectsInfoResponse = { [projectName: string]: ProjectModeWithAnatomy | undefined }\n\nconst injectedDashboardRestApi = enhancedDashboardGraphqlApi.injectEndpoints({\n endpoints: (build) => ({\n getProjectsInfo: build.query<GetProjectsInfoResponse, GetProjectsInfoParams>({\n async queryFn({ projects = [] }, { dispatch }) {\n try {\n // get project info for each project\n const projectInfo: Record<string, ProjectModeWithAnatomy | undefined> = {}\n for (const project of projects) {\n const projectName = project as string\n // hopefully this will be cached\n // it also allows for different combination of projects but still use the cache\n const responses = [\n dispatch(\n projectQueries.endpoints.getProject.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n dispatch(\n projectQueries.endpoints.getProjectAnatomy.initiate(\n { projectName },\n { forceRefetch: true },\n ),\n ).unwrap(),\n ]\n\n const response = await Promise.all(responses)\n\n const projectData = response[0] as ProjectModel | undefined\n const anatomyData = response[1] as Anatomy | undefined\n\n if (projectData) {\n projectInfo[projectName] = { ...projectData, anatomy: anatomyData }\n }\n }\n\n return { data: projectInfo, meta: undefined, error: undefined }\n } catch (error: any) {\n console.error(error)\n return { error, meta: undefined, data: undefined }\n }\n },\n providesTags: (_res, _error, { projects }) =>\n projects.map((projectName) => ({ type: 'project', id: projectName })),\n }),\n }),\n})\n\nexport const { useGetProjectsInfoQuery } = injectedDashboardRestApi\nexport { injectedDashboardRestApi as dashboardQueries }\n"],"names":["transformKanban","response","node","a","b","aLabel","bLabel","provideKanbanTags","result","_error","args","id","projectName","assignees","assignee","getKanbanTasks","projects","taskIds","dispatch","enhancedDashboardGraphqlApi","error","gqlApi","updateCachedData","cacheDataLoaded","cacheEntryRemoved","token","patchKanbanTask","tasks","tasksWithArgAssignees","task","tasksWithoutArgAssignees","draft","index","t","handlePubSub","_topic","message","project","entityId","PubSub","_meta","user","accessGroups","convertAccessGroupsData","projectsAccess","getUserProjectsAccess","avatarUrl","name","useGetKanbanQuery","useGetKanbanProjectUsersQuery","injectedDashboardRestApi","build","projectInfo","responses","projectQueries","projectData","anatomyData","_res","useGetProjectsInfoQuery"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,IAAkB,CAACC,MACvBA,EAAS,OAAO,MACb,IAAI,CAAC,EAAE,MAAAC,EAAA,MAAWA,CAAI,EACtB,KAAK,CAACC,GAAGC,MAAM;AACR,QAAAC,IAASF,EAAE,SAASA,EAAE,MACtBG,IAASF,EAAE,SAASA,EAAE;AACrB,SAAAC,EAAO,cAAcC,CAAM;AACpC,CAAC,GAECC,IAAoB,CAACC,GAAuCC,GAAaC,MAC7EF,KAAA,QAAAA,EAAQ,SACJ;AAAA,EACE,EAAE,MAAM,cAAc,IAAI,OAAO;AAAA,EACjC,GAAGA,EAAO,QAAQ,CAAC,EAAE,IAAAG,GAAI,aAAAC,GAAa,WAAAC,QAAgB;AAAA,IACpD,EAAE,MAAM,QAAQ,IAAAF,EAAG;AAAA,IACnB,EAAE,MAAM,UAAU,IAAI,aAAaC,EAAY;AAAA,IAC/C,GAAGC,EAAU,IAAI,CAACC,OAAc,EAAE,MAAM,UAAU,IAAI,UAAUA,EAAA,EAAW;AAAA,IAC3E,GAAGD,EAAU,IAAI,CAACC,OAAc;AAAA,MAC9B,MAAM;AAAA,MACN,IAAI,UAAUA,IAAW,cAAcF;AAAA,IAAA,EACvC;AAAA,IACF,EAAE,MAAM,UAAU,IAAI,KAAK,UAAUF,CAAI,EAAE;AAAA,EAC5C,CAAA;AACH,IACA,CAAC,EAAE,MAAM,cAAc,IAAI,QAAQ,GAE5BK,IAAiB,OAC5B;AAAA,EACE,UAAAC,IAAW,CAAC;AAAA,EACZ,SAAAC,IAAU,CAAA;AACZ,GAIAC,MACG;AACC,MAAA;AAEF,UAAMjB,IAAW,MAAMiB;AAAA,MACrBC,EAA4B,UAAU,eAAe;AAAA,QACnD,EAAE,UAAAH,GAAU,SAAAC,EAAQ;AAAA,QACpB,EAAE,cAAc,GAAK;AAAA,MAAA;AAAA,IAEzB;AAEA,QAAIhB,EAAS,WAAW,cAAc,CAACA,EAAS;AACtC,oBAAA,MAAM,kBAAkBgB,CAAO,GACjC,IAAI,MAAM,kBAAkBA,EAAQ,KAAK,IAAI,CAAC,EAAE;AAGxD,WAAIhB,EAAS,WAAW,cAAoB,CAAC,IAEtCA,EAAS;AAAA,WACTmB,GAAO;AACd,mBAAQ,MAAMA,CAAK,GACZ,CAAC;AAAA,EAAA;AAEZ,GAEMD,IAA8BE,EAAO,iBAA+C;AAAA,EACxF,WAAW;AAAA,IACT,WAAW;AAAA,MACT,mBAAmBrB;AAAA,MACnB,cAAcO;AAAA,MACd,MAAM,kBACJ,EAAE,WAAAM,IAAY,IAAI,UAAAG,IAAW,CAAG,EAAA,IAAI,CACpC,GAAA,EAAE,kBAAAM,GAAkB,iBAAAC,GAAiB,mBAAAC,GAAmB,UAAAN,KACxD;AACI,YAAAO;AACA,YAAA;AAEI,gBAAAF;AAEN,gBAAMG,IAAkB,OAAO;AAAA,YAC7B,UAAAV,IAAW,CAAC;AAAA,YACZ,SAAAC,IAAU,CAAA;AAAA,UAAC,MAIP;AACE,kBAAAU,IAAQ,MAAMZ,EAAe,EAAE,UAAAC,GAAU,SAAAC,KAAWC,CAAQ,GAG5DU,IAAwBD,EAAM;AAAA,cAAO,CAACE,MAC1CA,EAAK,UAAU,KAAK,CAACf,MAAaD,KAAA,gBAAAA,EAAW,SAASC,EAAS;AAAA,YACjE,GAEMgB,IAA2BH,EAAM;AAAA,cACrC,CAACE,MAAS,CAACA,EAAK,UAAU,KAAK,CAACf,MAAaD,KAAA,gBAAAA,EAAW,SAASC,EAAS;AAAA,YAC5E;AAGA,YAAAQ,EAAiB,CAACS,MAAU;AAEJ,cAAAH,EAAA,QAAQ,CAACC,MAAS;AAChC,sBAAAG,IAAQD,EAAM,UAAU,CAACE,MAAMA,EAAE,OAAOJ,EAAK,EAAE;AACrD,gBAAIG,MAAU,KACZD,EAAM,KAAKF,CAAI,IAGfE,EAAMC,CAAK,IAAIH;AAAA,cACjB,CACD,GAEwBC,EAAA,QAAQ,CAACD,MAAS;AACnC,sBAAAG,IAAQD,EAAM,UAAU,CAACE,MAAMA,EAAE,OAAOJ,EAAK,EAAE;AACrD,gBAAIG,MAAU,MACND,EAAA,OAAOC,GAAO,CAAC;AAAA,cACvB,CACD;AAAA,YAAA,CACF;AAAA,UACH,GAEME,IAAe,OAAOC,GAAgBC,MAAiB;AAC3D,kBAAMC,IAAUD,EAAQ;AAEpB,gBAAA,EAACpB,KAAA,QAAAA,EAAU,SAASqB,IAAiB,QAAA,QAAQ,IAAI,sBAAsB;AAErE,kBAAAC,IAAWF,EAAQ,QAAQ;AACjC,gBAAI,CAACE,EAAiB,QAAA,QAAQ,IAAI,oBAAoB;AAGtC,YAAAZ,EAAA;AAAA,cACd,SAAS,CAACY,CAAQ;AAAA,cAClB,UAAU,CAACD,CAAO;AAAA,YAAA,CACnB;AAAA,UACH;AAGQ,UAAAZ,IAAAc,EAAO,UAAU,eAAeL,CAAY;AAAA,iBAC7Cd,GAAO;AACd,kBAAQ,MAAMA,CAAK;AAAA,QAAA;AAKf,cAAAI,GAENe,EAAO,YAAYd,CAAK;AAAA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAa5B;AAAA;AAAA;AAAA,IAGA,gBAAgB;AAAA,MACd,mBAAmBzB;AAAA,MACnB,cAAcO;AAAA,IAChB;AAAA;AAAA,IAEA,uBAAuB;AAAA,MACrB,mBAAmB,CAACN,GAAsCuC,GAAO,EAAE,UAAAxB,EAAa,IAAA,CAC9E,MAAAf,EAAS,MAAM,MAAM,IAAI,CAAC,EAAE,MAAMwC,QAAW;AACrC,cAAAC,IAAeC,EAAwBF,EAAK,YAAY;AAI9D,YAAIG,IAFW,CAACH,EAAK,aAAa,CAACA,EAAK,UAEVI,EAAsBH,CAAY,IAAI1B;AACpE,SAAI,OAAO4B,KAAmB,YAAY,CAACA,WAAiC,CAAC;AAGvE,cAAAE,IAAY,cAAcL,EAAK,IAAI;AAElC,eAAA;AAAA,UACL,GAAGA;AAAA,UACH,cAAAC;AAAA,UACA,UAAUE;AAAA,UACV,WAAAE;AAAA,QACF;AAAA,MAAA,CACD;AAAA,MACH,cAAc,CAACtC,MACbA,KAAA,QAAAA,EAAQ,SACJ;AAAA,QACE,EAAE,MAAM,QAAQ,IAAI,OAAO;AAAA,QAC3B,GAAGA,EAAO,IAAI,CAAC,EAAE,MAAAuC,EAAA,OAAY,EAAE,MAAM,QAAQ,IAAIA,IAAO;AAAA,UAE1D,CAAC,EAAE,MAAM,QAAQ,IAAI,OAAQ,CAAA;AAAA,IAAA;AAAA,EACrC;AAEJ,CAAC,GAEY,EAAE,mBAAAC,IAAmB,+BAAAC,OAAkC9B,GAU9D+B,IAA2B/B,EAA4B,gBAAgB;AAAA,EAC3E,WAAW,CAACgC,OAAW;AAAA,IACrB,iBAAiBA,EAAM,MAAsD;AAAA,MAC3E,MAAM,QAAQ,EAAE,UAAAnC,IAAW,CAAG,EAAA,GAAG,EAAE,UAAAE,EAAA,GAAY;AACzC,YAAA;AAEF,gBAAMkC,IAAkE,CAAC;AACzE,qBAAWf,KAAWrB,GAAU;AAC9B,kBAAMJ,IAAcyB,GAGdgB,IAAY;AAAA,cAChBnC;AAAA,gBACEoC,EAAe,UAAU,WAAW;AAAA,kBAClC,EAAE,aAAA1C,EAAY;AAAA,kBACd,EAAE,cAAc,GAAK;AAAA,gBAAA;AAAA,gBAEvB,OAAO;AAAA,cACTM;AAAA,gBACEoC,EAAe,UAAU,kBAAkB;AAAA,kBACzC,EAAE,aAAA1C,EAAY;AAAA,kBACd,EAAE,cAAc,GAAK;AAAA,gBAAA;AAAA,cACvB,EACA,OAAO;AAAA,YACX,GAEMX,IAAW,MAAM,QAAQ,IAAIoD,CAAS,GAEtCE,IAActD,EAAS,CAAC,GACxBuD,IAAcvD,EAAS,CAAC;AAE9B,YAAIsD,MACFH,EAAYxC,CAAW,IAAI,EAAE,GAAG2C,GAAa,SAASC,EAAY;AAAA,UACpE;AAGF,iBAAO,EAAE,MAAMJ,GAAa,MAAM,QAAW,OAAO,OAAU;AAAA,iBACvDhC,GAAY;AACnB,yBAAQ,MAAMA,CAAK,GACZ,EAAE,OAAAA,GAAO,MAAM,QAAW,MAAM,OAAU;AAAA,QAAA;AAAA,MAErD;AAAA,MACA,cAAc,CAACqC,GAAMhD,GAAQ,EAAE,UAAAO,EAC7B,MAAAA,EAAS,IAAI,CAACJ,OAAiB,EAAE,MAAM,WAAW,IAAIA,IAAc;AAAA,IACvE,CAAA;AAAA,EACH;AACF,CAAC,GAEY,EAAE,yBAAA8C,OAA4BR;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../base/client.cjs.js");const w=require("../../generated/graphql.cjs.js");require("../../generated/graphqlLinks.cjs.js");require("../../generated/access.cjs.js");require("../../generated/actions.cjs.js");require("../../generated/activityFeed.cjs.js");require("../../generated/addons.cjs.js");require("../../generated/anatomy.cjs.js");require("../../generated/attributes.cjs.js");require("../../generated/authentication.cjs.js");require("../../generated/bundles.cjs.js");require("../../generated/configuration.cjs.js");require("../../generated/desktop.cjs.js");require("../../generated/entityLists.cjs.js");require("../../generated/events.cjs.js");require("../../generated/files.cjs.js");require("../../generated/folders.cjs.js");require("../../generated/inbox.cjs.js");require("../../generated/links.cjs.js");require("../../generated/market.cjs.js");require("../../generated/onboarding.cjs.js");require("../../generated/operations.cjs.js");require("../../generated/products.cjs.js");require("../../generated/projectDashboard.cjs.js");require("../../generated/projects.cjs.js");require("../../generated/reviewables.cjs.js");require("../../generated/services.cjs.js");require("../../generated/system.cjs.js");require("../../generated/tasks.cjs.js");require("../../generated/teams.cjs.js");require("../../generated/thumbnails.cjs.js");require("../../generated/uRIs.cjs.js");require("../../generated/users.cjs.js");require("../../generated/versions.cjs.js");require("../../generated/workfiles.cjs.js");require("../../generated/ynputCloud.cjs.js");require("../../generated/grouping.cjs.js");require("../../generated/views.cjs.js");const n=require("./getVersionsProductsUtils.cjs.js"),R=w.api.enhanceEndpoints({endpoints:{GetVersions:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetVersionsByProductId:{transformResponse:n.transformVersionsResponse,providesTags:n.provideTagsForVersionsResult},GetProducts:{transformResponse:n.transformProductsResponse,providesTags:n.provideTagsForProductsResult}}}),V=250,_=1e3,B=10,F=R.injectEndpoints({endpoints:Q=>({getVersionsInfinite:Q.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(d,p,u,s)=>{const e=d.pageInfo;if(!(!(u.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:u.desc}}},queryFn:async({queryArg:d,pageParam:p},u)=>{try{const{sortBy:s,desc:e,folderIds:f,...i}=d,{cursor:P}=p,t={...i};s?(t.sortBy=s,e?(t.before=P||void 0,t.last=V):(t.after=P||void 0,t.first=V)):(t.after=P||void 0,t.first=V),f&&f.length&&(t.folderIds=f);const r=await u.dispatch(R.endpoints.GetVersions.initiate(t,{forceRefetch:!0}));if(r.error)throw r.error;const a={versions:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:r.data||a}}catch(s){return console.error("Error in getVersionsInfiniteQuery queryFn:",s),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(s.message)}}}},providesTags:n.provideTagsForVersionsInfinite}),getVersionsByProducts:Q.query({queryFn:async(d,{dispatch:p,forced:u})=>{var T;const{productIds:s=[],desc:e,...f}=d,i=async(l,c)=>{const o={...f,productIds:[l]};return e?(c&&(o.before=c),o.last=_):(c&&(o.after=c),o.first=_),p(R.endpoints.GetVersionsByProductId.initiate(o,{forceRefetch:u}))},P=s.map(l=>i(l)),t=await Promise.allSettled(P),r=[],a=[];for(let l=0;l<t.length;l++){const c=t[l],o=s[l];if(c.status==="rejected"){console.error(`Error fetching versions for product ${o}:`,c.reason),a.push({productId:o,error:n.parseGQLErrorMessage(c.reason)});continue}const h=c.value;if(h.error){console.error(`Error fetching versions for product ${o}:`,h.error),a.push({productId:o,error:n.parseGQLErrorMessage(((T=h.error)==null?void 0:T.message)||"Unknown error")});continue}if(!h.data)continue;r.push(...h.data.versions);let y=h.data.pageInfo,G=1;for(;y&&G<B;){const v=e?y.hasPreviousPage:y.hasNextPage,I=y.endCursor;if(!v||!I)break;const q=await i(o,I);if(q.error){console.error(`Error fetching versions page ${G+1} for product ${o}:`,q.error),a.push({productId:o,error:q.error});break}if(!q.data)break;r.push(...q.data.versions),y=q.data.pageInfo,G++}}return a.length>0&&console.warn(`Partial success: ${a.length} of ${s.length} products failed to fetch versions`,a),{data:{versions:r,pageInfo:void 0,errors:a.length>0?a:void 0}}},providesTags:n.provideTagsForVersionsResult}),getProductsInfinite:Q.infiniteQuery({infiniteQueryOptions:{initialPageParam:{cursor:"",desc:!1},getNextPageParam:(d,p,u,s)=>{const e=d.pageInfo;if(!(!(u.desc?e!=null&&e.hasPreviousPage:e!=null&&e.hasNextPage)||!(e!=null&&e.endCursor)))return{cursor:e==null?void 0:e.endCursor,desc:u.desc}}},queryFn:async({queryArg:d,pageParam:p},u)=>{let s;try{const{sortBy:e,desc:f,folderIds:i,...P}=d,{cursor:t}=p,r={...P};if(e?(r.sortBy=e,f?(r.before=t||void 0,r.last=V):(r.after=t||void 0,r.first=V)):(r.after=t||void 0,r.first=V),i&&i.length&&(r.folderIds=i),s=await u.dispatch(R.endpoints.GetProducts.initiate(r,{forceRefetch:!0})),s.error)throw s.error;const a={products:[],pageInfo:{hasNextPage:!1,endCursor:null,startCursor:null,hasPreviousPage:!1}};return{data:s.data||a}}catch(e){return console.error("Error in getProductsInfiniteQuery queryFn:",e),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(e.message)}}}},providesTags:n.provideTagsForProductsInfinite}),getGroupedVersionsList:Q.query({queryFn:async({projectName:d,groups:p,groupFilterKey:u="versionFilter",versionFilter:s,productFilter:e,taskFilter:f,folderIds:i,desc:P,sortBy:t,featuredOnly:r,hasReviewables:a},T)=>{var l,c,o,h,y,G;try{const v=[];for(const g of p){const E=g.count||500,m={projectName:d,productFilter:e,taskFilter:f,versionFilter:s,[u]:g.filter,folderIds:i!=null&&i.length?i:void 0,sortBy:t,featuredOnly:r,hasReviewables:a,group:g.value};P?m.last=E:m.first=E;const N=T.dispatch(R.endpoints.GetVersions.initiate(m,{forceRefetch:!0}));v.push(N)}const I=await Promise.all(v),q=[];for(const g of I){if(g.error)throw g.error;const E=(l=g.originalArgs)==null?void 0:l.group,m=((o=(c=g.data)==null?void 0:c.pageInfo)==null?void 0:o.hasNextPage)||((y=(h=g.data)==null?void 0:h.pageInfo)==null?void 0:y.hasPreviousPage)||!1,N=((G=g.data)==null?void 0:G.versions.map((C,x,O)=>({...C,groups:[{value:E,hasNextPage:x===O.length-1&&m?E:void 0}]})))||[];q.push(...N)}return{data:{versions:q}}}catch(v){return console.error("Error in getGroupedVersionsList queryFn:",v),{error:{status:"FETCH_ERROR",error:n.parseGQLErrorMessage(v.message)}}}},providesTags:n.provideTagsForVersionsResult})})}),{useGetVersionsQuery:U}=R,{useGetVersionsInfiniteInfiniteQuery:L,useGetVersionsByProductsQuery:b,useGetProductsInfiniteInfiniteQuery:A,useGetGroupedVersionsListQuery:M}=F;exports.VP_INFINITE_QUERY_COUNT=V;exports.enhancedVersionsPageApi=R;exports.injectedVersionsPageApi=F;exports.useGetGroupedVersionsListQuery=M;exports.useGetProductsInfiniteQuery=A;exports.useGetVersionsByProductsQuery=b;exports.useGetVersionsInfiniteQuery=L;exports.useGetVersionsQuery=U;
|
|
2
2
|
//# sourceMappingURL=getVersionsProducts.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVersionsProducts.cjs.js","sources":["../../../../../../src/api/queries/versions/getVersionsProducts.ts"],"sourcesContent":["// QUERIES FOR THE VERSIONS PAGE, FETCHING AND UPDATING DATA\n// Uses a separate graphqlVersionsApi for increased IDE speed\n\n// There are 4 main fetch requests:\n\n// Versions Only:\n// 1. GetVersions - fetches all versions in the project for given filtering and with pagination\n\n// Products and Versions (stacked):\n// 2. GetProducts - fetches all products in the project based on product and version filtering\n// 3. GetVersionsByProducts - when a product is expanded, fetches all versions for the products that are expanded. Uses getVersionsByProductId for each parent id. (uses queryFn)\n// 4. GetVersionsByProductId - get all versions for a specific product. Used by getVersionsByProducts only.\n\n// VersionFragment is used in all version queries to ensure consistent data structure\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n InfiniteData,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport {\n VpFolderFragment,\n GetProductsQuery,\n GetProductsQueryVariables,\n GetVersionsByProductIdQueryVariables,\n GetVersionsQuery,\n GetVersionsQueryVariables,\n gqlApi,\n PageInfo,\n} from '@shared/api/generated'\nimport {\n parseGQLErrorMessage,\n provideTagsForProductsInfinite,\n provideTagsForProductsResult,\n provideTagsForVersionsInfinite,\n provideTagsForVersionsResult,\n transformProductsResponse,\n transformVersionsResponse,\n} from './getVersionsProductsUtils'\n\n// Query result types\nexport type FolderAttribNode = VpFolderFragment & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n}\nexport type VersionNodeRAW = GetVersionsQuery['project']['versions']['edges'][0]['node']\nexport type VersionNode = VersionNodeRAW & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n product: VersionNodeRAW['product'] & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n folder: FolderAttribNode // folder with parsed attribs\n }\n groups?: { value?: string; hasNextPage?: string }[] // grouping metadata\n}\nexport type ProductNodeRAW = GetProductsQuery['project']['products']['edges'][0]['node']\nexport type ProductNode = Omit<ProductNodeRAW, 'versions'> & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n featuredVersion?: VersionNode | null // added separately\n folder: FolderAttribNode // folder with parsed attribs\n versions: {\n id: string\n name: string\n version: number\n heroVersionId?: string | null\n }[] // versions with isHero flag\n}\n\nexport type GetVersionsResult = {\n pageInfo?: PageInfo\n versions: VersionNode[]\n errors?: Array<{ productId: string; error: string }>\n}\n\n// for infinite query args\nexport type GetVersionsArgs = Omit<GetVersionsQueryVariables, 'cursor'> & {\n desc?: boolean // sort direction\n}\n\n// for paginated queries in infinite query\ntype VersionsPageParam = {\n cursor: string\n desc?: boolean\n}\n\nexport type GetProductsArgs = Omit<GetProductsQueryVariables, 'cursor' | 'versionIds'> & {\n desc?: boolean // sort direction\n}\n\ntype ProductsPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype GetVersionsByProductsArgs = GetVersionsByProductIdQueryVariables & {\n productIds: string[]\n desc?: boolean\n}\n\nexport type GetGroupedVersionsListArgs = {\n projectName: string\n groups: { filter: string; count?: number | null; value: string }[]\n productFilter?: string\n taskFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n featuredOnly?: string[]\n}\n\nexport type GetGroupedVersionsListResult = {\n versions: VersionNode[]\n}\n\nexport type VersionInfiniteResult = InfiniteData<GetVersionsResult, VersionsPageParam> | undefined\n\nexport type ProductInfiniteResult = InfiniteData<GetProductsResult, ProductsPageParam> | undefined\n\nexport type GetProductsResult = {\n pageInfo: PageInfo\n products: ProductNode[]\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetVersions'> & {\n GetVersions: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetVersionsByProductId: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetProducts: OverrideResultType<Definitions['GetProducts'], GetProductsResult>\n}\n\nconst enhancedVersionsPageApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // used by both stacked and non-stacked views\n GetVersions: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getVersionsByProducts only\n GetVersionsByProductId: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getProductsInfinite only\n GetProducts: {\n transformResponse: transformProductsResponse,\n providesTags: provideTagsForProductsResult,\n },\n },\n})\n\nexport const VP_INFINITE_QUERY_COUNT = 250 // Number of items to fetch per page\nconst VERSIONS_BY_PRODUCT_ID_QUERY_COUNT = 1000 // max number of versions to fetch per product id\nconst MAX_PAGES_PER_PRODUCT = 10 // Hard cutoff to prevent infinite loops\n\nconst injectedVersionsPageApi = enhancedVersionsPageApi.injectEndpoints({\n endpoints: (build) => ({\n // enhance GetVersions with an infinite query\n getVersionsInfinite: build.infiniteQuery<GetVersionsResult, GetVersionsArgs, VersionsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetVersions query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetVersions gql query\n const result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n versions: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the versions directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getVersionsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsInfinite,\n },\n ),\n\n // custom query function that fetches versions by multiple parent ids -not infinite and gets 1000 versions max\n getVersionsByProducts: build.query<GetVersionsResult, GetVersionsByProductsArgs>({\n queryFn: async (args, { dispatch, forced }) => {\n const { productIds = [], desc, ...rest } = args\n\n // Helper function to fetch a page of versions\n const fetchVersionsPage = async (productId: string, cursor?: string) => {\n const queryParams: GetVersionsByProductIdQueryVariables = {\n ...rest,\n productIds: [productId],\n }\n\n if (desc) {\n if (cursor) queryParams.before = cursor\n queryParams.last = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n } else {\n if (cursor) queryParams.after = cursor\n queryParams.first = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n }\n\n return dispatch(\n enhancedVersionsPageApi.endpoints.GetVersionsByProductId.initiate(queryParams, {\n forceRefetch: forced,\n }),\n )\n }\n\n // for each product id, call getVersionsByProductId\n const promises = productIds.map((productId) => fetchVersionsPage(productId))\n\n // wait for all requests to settle (either fulfilled or rejected)\n const settledResults = await Promise.allSettled(promises)\n\n // Collect all versions from initial queries\n const allVersions: VersionNode[] = []\n const errors: Array<{ productId: string; error: any }> = []\n\n // Check each result for additional pages and fetch them if needed\n for (let i = 0; i < settledResults.length; i++) {\n const settledResult = settledResults[i]\n const productId = productIds[i]\n\n // Handle rejected promises\n if (settledResult.status === 'rejected') {\n console.error(`Error fetching versions for product ${productId}:`, settledResult.reason)\n errors.push({ productId, error: parseGQLErrorMessage(settledResult.reason) })\n continue\n }\n\n // Handle errors in fulfilled promises\n const result = settledResult.value\n if (result.error) {\n console.error(`Error fetching versions for product ${productId}:`, result.error)\n errors.push({\n productId,\n // @ts-expect-error - message\n error: parseGQLErrorMessage(result.error?.message || 'Unknown error'),\n })\n continue\n }\n\n if (!result.data) continue\n\n // Add initial page versions\n allVersions.push(...result.data.versions)\n\n // Check if there are more pages to fetch\n let pageInfo = result.data.pageInfo\n let pageCount = 1\n\n while (pageInfo && pageCount < MAX_PAGES_PER_PRODUCT) {\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n const cursor = pageInfo.endCursor\n\n if (!hasNextPage || !cursor) break\n\n // Fetch next page\n const nextPageResult = await fetchVersionsPage(productId, cursor)\n\n if (nextPageResult.error) {\n console.error(\n `Error fetching versions page ${pageCount + 1} for product ${productId}:`,\n nextPageResult.error,\n )\n errors.push({ productId, error: nextPageResult.error })\n break\n }\n\n if (!nextPageResult.data) break\n\n allVersions.push(...nextPageResult.data.versions)\n pageInfo = nextPageResult.data.pageInfo\n pageCount++\n }\n }\n\n // If some requests failed but we have data, log warning but return successful data\n if (errors.length > 0) {\n console.warn(\n `Partial success: ${errors.length} of ${productIds.length} products failed to fetch versions`,\n errors,\n )\n }\n\n return {\n data: {\n versions: allVersions,\n pageInfo: undefined, // pageInfo is undefined as we've flattened multiple queries\n errors: errors.length > 0 ? errors : undefined,\n },\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n\n // enhance GetProducts with an infinite query\n getProductsInfinite: build.infiniteQuery<GetProductsResult, GetProductsArgs, ProductsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n let result\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetProducts query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetProducts gql query\n result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetProducts.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n products: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the products directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getProductsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForProductsInfinite,\n },\n ),\n\n // Grouped versions query - fetches versions for multiple group filters\n getGroupedVersionsList: build.query<GetGroupedVersionsListResult, GetGroupedVersionsListArgs>({\n queryFn: async (\n { projectName, groups, productFilter, taskFilter, folderIds, desc, sortBy, featuredOnly },\n api,\n ) => {\n try {\n const promises = []\n for (const group of groups) {\n const count = group.count || 500\n\n const queryParams: GetVersionsQueryVariables = {\n projectName,\n versionFilter: group.filter,\n productFilter,\n taskFilter,\n folderIds: folderIds?.length ? folderIds : undefined,\n sortBy: sortBy,\n featuredOnly,\n // @ts-expect-error - group param used later on\n group: group.value,\n }\n\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const versions: VersionNode[] = []\n\n for (const res of result) {\n if (res.error) throw res.error\n\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n\n const groupVersions =\n res.data?.versions.map((version, i, a) => ({\n ...version,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined,\n },\n ],\n })) || []\n\n versions.push(...groupVersions)\n }\n\n return {\n data: {\n versions,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedVersionsList queryFn:', error)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(error.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n }),\n})\n\n// export gql endpoints\nexport const { useGetVersionsQuery } = enhancedVersionsPageApi\n// export custom queries\nexport const {\n useGetVersionsInfiniteInfiniteQuery: useGetVersionsInfiniteQuery,\n useGetVersionsByProductsQuery,\n useGetProductsInfiniteInfiniteQuery: useGetProductsInfiniteQuery,\n useGetGroupedVersionsListQuery,\n} = injectedVersionsPageApi\n\n// export API instances for cache manipulation\nexport { enhancedVersionsPageApi, injectedVersionsPageApi }\n"],"names":["enhancedVersionsPageApi","gqlApi","transformVersionsResponse","provideTagsForVersionsResult","transformProductsResponse","provideTagsForProductsResult","VP_INFINITE_QUERY_COUNT","VERSIONS_BY_PRODUCT_ID_QUERY_COUNT","MAX_PAGES_PER_PRODUCT","injectedVersionsPageApi","build","lastPage","_allPages","lastPageParam","_allPageParams","pageInfo","queryArg","pageParam","api","sortBy","desc","folderIds","rest","cursor","queryParams","result","fallback","e","parseGQLErrorMessage","provideTagsForVersionsInfinite","args","dispatch","forced","productIds","fetchVersionsPage","productId","promises","settledResults","allVersions","errors","i","settledResult","_a","pageCount","hasNextPage","nextPageResult","provideTagsForProductsInfinite","projectName","groups","productFilter","taskFilter","featuredOnly","group","count","promise","versions","res","groupValue","_c","_b","_e","_d","groupVersions","_f","version","a","error","useGetVersionsQuery","useGetVersionsInfiniteQuery","useGetVersionsByProductsQuery","useGetProductsInfiniteQuery","useGetGroupedVersionsListQuery"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getVersionsProducts.cjs.js","sources":["../../../../../../src/api/queries/versions/getVersionsProducts.ts"],"sourcesContent":["// QUERIES FOR THE VERSIONS PAGE, FETCHING AND UPDATING DATA\n// Uses a separate graphqlVersionsApi for increased IDE speed\n\n// There are 4 main fetch requests:\n\n// Versions Only:\n// 1. GetVersions - fetches all versions in the project for given filtering and with pagination\n\n// Products and Versions (stacked):\n// 2. GetProducts - fetches all products in the project based on product and version filtering\n// 3. GetVersionsByProducts - when a product is expanded, fetches all versions for the products that are expanded. Uses getVersionsByProductId for each parent id. (uses queryFn)\n// 4. GetVersionsByProductId - get all versions for a specific product. Used by getVersionsByProducts only.\n\n// VersionFragment is used in all version queries to ensure consistent data structure\n\nimport {\n DefinitionsFromApi,\n FetchBaseQueryError,\n InfiniteData,\n OverrideResultType,\n TagTypesFromApi,\n} from '@reduxjs/toolkit/query'\nimport {\n VpFolderFragment,\n GetProductsQuery,\n GetProductsQueryVariables,\n GetVersionsByProductIdQueryVariables,\n GetVersionsQuery,\n GetVersionsQueryVariables,\n gqlApi,\n PageInfo,\n} from '@shared/api/generated'\nimport {\n parseGQLErrorMessage,\n provideTagsForProductsInfinite,\n provideTagsForProductsResult,\n provideTagsForVersionsInfinite,\n provideTagsForVersionsResult,\n transformProductsResponse,\n transformVersionsResponse,\n} from './getVersionsProductsUtils'\n\n// Query result types\nexport type FolderAttribNode = VpFolderFragment & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n}\nexport type VersionNodeRAW = GetVersionsQuery['project']['versions']['edges'][0]['node']\nexport type VersionNode = VersionNodeRAW & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n product: VersionNodeRAW['product'] & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n folder: FolderAttribNode // folder with parsed attribs\n }\n groups?: { value?: string; hasNextPage?: string }[] // grouping metadata\n}\nexport type ProductNodeRAW = GetProductsQuery['project']['products']['edges'][0]['node']\nexport type ProductNode = Omit<ProductNodeRAW, 'versions'> & {\n attrib: Record<string, any> // parsed from allAttrib JSON string\n featuredVersion?: VersionNode | null // added separately\n folder: FolderAttribNode // folder with parsed attribs\n versions: {\n id: string\n name: string\n version: number\n heroVersionId?: string | null\n }[] // versions with isHero flag\n}\n\nexport type GetVersionsResult = {\n pageInfo?: PageInfo\n versions: VersionNode[]\n errors?: Array<{ productId: string; error: string }>\n}\n\n// for infinite query args\nexport type GetVersionsArgs = Omit<GetVersionsQueryVariables, 'cursor'> & {\n desc?: boolean // sort direction\n}\n\n// for paginated queries in infinite query\ntype VersionsPageParam = {\n cursor: string\n desc?: boolean\n}\n\nexport type GetProductsArgs = Omit<GetProductsQueryVariables, 'cursor' | 'versionIds'> & {\n desc?: boolean // sort direction\n}\n\ntype ProductsPageParam = {\n cursor: string\n desc?: boolean\n}\n\ntype GetVersionsByProductsArgs = GetVersionsByProductIdQueryVariables & {\n productIds: string[]\n desc?: boolean\n}\n\nexport type GetGroupedVersionsListArgs = {\n projectName: string\n groups: { filter: string; count?: number | null; value: string }[]\n groupFilterKey?: string\n versionFilter?: string\n productFilter?: string\n taskFilter?: string\n folderIds?: string[]\n desc?: boolean\n sortBy?: string\n featuredOnly?: string[]\n hasReviewables?: boolean\n}\n\nexport type GetGroupedVersionsListResult = {\n versions: VersionNode[]\n}\n\nexport type VersionInfiniteResult = InfiniteData<GetVersionsResult, VersionsPageParam> | undefined\n\nexport type ProductInfiniteResult = InfiniteData<GetProductsResult, ProductsPageParam> | undefined\n\nexport type GetProductsResult = {\n pageInfo: PageInfo\n products: ProductNode[]\n}\n\ntype Definitions = DefinitionsFromApi<typeof gqlApi>\ntype TagTypes = TagTypesFromApi<typeof gqlApi>\n// update the definitions to include the new types\ntype UpdatedDefinitions = Omit<Definitions, 'GetVersions'> & {\n GetVersions: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetVersionsByProductId: OverrideResultType<Definitions['GetVersions'], GetVersionsResult>\n GetProducts: OverrideResultType<Definitions['GetProducts'], GetProductsResult>\n}\n\nconst enhancedVersionsPageApi = gqlApi.enhanceEndpoints<TagTypes, UpdatedDefinitions>({\n endpoints: {\n // used by both stacked and non-stacked views\n GetVersions: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getVersionsByProducts only\n GetVersionsByProductId: {\n transformResponse: transformVersionsResponse,\n providesTags: provideTagsForVersionsResult,\n },\n // used by getProductsInfinite only\n GetProducts: {\n transformResponse: transformProductsResponse,\n providesTags: provideTagsForProductsResult,\n },\n },\n})\n\nexport const VP_INFINITE_QUERY_COUNT = 250 // Number of items to fetch per page\nconst VERSIONS_BY_PRODUCT_ID_QUERY_COUNT = 1000 // max number of versions to fetch per product id\nconst MAX_PAGES_PER_PRODUCT = 10 // Hard cutoff to prevent infinite loops\n\nconst injectedVersionsPageApi = enhancedVersionsPageApi.injectEndpoints({\n endpoints: (build) => ({\n // enhance GetVersions with an infinite query\n getVersionsInfinite: build.infiniteQuery<GetVersionsResult, GetVersionsArgs, VersionsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetVersions query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetVersions gql query\n const result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n versions: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the versions directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getVersionsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsInfinite,\n },\n ),\n\n // custom query function that fetches versions by multiple parent ids -not infinite and gets 1000 versions max\n getVersionsByProducts: build.query<GetVersionsResult, GetVersionsByProductsArgs>({\n queryFn: async (args, { dispatch, forced }) => {\n const { productIds = [], desc, ...rest } = args\n\n // Helper function to fetch a page of versions\n const fetchVersionsPage = async (productId: string, cursor?: string) => {\n const queryParams: GetVersionsByProductIdQueryVariables = {\n ...rest,\n productIds: [productId],\n }\n\n if (desc) {\n if (cursor) queryParams.before = cursor\n queryParams.last = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n } else {\n if (cursor) queryParams.after = cursor\n queryParams.first = VERSIONS_BY_PRODUCT_ID_QUERY_COUNT\n }\n\n return dispatch(\n enhancedVersionsPageApi.endpoints.GetVersionsByProductId.initiate(queryParams, {\n forceRefetch: forced,\n }),\n )\n }\n\n // for each product id, call getVersionsByProductId\n const promises = productIds.map((productId) => fetchVersionsPage(productId))\n\n // wait for all requests to settle (either fulfilled or rejected)\n const settledResults = await Promise.allSettled(promises)\n\n // Collect all versions from initial queries\n const allVersions: VersionNode[] = []\n const errors: Array<{ productId: string; error: any }> = []\n\n // Check each result for additional pages and fetch them if needed\n for (let i = 0; i < settledResults.length; i++) {\n const settledResult = settledResults[i]\n const productId = productIds[i]\n\n // Handle rejected promises\n if (settledResult.status === 'rejected') {\n console.error(`Error fetching versions for product ${productId}:`, settledResult.reason)\n errors.push({ productId, error: parseGQLErrorMessage(settledResult.reason) })\n continue\n }\n\n // Handle errors in fulfilled promises\n const result = settledResult.value\n if (result.error) {\n console.error(`Error fetching versions for product ${productId}:`, result.error)\n errors.push({\n productId,\n // @ts-expect-error - message\n error: parseGQLErrorMessage(result.error?.message || 'Unknown error'),\n })\n continue\n }\n\n if (!result.data) continue\n\n // Add initial page versions\n allVersions.push(...result.data.versions)\n\n // Check if there are more pages to fetch\n let pageInfo = result.data.pageInfo\n let pageCount = 1\n\n while (pageInfo && pageCount < MAX_PAGES_PER_PRODUCT) {\n const hasNextPage = desc ? pageInfo.hasPreviousPage : pageInfo.hasNextPage\n const cursor = pageInfo.endCursor\n\n if (!hasNextPage || !cursor) break\n\n // Fetch next page\n const nextPageResult = await fetchVersionsPage(productId, cursor)\n\n if (nextPageResult.error) {\n console.error(\n `Error fetching versions page ${pageCount + 1} for product ${productId}:`,\n nextPageResult.error,\n )\n errors.push({ productId, error: nextPageResult.error })\n break\n }\n\n if (!nextPageResult.data) break\n\n allVersions.push(...nextPageResult.data.versions)\n pageInfo = nextPageResult.data.pageInfo\n pageCount++\n }\n }\n\n // If some requests failed but we have data, log warning but return successful data\n if (errors.length > 0) {\n console.warn(\n `Partial success: ${errors.length} of ${productIds.length} products failed to fetch versions`,\n errors,\n )\n }\n\n return {\n data: {\n versions: allVersions,\n pageInfo: undefined, // pageInfo is undefined as we've flattened multiple queries\n errors: errors.length > 0 ? errors : undefined,\n },\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n\n // enhance GetProducts with an infinite query\n getProductsInfinite: build.infiniteQuery<GetProductsResult, GetProductsArgs, ProductsPageParam>(\n {\n infiniteQueryOptions: {\n initialPageParam: { cursor: '', desc: false },\n // Calculate the next page param based on current page response and params\n getNextPageParam: (lastPage, _allPages, lastPageParam, _allPageParams) => {\n // Use the endCursor from the query as the next page param\n const pageInfo = lastPage.pageInfo\n const desc = lastPageParam.desc\n const hasNextPage = desc ? pageInfo?.hasPreviousPage : pageInfo?.hasNextPage\n\n if (!hasNextPage || !pageInfo?.endCursor) return undefined\n\n return {\n cursor: pageInfo?.endCursor,\n desc: lastPageParam.desc,\n }\n },\n },\n queryFn: async ({ queryArg, pageParam }, api) => {\n let result\n try {\n const { sortBy, desc, folderIds, ...rest } = queryArg\n const { cursor } = pageParam\n\n // Build the query parameters for GetProducts query\n const queryParams: any = {\n ...rest,\n }\n\n // Add cursor-based pagination\n if (sortBy) {\n queryParams.sortBy = sortBy\n if (desc) {\n queryParams.before = cursor || undefined\n queryParams.last = VP_INFINITE_QUERY_COUNT\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n } else {\n queryParams.after = cursor || undefined\n queryParams.first = VP_INFINITE_QUERY_COUNT\n }\n\n // if folderIds have a length, add them to the query params\n if (folderIds && folderIds.length) {\n queryParams.folderIds = folderIds\n }\n\n // Call the existing GetProducts gql query\n result = await api.dispatch(\n enhancedVersionsPageApi.endpoints.GetProducts.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n\n if (result.error) throw result.error\n const fallback = {\n products: [],\n pageInfo: {\n hasNextPage: false,\n endCursor: null,\n startCursor: null,\n hasPreviousPage: false,\n },\n }\n\n // Return the products directly as required by the infinite query format\n return {\n data: result.data || fallback,\n }\n } catch (e: any) {\n console.error('Error in getProductsInfiniteQuery queryFn:', e)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(e.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForProductsInfinite,\n },\n ),\n\n // Grouped versions query - fetches versions for multiple group filters\n getGroupedVersionsList: build.query<GetGroupedVersionsListResult, GetGroupedVersionsListArgs>({\n queryFn: async (\n {\n projectName,\n groups,\n groupFilterKey = 'versionFilter',\n versionFilter, // most of the time overridden by group filters\n productFilter,\n taskFilter,\n folderIds,\n desc,\n sortBy,\n featuredOnly,\n hasReviewables,\n },\n api,\n ) => {\n try {\n const promises = []\n for (const group of groups) {\n const count = group.count || 500\n\n const queryParams: GetVersionsQueryVariables = {\n projectName,\n // base filters\n productFilter,\n taskFilter,\n versionFilter,\n // specific group filter\n [groupFilterKey]: group.filter,\n folderIds: folderIds?.length ? folderIds : undefined,\n sortBy: sortBy,\n featuredOnly,\n hasReviewables,\n // @ts-expect-error - group param used later on\n group: group.value,\n }\n\n if (desc) {\n queryParams.last = count\n } else {\n queryParams.first = count\n }\n\n const promise = api.dispatch(\n enhancedVersionsPageApi.endpoints.GetVersions.initiate(queryParams, {\n forceRefetch: true,\n }),\n )\n promises.push(promise)\n }\n\n const result = await Promise.all(promises)\n const versions: VersionNode[] = []\n\n for (const res of result) {\n if (res.error) throw res.error\n\n // get group value\n // @ts-expect-error - we know group does exist on res.originalArgs\n const groupValue = res.originalArgs?.group as string\n\n const hasNextPage =\n res.data?.pageInfo?.hasNextPage || res.data?.pageInfo?.hasPreviousPage || false\n\n const groupVersions =\n res.data?.versions.map((version, i, a) => ({\n ...version,\n groups: [\n {\n value: groupValue,\n hasNextPage: i === a.length - 1 && hasNextPage ? groupValue : undefined,\n },\n ],\n })) || []\n\n versions.push(...groupVersions)\n }\n\n return {\n data: {\n versions,\n },\n }\n } catch (error: any) {\n console.error('Error in getGroupedVersionsList queryFn:', error)\n return {\n error: {\n status: 'FETCH_ERROR',\n error: parseGQLErrorMessage(error.message),\n } as FetchBaseQueryError,\n }\n }\n },\n providesTags: provideTagsForVersionsResult,\n }),\n }),\n})\n\n// export gql endpoints\nexport const { useGetVersionsQuery } = enhancedVersionsPageApi\n// export custom queries\nexport const {\n useGetVersionsInfiniteInfiniteQuery: useGetVersionsInfiniteQuery,\n useGetVersionsByProductsQuery,\n useGetProductsInfiniteInfiniteQuery: useGetProductsInfiniteQuery,\n useGetGroupedVersionsListQuery,\n} = injectedVersionsPageApi\n\n// export API instances for cache manipulation\nexport { enhancedVersionsPageApi, injectedVersionsPageApi }\n"],"names":["enhancedVersionsPageApi","gqlApi","transformVersionsResponse","provideTagsForVersionsResult","transformProductsResponse","provideTagsForProductsResult","VP_INFINITE_QUERY_COUNT","VERSIONS_BY_PRODUCT_ID_QUERY_COUNT","MAX_PAGES_PER_PRODUCT","injectedVersionsPageApi","build","lastPage","_allPages","lastPageParam","_allPageParams","pageInfo","queryArg","pageParam","api","sortBy","desc","folderIds","rest","cursor","queryParams","result","fallback","e","parseGQLErrorMessage","provideTagsForVersionsInfinite","args","dispatch","forced","productIds","fetchVersionsPage","productId","promises","settledResults","allVersions","errors","i","settledResult","_a","pageCount","hasNextPage","nextPageResult","provideTagsForProductsInfinite","projectName","groups","groupFilterKey","versionFilter","productFilter","taskFilter","featuredOnly","hasReviewables","group","count","promise","versions","res","groupValue","_c","_b","_e","_d","groupVersions","_f","version","a","error","useGetVersionsQuery","useGetVersionsInfiniteQuery","useGetVersionsByProductsQuery","useGetProductsInfiniteQuery","useGetGroupedVersionsListQuery"],"mappings":"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"}
|