@ynput/ayon-frontend-shared 0.2.17 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DetailsPanel.cjs.js +6 -3
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +6 -3
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/_virtual/index.cjs10.js +4 -4
- package/dist/_virtual/index.cjs5.js +3 -5
- package/dist/_virtual/index.cjs5.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +5 -3
- package/dist/_virtual/index.cjs6.js.map +1 -1
- package/dist/_virtual/index.cjs8.js +4 -4
- package/dist/_virtual/index.cjs9.js +4 -4
- package/dist/_virtual/index.es10.js +4 -4
- package/dist/_virtual/index.es5.js +2 -5
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +5 -2
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/_virtual/index.es8.js +4 -4
- package/dist/_virtual/index.es9.js +4 -4
- package/dist/api.cjs.js +7 -0
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +7 -0
- package/dist/api.es.js.map +1 -1
- package/dist/components.cjs.js +9 -4
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +10 -5
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +6 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +6 -3
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +26 -23
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +26 -23
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js +4 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js +4 -1
- package/dist/shared/src/api/queries/entities/getEntityPanel.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +13 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +13 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +2 -0
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +2 -0
- package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +2 -0
- package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/updateOverview.es.js +2 -0
- package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/products/createProduct.cjs.js +54 -0
- package/dist/shared/src/api/queries/products/createProduct.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/products/createProduct.es.js +54 -0
- package/dist/shared/src/api/queries/products/createProduct.es.js.map +1 -0
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +2 -0
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +2 -0
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/updateVersions.cjs.js +80 -0
- package/dist/shared/src/api/queries/versions/updateVersions.cjs.js.map +1 -0
- package/dist/shared/src/api/queries/versions/updateVersions.es.js +80 -0
- package/dist/shared/src/api/queries/versions/updateVersions.es.js.map +1 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +2 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +2 -0
- package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +2 -0
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +2 -0
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js +13 -0
- package/dist/shared/src/components/EntityPanelUploader/Dropzone.cjs.js.map +1 -0
- package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js +14 -0
- package/dist/shared/src/components/EntityPanelUploader/Dropzone.es.js.map +1 -0
- package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.cjs.js → EntityPanelUploader/EntityPanelUploader.cjs.js} +378 -119
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -0
- package/dist/shared/src/components/{EntityThumbnailUploader/EntityThumbnailUploader.es.js → EntityPanelUploader/EntityPanelUploader.es.js} +378 -119
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js +95 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js.map +1 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js +95 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.styled.es.js.map +1 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js +76 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.cjs.js.map +1 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js +77 -0
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploaderDialog.es.js.map +1 -0
- 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 +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +2 -0
- package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +2 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +2 -0
- package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +6 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +6 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +29 -102
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +29 -102
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +6 -3
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +6 -3
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +212 -0
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -0
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +212 -0
- package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +2 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +2 -0
- package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js +2 -2
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.cjs.js.map +1 -1
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js +2 -2
- package/dist/shared/src/components/SettingsPanel/SettingsPanelItemTemplate.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +6 -3
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +6 -3
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js +85 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.cjs.js.map +1 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js +85 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionDialog.es.js.map +1 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +401 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +401 -0
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +308 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +308 -0
- package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js +2 -0
- package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
- package/dist/shared/src/components/Watchers/Watchers.es.js +2 -0
- package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +6 -3
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +6 -3
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
- package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.styled.cjs.js +1 -1
- package/dist/shared/src/containers/Actions/Actions.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/Actions.styled.es.js +1 -1
- package/dist/shared/src/containers/Actions/Actions.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +6 -3
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +6 -3
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +9 -4
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +9 -4
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +10 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +10 -5
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +2 -0
- package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js +2 -2
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.es.js +2 -2
- package/dist/shared/src/containers/Feed/components/ActivityReference/ActivityReference.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -0
- package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +2 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +2 -0
- package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +4 -2
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +4 -2
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +6 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +6 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.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 +7 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +7 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFolderRelationships.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetTaskGroups.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +2 -0
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +3 -2
- package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +6 -3
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +6 -3
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.cjs.js +2 -0
- package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
- package/dist/shared/src/context/AddonProjectContext.es.js +2 -0
- package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +2 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +2 -0
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.cjs.js +2 -0
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +2 -0
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.cjs.js +2 -0
- package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
- package/dist/shared/src/context/RemoteModulesContext.es.js +2 -0
- package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js +15 -4
- package/dist/shared/src/context/ThumbnailUploaderContext.cjs.js.map +1 -1
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js +15 -4
- package/dist/shared/src/context/ThumbnailUploaderContext.es.js.map +1 -1
- package/dist/shared/src/context/pip/PiPWrapper.cjs.js +1 -1
- package/dist/shared/src/context/pip/PiPWrapper.cjs.js.map +1 -1
- package/dist/shared/src/context/pip/PiPWrapper.es.js +1 -1
- package/dist/shared/src/context/pip/PiPWrapper.es.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.cjs.js +2 -0
- package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useActionTriggers.es.js +2 -0
- package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js +2 -0
- package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useEntityUpdate.es.js +2 -0
- package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js +2 -0
- package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useScopedStatuses.es.js +2 -0
- package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +2 -0
- package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useUserProjectConfig.es.js +2 -0
- package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
- package/dist/shared/src/util/productTypes.cjs.js +1 -0
- package/dist/shared/src/util/productTypes.cjs.js.map +1 -1
- package/dist/shared/src/util/productTypes.es.js +1 -0
- package/dist/shared/src/util/productTypes.es.js.map +1 -1
- package/dist/shared/src/utils/extractVersionFromFilename.cjs.js +32 -0
- package/dist/shared/src/utils/extractVersionFromFilename.cjs.js.map +1 -0
- package/dist/shared/src/utils/extractVersionFromFilename.es.js +32 -0
- package/dist/shared/src/utils/extractVersionFromFilename.es.js.map +1 -0
- package/dist/shared/src/utils/versionUploadHelpers.cjs.js +121 -0
- package/dist/shared/src/utils/versionUploadHelpers.cjs.js.map +1 -0
- package/dist/shared/src/utils/versionUploadHelpers.es.js +121 -0
- package/dist/shared/src/utils/versionUploadHelpers.es.js.map +1 -0
- package/dist/types/api/generated/graphql.d.ts +47 -36
- package/dist/types/api/queries/activities/getActivities.d.ts +4 -4
- package/dist/types/api/queries/activities/updateActivities.d.ts +8 -8
- package/dist/types/api/queries/entities/getEntity.d.ts +4 -4
- package/dist/types/api/queries/entities/getEntityPanel.d.ts +4 -4
- package/dist/types/api/queries/entities/updateEntity.d.ts +4 -4
- package/dist/types/api/queries/entityLists/getLists.d.ts +4 -4
- package/dist/types/api/queries/index.d.ts +2 -0
- package/dist/types/api/queries/overview/getOverview.d.ts +4 -4
- package/dist/types/api/queries/products/createProduct.d.ts +161 -0
- package/dist/types/api/queries/products/index.d.ts +1 -0
- package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +4 -4
- package/dist/types/api/queries/users/getUsers.d.ts +4 -4
- package/dist/types/api/queries/versions/index.d.ts +1 -0
- package/dist/types/api/queries/versions/updateVersions.d.ts +685 -0
- package/dist/types/components/EntityPanelUploader/Dropzone.d.ts +11 -0
- package/dist/types/components/{EntityThumbnailUploader/EntityThumbnailUploader.d.ts → EntityPanelUploader/EntityPanelUploader.d.ts} +3 -3
- package/dist/types/components/EntityPanelUploader/EntityPanelUploader.styled.d.ts +8 -0
- package/dist/types/components/EntityPanelUploader/EntityPanelUploaderDialog.d.ts +10 -0
- package/dist/types/components/EntityPanelUploader/index.d.ts +1 -0
- package/dist/types/components/ReviewablesList/index.d.ts +1 -0
- package/dist/types/components/ReviewablesList/useReviewablesUpload.d.ts +19 -0
- package/dist/types/components/VersionUploader/components/UploadVersionDialog.d.ts +5 -0
- package/dist/types/components/VersionUploader/components/UploadVersionForm.d.ts +18 -0
- package/dist/types/components/VersionUploader/context/VersionUploadContext.d.ts +54 -0
- package/dist/types/components/VersionUploader/index.d.ts +2 -0
- package/dist/types/components/index.d.ts +2 -2
- package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +2 -1
- package/dist/types/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +2 -1
- package/dist/types/context/ThumbnailUploaderContext.d.ts +3 -2
- package/dist/types/utils/versionUploadHelpers.d.ts +63 -0
- package/package.json +1 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +0 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +0 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js +0 -12
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.cjs.js.map +0 -1
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js +0 -12
- package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.es.js.map +0 -1
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js +0 -112
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.cjs.js.map +0 -1
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js +0 -112
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.es.js.map +0 -1
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js +0 -104
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.cjs.js.map +0 -1
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js +0 -104
- package/dist/shared/src/components/ThumbnailUploader/ThumbnailUploader.styled.es.js.map +0 -1
- package/dist/types/components/EntityThumbnailUploader/EntityThumbnailUploader.styled.d.ts +0 -1
- package/dist/types/components/EntityThumbnailUploader/index.d.ts +0 -1
- package/dist/types/components/ThumbnailUploader/ThumbnailUploader.d.ts +0 -17
- package/dist/types/components/ThumbnailUploader/ThumbnailUploader.styled.d.ts +0 -4
- package/dist/types/components/ThumbnailUploader/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchOverviewData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFetchOverviewData.ts"],"sourcesContent":["import {\n useGetFolderListQuery,\n useGetGroupedTasksListQuery,\n useGetOverviewTasksByFoldersQuery,\n useGetQueryTasksFoldersQuery,\n useGetTasksListInfiniteInfiniteQuery,\n} from '@shared/api'\nimport type {\n FolderListItem,\n GetGroupedTasksListArgs,\n EntityGroup,\n QueryTasksFoldersApiArg,\n} from '@shared/api'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { ExpandedState, SortingState } from '@tanstack/react-table'\nimport { determineLoadingTaskFolders } from '../utils/loadingUtils'\nimport { LoadingTasks } from '../types'\nimport { TasksByFolderMap } from '../utils'\nimport { TableGroupBy } from '../context'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { isGroupId } from '../hooks/useBuildGroupByTableData'\nimport { ProjectTableAttribute } from '../hooks/useAttributesList'\nimport { ProjectTableModulesType } from './useProjectTableModules'\n\ntype useFetchOverviewDataData = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n isLoadingAll: boolean // the whole table is a loading state\n isLoadingMore: boolean // loading more tasks\n loadingTasks: LoadingTasks // show number of loading tasks per folder or root\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n}\n\ntype Params = {\n projectName: string\n selectedFolders: string[] // folders selected in the slicer (hierarchy)\n filters: Filter[] // RAW filters (including slicer filters)\n queryFilters: {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n } // filters from the filters bar or slicer (not hierarchy)\n sorting: SortingState\n groupBy: TableGroupBy | undefined\n taskGroups: EntityGroup[]\n expanded: ExpandedState\n showHierarchy: boolean\n attribFields: ProjectTableAttribute[]\n modules: ProjectTableModulesType\n}\n\nexport const useFetchOverviewData = ({\n projectName,\n selectedFolders, // comes from the slicer\n filters,\n queryFilters,\n sorting,\n groupBy,\n taskGroups = [],\n expanded,\n showHierarchy,\n attribFields,\n modules,\n}: Params): useFetchOverviewDataData => {\n const { getGroupQueries, isLoading: isLoadingModules } = modules\n\n const {\n data: { folders = [] } = {},\n isLoading,\n isFetching: isFetchingFolders,\n isUninitialized: isUninitializedFolders,\n refetch: refetchFolders,\n } = useGetFolderListQuery(\n { projectName: projectName || '', attrib: true },\n { skip: !projectName },\n )\n\n // console.log('Folder count:', folders.length)\n const expandedParentIds = Object.entries(expanded)\n .filter(([, isExpanded]) => isExpanded)\n .filter(([id]) => !isGroupId(id)) // filter out the root folder\n .map(([id]) => id)\n\n const {\n data: expandedFoldersTasks = [],\n isFetching: isFetchingExpandedFoldersTasks,\n refetch: refetchExpandedFoldersTasks,\n isUninitialized: isUninitializedExpandedFoldersTasks,\n } = useGetOverviewTasksByFoldersQuery(\n {\n projectName,\n parentIds: expandedParentIds,\n filter: queryFilters.filterString,\n search: queryFilters.search,\n },\n { skip: !expandedParentIds.length || !showHierarchy },\n )\n // get folders that would be left if the filters were applied for tasks\n const {\n data: foldersByTaskFilter,\n isUninitialized,\n isFetching: isFetchingTasksFolders,\n isUninitialized: isUninitializedTasksFolders,\n refetch: refetchTasksFolders,\n } = useGetQueryTasksFoldersQuery(\n {\n projectName,\n tasksFoldersQuery: { filter: queryFilters.filter, search: queryFilters.search },\n },\n {\n skip: !queryFilters.filterString || !folders.length || !showHierarchy,\n },\n )\n\n // create a map of folders by id for efficient lookups\n const foldersMap: FolderNodeMap = useMemo(() => {\n const map = new Map()\n\n const addExtraDataToFolder = (folder: FolderListItem) => {\n // add any extra data to folder\n const folderWithExtraData: MatchingFolder = {\n ...folder,\n entityId: folder.id,\n entityType: 'folder',\n }\n return folderWithExtraData\n }\n\n // If we have task filters and folders to filter\n if (!isUninitialized && foldersByTaskFilter && folders.length) {\n // Create a set for efficient lookups of filtered folder IDs\n const relevantFolderIds = new Set<string>()\n\n // First pass: Add all folders from the task filter\n for (const folderId of foldersByTaskFilter) {\n relevantFolderIds.add(folderId)\n }\n\n // Create a map of folders by ID for parentId lookups\n const foldersByIdMap = new Map<string, (typeof folders)[0]>()\n for (const folder of folders) {\n foldersByIdMap.set(folder.id as string, folder)\n }\n\n // Second pass: Add all parent folders of filtered folders\n const addParents = (folderId: string) => {\n const folder = foldersByIdMap.get(folderId)\n if (folder && folder.parentId) {\n relevantFolderIds.add(folder.parentId as string)\n addParents(folder.parentId as string)\n }\n }\n\n // Process each filtered folder to add its parents\n for (const folderId of foldersByTaskFilter) {\n addParents(folderId)\n }\n\n // Third pass: Build the final map using only relevant folders\n for (const folder of folders) {\n if (relevantFolderIds.has(folder.id as string)) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n } else {\n // No filtering, include all folders\n for (const folder of folders) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n\n // Filter by selected folders if needed\n if (selectedFolders.length) {\n const selectedPaths = selectedFolders\n .map((id) => map.get(id)?.path)\n .filter(Boolean) as string[]\n\n // Create a new map that only contains selected folders and their children\n const filteredMap = new Map()\n\n // For each folder, check if it should be included\n map.forEach((folder, folderId) => {\n const folderPath = folder.path as string\n\n // Include if it's a parent or the folder itself\n const folderPathParts = folderPath.split('/')\n let isParentOrSelf = false\n\n for (let i = 0; i < folderPathParts.length; i++) {\n const partialPath = folderPathParts.slice(0, i + 1).join('/')\n if (selectedPaths.some((p) => p === partialPath)) {\n isParentOrSelf = true\n break\n }\n }\n\n // Include if it's a child of any selected folder\n const isChild = selectedPaths.some((selectedPath) =>\n folderPath.startsWith(selectedPath + '/'),\n )\n\n if (isParentOrSelf || isChild) {\n filteredMap.set(folderId, addExtraDataToFolder(folder))\n }\n })\n\n return filteredMap\n }\n\n return map\n }, [folders, foldersByTaskFilter, isUninitialized, selectedFolders])\n\n // calculate partial loading states\n const loadingTasksForParents = useMemo(() => {\n if (isFetchingExpandedFoldersTasks) {\n return determineLoadingTaskFolders({\n expandedFoldersTasks,\n expandedParentIds,\n foldersMap,\n })\n } else return {}\n }, [isFetchingExpandedFoldersTasks, expandedFoldersTasks, expandedParentIds, foldersMap])\n\n const [tasksListCursor, setTasksListCursor] = useState('')\n\n // every time the sorting changes, reset the cursor\n useEffect(() => {\n if (tasksListCursor) setTasksListCursor('')\n }, [sorting, tasksListCursor])\n\n // Create sort params for infinite query\n const singleSort = { ...sorting[0] }\n // if task list and sorting by name, sort by path instead\n const sortByPath = singleSort?.id === 'name' && !showHierarchy\n const sortId = sortByPath ? 'path' : singleSort?.id === 'subType' ? 'taskType' : singleSort?.id\n const tasksFolderIdsParams = selectedFolders.length ? Array.from(foldersMap.keys()) : undefined\n\n // Use the new infinite query hook for tasks list with correct name\n const {\n data: tasksListInfiniteData,\n isFetching: isFetchingTasksList,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage: isFetchingNextPageTasksList,\n isUninitialized: isUninitializedTasksList,\n refetch: refetchTasksList,\n } = useGetTasksListInfiniteInfiniteQuery(\n {\n projectName,\n filter: queryFilters.filterString,\n search: queryFilters.search,\n folderIds: tasksFolderIdsParams,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n },\n {\n skip: showHierarchy,\n initialPageParam: {\n cursor: '',\n desc: !!singleSort?.desc,\n },\n },\n )\n\n // Extract tasks from infinite query data correctly\n const tasksList = useMemo(() => {\n if (!tasksListInfiniteData?.pages) return []\n return tasksListInfiniteData.pages.flatMap((page) => page.tasks || [])\n }, [tasksListInfiniteData?.pages])\n\n const initGroupPageCounts = useMemo(() => {\n return taskGroups.reduce((acc, group) => {\n acc[group.value] = 1 // initialize each group with 1 count\n return acc\n }, {} as Record<string, number>)\n }, [taskGroups])\n const [groupPageCounts, setGroupPageCounts] = useState<Record<string, number>>({})\n\n // when initGroupPageCounts changes, set it to groupPageCounts\n useEffect(() => {\n const hasInitData = Object.keys(initGroupPageCounts).length > 0\n const hasCurrentData = Object.keys(groupPageCounts).length > 0\n\n if (hasInitData && !hasCurrentData) {\n setGroupPageCounts(initGroupPageCounts)\n }\n }, [initGroupPageCounts])\n\n // for grouped tasks, we fetch all tasks for each group\n // we do this by building a list of groups with filters for that group\n\n // get the data type for the groupBy\n const groupByDataType = useMemo(() => {\n if (!groupBy?.id) return 'string'\n\n const groupById = groupBy.id\n\n // Handle special cases for built-in group types\n if (groupById === 'assignees' || groupById === 'tags') {\n return 'list_of_strings'\n }\n\n // Handle attribute-based grouping (format: \"attrib.attributeName\")\n if (groupById.startsWith('attrib.')) {\n const attributeName = groupById.split('.')[1]\n const attribute = attribFields.find((field) => field.name === attributeName)\n return attribute?.data?.type || 'string'\n }\n\n // Default fallback\n return 'string'\n }, [groupBy?.id, attribFields])\n\n const groupQueries: GetGroupedTasksListArgs['groups'] = useMemo(() => {\n return groupBy\n ? getGroupQueries?.({\n taskGroups,\n filters,\n groupBy,\n groupPageCounts,\n dataType: groupByDataType,\n }) ?? []\n : []\n }, [groupBy, taskGroups, filters, groupPageCounts, groupByDataType, getGroupQueries])\n\n const {\n data: { tasks: groupTasks = [] } = {},\n isFetching: isFetchingGroups,\n isUninitialized: isUninitializedGroupedTasks,\n refetch: refetchGroupedTasks,\n } = useGetGroupedTasksListQuery(\n {\n projectName,\n groups: groupQueries,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n search: queryFilters.search,\n folderIds: tasksFolderIdsParams,\n },\n {\n skip: !groupBy || !groupQueries.length || isLoadingModules,\n },\n )\n\n const handleFetchNextPage = (group?: string) => {\n if (groupBy) {\n if (group && group in groupPageCounts) {\n console.log('fetching next page for group:', group)\n // fetch next page for a specific group by increasing the count in groupPageCounts\n setGroupPageCounts((prevCounts) => {\n const newCounts = { ...prevCounts }\n newCounts[group] = (newCounts[group] || 1) + 1 // increment the count for this group\n return newCounts\n })\n }\n } else if (hasNextPage) {\n console.log('fetching next page')\n fetchNextPage()\n }\n }\n\n // tasksMaps is a map of tasks by task ID\n // tasksByFolderMap is a map of tasks by folder ID\n const { tasksMap, tasksByFolderMap } = useMemo(() => {\n const tasksMap: TaskNodeMap = new Map()\n const tasksByFolderMap: TasksByFolderMap = new Map()\n\n const addExtraDataToTask = (task: EditorTaskNode) => ({\n ...task,\n entityId: task.id,\n entityType: 'task' as const,\n })\n\n // either show the hierarchy or the flat list of tasks\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n for (const task of allTasks) {\n const taskId = task.id as string\n const folderId = task.folderId as string\n\n if (tasksMap.has(taskId)) {\n // merge specific data if the task already exists\n const existingTask = tasksMap.get(taskId) as EditorTaskNode\n const currentTask = addExtraDataToTask(task)\n const mergedTask = {\n ...existingTask,\n ...currentTask,\n groups: [...(existingTask.groups || []), ...(currentTask.groups || [])],\n }\n\n tasksMap.set(taskId, mergedTask)\n } else {\n tasksMap.set(taskId, addExtraDataToTask(task))\n }\n\n if (tasksByFolderMap.has(folderId)) {\n tasksByFolderMap.get(folderId)!.push(taskId)\n } else {\n tasksByFolderMap.set(folderId, [taskId])\n }\n }\n\n return { tasksMap, tasksByFolderMap }\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks])\n\n // reload all data for all queries\n const reloadTableData = () => {\n // only reload if there is data\n if (!isUninitializedFolders) refetchFolders()\n if (!isUninitializedExpandedFoldersTasks) refetchExpandedFoldersTasks()\n if (!isUninitializedTasksFolders) refetchTasksFolders()\n if (!isUninitializedTasksList) refetchTasksList()\n if (!isUninitializedGroupedTasks) refetchGroupedTasks()\n }\n\n return {\n foldersMap: foldersMap,\n tasksMap: tasksMap,\n tasksByFolderMap: tasksByFolderMap,\n isLoadingAll:\n isLoading ||\n isFetchingFolders ||\n (isFetchingTasksList && !isFetchingNextPageTasksList) ||\n isFetchingTasksFolders ||\n isFetchingGroups ||\n isLoadingModules, // these all show a full loading state\n isLoadingMore: isFetchingNextPageTasksList,\n loadingTasks: loadingTasksForParents,\n fetchNextPage: handleFetchNextPage,\n reloadTableData,\n }\n}\n"],"names":["tasksMap","tasksByFolderMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFetchOverviewData.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFetchOverviewData.ts"],"sourcesContent":["import {\n useGetFolderListQuery,\n useGetGroupedTasksListQuery,\n useGetOverviewTasksByFoldersQuery,\n useGetQueryTasksFoldersQuery,\n useGetTasksListInfiniteInfiniteQuery,\n} from '@shared/api'\nimport type {\n FolderListItem,\n GetGroupedTasksListArgs,\n EntityGroup,\n QueryTasksFoldersApiArg,\n} from '@shared/api'\nimport { EditorTaskNode, FolderNodeMap, MatchingFolder, TaskNodeMap } from '../types/table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { ExpandedState, SortingState } from '@tanstack/react-table'\nimport { determineLoadingTaskFolders } from '../utils/loadingUtils'\nimport { LoadingTasks } from '../types'\nimport { TasksByFolderMap } from '../utils'\nimport { TableGroupBy } from '../context'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { isGroupId } from '../hooks/useBuildGroupByTableData'\nimport { ProjectTableAttribute } from '../hooks/useAttributesList'\nimport { ProjectTableModulesType } from './useProjectTableModules'\n\ntype useFetchOverviewDataData = {\n foldersMap: FolderNodeMap\n tasksMap: TaskNodeMap\n tasksByFolderMap: TasksByFolderMap\n isLoadingAll: boolean // the whole table is a loading state\n isLoadingMore: boolean // loading more tasks\n loadingTasks: LoadingTasks // show number of loading tasks per folder or root\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n}\n\ntype Params = {\n projectName: string\n selectedFolders: string[] // folders selected in the slicer (hierarchy)\n filters: Filter[] // RAW filters (including slicer filters)\n queryFilters: {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n } // filters from the filters bar or slicer (not hierarchy)\n sorting: SortingState\n groupBy: TableGroupBy | undefined\n taskGroups: EntityGroup[]\n expanded: ExpandedState\n showHierarchy: boolean\n attribFields: ProjectTableAttribute[]\n modules: ProjectTableModulesType\n}\n\nexport const useFetchOverviewData = ({\n projectName,\n selectedFolders, // comes from the slicer\n filters,\n queryFilters,\n sorting,\n groupBy,\n taskGroups = [],\n expanded,\n showHierarchy,\n attribFields,\n modules,\n}: Params): useFetchOverviewDataData => {\n const { getGroupQueries, isLoading: isLoadingModules } = modules\n\n const {\n data: { folders = [] } = {},\n isLoading,\n isFetching: isFetchingFolders,\n isUninitialized: isUninitializedFolders,\n refetch: refetchFolders,\n } = useGetFolderListQuery(\n { projectName: projectName || '', attrib: true },\n { skip: !projectName },\n )\n\n // console.log('Folder count:', folders.length)\n const expandedParentIds = Object.entries(expanded)\n .filter(([, isExpanded]) => isExpanded)\n .filter(([id]) => !isGroupId(id)) // filter out the root folder\n .map(([id]) => id)\n\n const {\n data: expandedFoldersTasks = [],\n isFetching: isFetchingExpandedFoldersTasks,\n refetch: refetchExpandedFoldersTasks,\n isUninitialized: isUninitializedExpandedFoldersTasks,\n } = useGetOverviewTasksByFoldersQuery(\n {\n projectName,\n parentIds: expandedParentIds,\n filter: queryFilters.filterString,\n search: queryFilters.search,\n },\n { skip: !expandedParentIds.length || !showHierarchy },\n )\n // get folders that would be left if the filters were applied for tasks\n const {\n data: foldersByTaskFilter,\n isUninitialized,\n isFetching: isFetchingTasksFolders,\n isUninitialized: isUninitializedTasksFolders,\n refetch: refetchTasksFolders,\n } = useGetQueryTasksFoldersQuery(\n {\n projectName,\n tasksFoldersQuery: { filter: queryFilters.filter, search: queryFilters.search },\n },\n {\n skip: !queryFilters.filterString || !folders.length || !showHierarchy,\n },\n )\n\n // create a map of folders by id for efficient lookups\n const foldersMap: FolderNodeMap = useMemo(() => {\n const map = new Map()\n\n const addExtraDataToFolder = (folder: FolderListItem) => {\n // add any extra data to folder\n const folderWithExtraData: MatchingFolder = {\n ...folder,\n entityId: folder.id,\n entityType: 'folder',\n }\n return folderWithExtraData\n }\n\n // If we have task filters and folders to filter\n if (!isUninitialized && foldersByTaskFilter && folders.length) {\n // Create a set for efficient lookups of filtered folder IDs\n const relevantFolderIds = new Set<string>()\n\n // First pass: Add all folders from the task filter\n for (const folderId of foldersByTaskFilter) {\n relevantFolderIds.add(folderId)\n }\n\n // Create a map of folders by ID for parentId lookups\n const foldersByIdMap = new Map<string, (typeof folders)[0]>()\n for (const folder of folders) {\n foldersByIdMap.set(folder.id as string, folder)\n }\n\n // Second pass: Add all parent folders of filtered folders\n const addParents = (folderId: string) => {\n const folder = foldersByIdMap.get(folderId)\n if (folder && folder.parentId) {\n relevantFolderIds.add(folder.parentId as string)\n addParents(folder.parentId as string)\n }\n }\n\n // Process each filtered folder to add its parents\n for (const folderId of foldersByTaskFilter) {\n addParents(folderId)\n }\n\n // Third pass: Build the final map using only relevant folders\n for (const folder of folders) {\n if (relevantFolderIds.has(folder.id as string)) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n } else {\n // No filtering, include all folders\n for (const folder of folders) {\n map.set(folder.id as string, addExtraDataToFolder(folder))\n }\n }\n\n // Filter by selected folders if needed\n if (selectedFolders.length) {\n const selectedPaths = selectedFolders\n .map((id) => map.get(id)?.path)\n .filter(Boolean) as string[]\n\n // Create a new map that only contains selected folders and their children\n const filteredMap = new Map()\n\n // For each folder, check if it should be included\n map.forEach((folder, folderId) => {\n const folderPath = folder.path as string\n\n // Include if it's a parent or the folder itself\n const folderPathParts = folderPath.split('/')\n let isParentOrSelf = false\n\n for (let i = 0; i < folderPathParts.length; i++) {\n const partialPath = folderPathParts.slice(0, i + 1).join('/')\n if (selectedPaths.some((p) => p === partialPath)) {\n isParentOrSelf = true\n break\n }\n }\n\n // Include if it's a child of any selected folder\n const isChild = selectedPaths.some((selectedPath) =>\n folderPath.startsWith(selectedPath + '/'),\n )\n\n if (isParentOrSelf || isChild) {\n filteredMap.set(folderId, addExtraDataToFolder(folder))\n }\n })\n\n return filteredMap\n }\n\n return map\n }, [folders, foldersByTaskFilter, isUninitialized, selectedFolders])\n\n // calculate partial loading states\n const loadingTasksForParents = useMemo(() => {\n if (isFetchingExpandedFoldersTasks) {\n return determineLoadingTaskFolders({\n expandedFoldersTasks,\n expandedParentIds,\n foldersMap,\n })\n } else return {}\n }, [isFetchingExpandedFoldersTasks, expandedFoldersTasks, expandedParentIds, foldersMap])\n\n const [tasksListCursor, setTasksListCursor] = useState('')\n\n // every time the sorting changes, reset the cursor\n useEffect(() => {\n if (tasksListCursor) setTasksListCursor('')\n }, [sorting, tasksListCursor])\n\n // Create sort params for infinite query\n const singleSort = { ...sorting[0] }\n // if task list and sorting by name, sort by path instead\n const sortByPath = singleSort?.id === 'name' && !showHierarchy\n const sortId = sortByPath ? 'path' : singleSort?.id === 'subType' ? 'taskType' : singleSort?.id\n const tasksFolderIdsParams = selectedFolders.length ? Array.from(foldersMap.keys()) : undefined\n\n // Use the new infinite query hook for tasks list with correct name\n const {\n data: tasksListInfiniteData,\n isFetching: isFetchingTasksList,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage: isFetchingNextPageTasksList,\n isUninitialized: isUninitializedTasksList,\n refetch: refetchTasksList,\n } = useGetTasksListInfiniteInfiniteQuery(\n {\n projectName,\n filter: queryFilters.filterString,\n search: queryFilters.search,\n folderIds: tasksFolderIdsParams,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n },\n {\n skip: showHierarchy,\n initialPageParam: {\n cursor: '',\n desc: !!singleSort?.desc,\n },\n },\n )\n\n // Extract tasks from infinite query data correctly\n const tasksList = useMemo(() => {\n if (!tasksListInfiniteData?.pages) return []\n return tasksListInfiniteData.pages.flatMap((page) => page.tasks || [])\n }, [tasksListInfiniteData?.pages])\n\n const initGroupPageCounts = useMemo(() => {\n return taskGroups.reduce((acc, group) => {\n acc[group.value] = 1 // initialize each group with 1 count\n return acc\n }, {} as Record<string, number>)\n }, [taskGroups])\n const [groupPageCounts, setGroupPageCounts] = useState<Record<string, number>>({})\n\n // when initGroupPageCounts changes, set it to groupPageCounts\n useEffect(() => {\n const hasInitData = Object.keys(initGroupPageCounts).length > 0\n const hasCurrentData = Object.keys(groupPageCounts).length > 0\n\n if (hasInitData && !hasCurrentData) {\n setGroupPageCounts(initGroupPageCounts)\n }\n }, [initGroupPageCounts])\n\n // for grouped tasks, we fetch all tasks for each group\n // we do this by building a list of groups with filters for that group\n\n // get the data type for the groupBy\n const groupByDataType = useMemo(() => {\n if (!groupBy?.id) return 'string'\n\n const groupById = groupBy.id\n\n // Handle special cases for built-in group types\n if (groupById === 'assignees' || groupById === 'tags') {\n return 'list_of_strings'\n }\n\n // Handle attribute-based grouping (format: \"attrib.attributeName\")\n if (groupById.startsWith('attrib.')) {\n const attributeName = groupById.split('.')[1]\n const attribute = attribFields.find((field) => field.name === attributeName)\n return attribute?.data?.type || 'string'\n }\n\n // Default fallback\n return 'string'\n }, [groupBy?.id, attribFields])\n\n const groupQueries: GetGroupedTasksListArgs['groups'] = useMemo(() => {\n return groupBy\n ? getGroupQueries?.({\n taskGroups,\n filters,\n groupBy,\n groupPageCounts,\n dataType: groupByDataType,\n }) ?? []\n : []\n }, [groupBy, taskGroups, filters, groupPageCounts, groupByDataType, getGroupQueries])\n\n const {\n data: { tasks: groupTasks = [] } = {},\n isFetching: isFetchingGroups,\n isUninitialized: isUninitializedGroupedTasks,\n refetch: refetchGroupedTasks,\n } = useGetGroupedTasksListQuery(\n {\n projectName,\n groups: groupQueries,\n sortBy: sortId ? sortId.replace('_', '.') : undefined,\n desc: !!singleSort?.desc,\n search: queryFilters.search,\n folderIds: tasksFolderIdsParams,\n },\n {\n skip: !groupBy || !groupQueries.length || isLoadingModules,\n },\n )\n\n const handleFetchNextPage = (group?: string) => {\n if (groupBy) {\n if (group && group in groupPageCounts) {\n console.log('fetching next page for group:', group)\n // fetch next page for a specific group by increasing the count in groupPageCounts\n setGroupPageCounts((prevCounts) => {\n const newCounts = { ...prevCounts }\n newCounts[group] = (newCounts[group] || 1) + 1 // increment the count for this group\n return newCounts\n })\n }\n } else if (hasNextPage) {\n console.log('fetching next page')\n fetchNextPage()\n }\n }\n\n // tasksMaps is a map of tasks by task ID\n // tasksByFolderMap is a map of tasks by folder ID\n const { tasksMap, tasksByFolderMap } = useMemo(() => {\n const tasksMap: TaskNodeMap = new Map()\n const tasksByFolderMap: TasksByFolderMap = new Map()\n\n const addExtraDataToTask = (task: EditorTaskNode) => ({\n ...task,\n entityId: task.id,\n entityType: 'task' as const,\n })\n\n // either show the hierarchy or the flat list of tasks\n const allTasks = showHierarchy ? expandedFoldersTasks : groupBy ? groupTasks : tasksList\n for (const task of allTasks) {\n const taskId = task.id as string\n const folderId = task.folderId as string\n\n if (tasksMap.has(taskId)) {\n // merge specific data if the task already exists\n const existingTask = tasksMap.get(taskId) as EditorTaskNode\n const currentTask = addExtraDataToTask(task)\n const mergedTask = {\n ...existingTask,\n ...currentTask,\n groups: [...(existingTask.groups || []), ...(currentTask.groups || [])],\n }\n\n tasksMap.set(taskId, mergedTask)\n } else {\n tasksMap.set(taskId, addExtraDataToTask(task))\n }\n\n if (tasksByFolderMap.has(folderId)) {\n tasksByFolderMap.get(folderId)!.push(taskId)\n } else {\n tasksByFolderMap.set(folderId, [taskId])\n }\n }\n\n return { tasksMap, tasksByFolderMap }\n }, [expandedFoldersTasks, showHierarchy, tasksList, groupTasks])\n\n // reload all data for all queries\n const reloadTableData = () => {\n // only reload if there is data\n if (!isUninitializedFolders) refetchFolders()\n if (!isUninitializedExpandedFoldersTasks) refetchExpandedFoldersTasks()\n if (!isUninitializedTasksFolders) refetchTasksFolders()\n if (!isUninitializedTasksList) refetchTasksList()\n if (!isUninitializedGroupedTasks) refetchGroupedTasks()\n }\n\n return {\n foldersMap: foldersMap,\n tasksMap: tasksMap,\n tasksByFolderMap: tasksByFolderMap,\n isLoadingAll:\n isLoading ||\n isFetchingFolders ||\n (isFetchingTasksList && !isFetchingNextPageTasksList) ||\n isFetchingTasksFolders ||\n isFetchingGroups ||\n isLoadingModules, // these all show a full loading state\n isLoadingMore: isFetchingNextPageTasksList,\n loadingTasks: loadingTasksForParents,\n fetchNextPage: handleFetchNextPage,\n reloadTableData,\n }\n}\n"],"names":["tasksMap","tasksByFolderMap"],"mappings":"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"}
|
|
@@ -85,6 +85,7 @@ function useFolderRelationships({
|
|
|
85
85
|
const pendingAttribs = new Set(attribNames);
|
|
86
86
|
let currentId = folderId;
|
|
87
87
|
while (pendingAttribs.size > 0) {
|
|
88
|
+
if (!currentId) break;
|
|
88
89
|
const folder = getEntityById(currentId);
|
|
89
90
|
if (!folder || !currentId) {
|
|
90
91
|
for (const attribName of pendingAttribs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFolderRelationships.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":["useMemo","useCallback","getEntityDataById"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFolderRelationships.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n if (!currentId) break\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":["useMemo","useCallback","getEntityDataById"],"mappings":";;;AAsCA,SAAwB,uBAAuB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;AAExB,QAAA,oBAAoBA,MAAAA,QAAQ,MAAM;AAChC,UAAA,0BAAU,IAAsB;AAClC,QAAA,CAAC,YAAoB,QAAA;AACd,eAAA,UAAU,YAAY,UAAU;AAErC,UAAA,OAAO,eAAe,SAAU;AACpC,YAAM,WAAW,OAAO;AACxB,UAAI,CAAC,SAAU;AAEf,UAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AAClB,YAAA,IAAI,UAAU,EAAE;AAAA,MAAA;AAEtB,UAAI,IAAI,QAAQ,EAAG,KAAK,OAAO,EAAE;AAAA,IAAA;AAE5B,WAAA;AAAA,EAAA,GACN,CAAC,WAAW,CAAC;AAEhB,QAAM,sBAAsBC,MAAA;AAAA,IAC1B,CAAC,OAAe;AACd,YAAM,cAAmD,CAAC;AACpD,YAAA,QAAkB,CAAC,EAAE;AACrB,YAAA,8BAAc,IAAY;AAEzB,aAAA,MAAM,SAAS,GAAG;AACjB,cAAA,YAAY,MAAM,MAAM;AAE1B,YAAA,QAAQ,IAAI,SAAS,EAAG;AAC5B,gBAAQ,IAAI,SAAS;AAGjB,YAAA,cAAc,MAAM,aAAa;AAC7B,gBAAA,SAASC,UAAAA,kBAA4B,WAAW,WAAW;AAC7D,cAAA,oBAAoB,KAAK,EAAE,GAAG,QAAQ,YAAY,UAAU;AAAA,QAAA;AAI5D,cAAA,UAAU,qDAAkB,IAAI;AAClC,aAAA,mCAAS,WAAU,aAAa;AAClC,qBAAW,UAAU,SAAS;AACtB,kBAAA,OAAOA,UAAAA,kBAA0B,QAAQ,WAAW;AACtD,gBAAA,kBAAkB,KAAK,EAAE,GAAG,MAAM,YAAY,QAAQ;AAAA,UAAA;AAAA,QAC5D;AAII,cAAA,iBAAiB,kBAAkB,IAAI,SAAS;AACtD,YAAI,iDAAgB,QAAQ;AACpB,gBAAA,KAAK,GAAG,cAAc;AAAA,QAAA;AAAA,MAC9B;AAGK,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa,kBAAkB,aAAa,iBAAiB;AAAA,EAChE;AAGA,QAAM,iBAAiCD,MAAA;AAAA,IACrC,CAAC,OAAO;AACN,YAAM,YAAsB,CAAC;AAC7B,UAAI,YAAY;AAEhB,aAAO,MAAM;AACX,cAAM,SAAS,eAAeC,4BAA4B,WAAW,WAAW;AAChF,YAAI,CAAC,UAAU,CAAC,OAAO,SAAU;AAEvB,kBAAA,KAAK,OAAO,QAAQ;AAC9B,oBAAY,OAAO;AAAA,MAAA;AAGd,aAAA;AAAA,IACT;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAGA,QAAM,mBAAmBD,MAAA;AAAA,IACvB,CAAC,WAA6B;AACtB,YAAA,OAAO,qCAAU,IAAI;AAC3B,UAAI,CAAC,QAAQ,CAAC,KAAK,iBAAiB,CAAC;AAG/B,YAAA,YAAY,CAAC,KAAK,QAAQ;AAG1B,YAAA,kBAAkB,eAAe,KAAK,QAAQ;AAC1C,gBAAA,KAAK,GAAG,eAAe;AAE1B,aAAA;AAAA,IACT;AAAA,IACA,CAAC,UAAU,cAAc;AAAA,EAC3B;AAGA,QAAM,yBAAiDA,MAAA;AAAA,IACrD,CAAC,UAAU,gBAAgB;;AACzB,UAAI,CAAC,YAAY,OAAQ,QAAO,CAAC;AAEjC,YAAM,SAA8B,CAAC;AAC/B,YAAA,iBAAiB,IAAI,IAAI,WAAW;AAG1C,UAAI,YAAY;AAIT,aAAA,eAAe,OAAO,GAAG;AAC9B,YAAI,CAAC,UAAW;AACV,cAAA,SAAS,cAAc,SAAS;AAClC,YAAA,CAAC,UAAU,CAAC,WAAW;AAEzB,qBAAW,cAAc,gBAAgB;AACnC,gBAAA,iBAAiB,cAAc,eAAe;AAEzC,qBAAA,UAAU,IAAI,cAAc,UAAU;AAC7C,6BAAe,OAAO,UAAU;AAAA,YAAA;AAAA,UAClC;AAIF;AAAA,QAAA;AAIF,mBAAW,cAAc,MAAM,KAAK,cAAc,GAAG;AAEjD,gBAAA,YAAO,cAAP,mBAAkB,SAAS,gBAC3B,OAAO,UACP,cAAc,OAAO,QACrB;AAEA,mBAAO,UAAU,IAAI,OAAO,OAAO,UAAU;AAC7C,2BAAe,OAAO,UAAU;AAAA,UAAA;AAAA,QAClC;AAIF,oBAAY,OAAO;AAAA,MAAA;AAIrB,iBAAW,cAAc,gBAAgB;AACvC,eAAO,UAAU,IAAI;AAAA,MAAA;AAGhB,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAGA,QAAM,yBAAiDA,MAAA;AAAA,IACrD,CAAC,aAAa;AAEZ,UAAI,CAAC,SAAS,OAAQ,QAAO,CAAC;AAG9B,YAAM,SAA+B,CAAC;AAGhC,YAAA,4CAA4B,IAAyB;AAE3D,iBAAW,UAAU,UAAU;AAEzB,YAAA,OAAO,eAAe,SAAU;AAEpC,cAAM,gBAAgB,OAAO,QAAQ,OAAO,MAAM;AAC9C,YAAA,CAAC,cAAc,OAAQ;AAErB,cAAA,WAAW,oBAAoB,OAAO,QAAQ;AAGpD,cAAM,mBAAmB,SAAS;AAAA,UAChC,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,EAAE;AAAA,QAC1D;AAEI,YAAA,CAAC,iBAAiB,OAAQ;AAE9B,mBAAW,SAAS,kBAAkB;AAEpC,gBAAM,mBAAmB,cAAc;AAAA,YACrC,CAAC,CAAC,UAAU,MACV;;AAAA,wBAAC,WAAM,cAAN,mBAAiB,SAAS,kBAC3B,wDAAc,KAAK,CAAC,MAAM,EAAE,SAAS,gBAArC,mBAAkD,SAAlD,mBAAwD;AAAA;AAAA,UAC5D;AAGA,gBAAM,eAAe,cAAc;AAAA,YAAO,CAAC,CAAC,UAAU;;AACpD,iCAAM,cAAN,mBAAiB,SAAS;AAAA;AAAA,UAC5B;AAGA,cAAI,aAAa,QAAQ;AACvB,gBAAI,CAAC,sBAAsB,IAAI,MAAM,EAAE,GAAG;AACxC,oCAAsB,IAAI,MAAM,IAAI,oBAAI,KAAK;AAAA,YAAA;AAE/C,yBAAa,QAAQ,CAAC,CAAC,UAAU,MAAM;AACrC,oCAAsB,IAAI,MAAM,EAAE,EAAG,IAAI,UAAU;AAAA,YAAA,CACpD;AAAA,UAAA;AAIH,gBAAM,2BAA2B,iBAAiB,OAAO,CAAC,CAAC,UAAU,MAAM;AAEnE,kBAAA,YACJ,MAAM,eAAe,SAAS,iBAAiB,MAAM,EAAE,IAAI,eAAe,MAAM,EAAE;AAGpF,uBAAW,YAAY,WAAW;AAE9B,kBAAA,sBAAsB,IAAI,QAAQ,KAClC,sBAAsB,IAAI,QAAQ,EAAG,IAAI,UAAU,GACnD;AACO,uBAAA;AAAA,cAAA;AAAA,YACT;AAEK,mBAAA;AAAA,UAAA,CACR;AAED,cAAI,yBAAyB,QAAQ;AAE7B,kBAAA,sBAAsB,OAAO,UAAU,CAAC,SAAS,KAAK,aAAa,MAAM,EAAE;AAEjF,gBAAI,wBAAwB,IAAI;AAEvB,qBAAA,mBAAmB,EAAE,SAAS;AAAA,gBACnC,GAAG,OAAO,mBAAmB,EAAE;AAAA,gBAC/B,GAAG,OAAO,YAAY,wBAAwB;AAAA,cAChD;AAAA,YAAA,OACK;AAEL,qBAAO,KAAK;AAAA,gBACV,UAAU,MAAM;AAAA,gBAChB,YAAY,MAAM,eAAe,cAAc,QAAQ,WAAW;AAAA,gBAClE,QAAQ,OAAO,YAAY,wBAAwB;AAAA,cAAA,CACpD;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAKK,aAAA;AAAA,IACT;AAAA,IACA,CAAC,qBAAqB,UAAU,kBAAkB,cAAc;AAAA,EAClE;AAGA,QAAM,kCAAkCA,MAAA;AAAA,IACtC,CAAC,UAAU,YAAY,eAAe;;AAC9B,YAAA,SAAS,cAAc,QAAQ;AACjC,UAAA,CAAC,OAAe,QAAA;AAGpB,UAAI,YAAY,eAAe,SAAS,OAAO,WAAW,OAAO;AAGjE,aAAO,WAAW;AACV,cAAA,WAAW,cAAc,SAAS;AACxC,YAAI,CAAC,SAAU;AAIb,cAAA,cAAS,cAAT,mBAAoB,SAAS,gBAC7B,SAAS,UACT,cAAc,SAAS,QACvB;AACO,iBAAA,SAAS,OAAO,UAAU;AAAA,QAAA;AAInC,oBAAY,SAAS;AAAA,MAAA;AAIhB,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;"}
|
|
@@ -84,6 +84,7 @@ function useFolderRelationships({
|
|
|
84
84
|
const pendingAttribs = new Set(attribNames);
|
|
85
85
|
let currentId = folderId;
|
|
86
86
|
while (pendingAttribs.size > 0) {
|
|
87
|
+
if (!currentId) break;
|
|
87
88
|
const folder = getEntityById(currentId);
|
|
88
89
|
if (!folder || !currentId) {
|
|
89
90
|
for (const attribName of pendingAttribs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFolderRelationships.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":[],"mappings":";;AAsCA,SAAwB,uBAAuB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;AAExB,QAAA,oBAAoB,QAAQ,MAAM;AAChC,UAAA,0BAAU,IAAsB;AAClC,QAAA,CAAC,YAAoB,QAAA;AACd,eAAA,UAAU,YAAY,UAAU;AAErC,UAAA,OAAO,eAAe,SAAU;AACpC,YAAM,WAAW,OAAO;AACxB,UAAI,CAAC,SAAU;AAEf,UAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AAClB,YAAA,IAAI,UAAU,EAAE;AAAA,MAAA;AAEtB,UAAI,IAAI,QAAQ,EAAG,KAAK,OAAO,EAAE;AAAA,IAAA;AAE5B,WAAA;AAAA,EAAA,GACN,CAAC,WAAW,CAAC;AAEhB,QAAM,sBAAsB;AAAA,IAC1B,CAAC,OAAe;AACd,YAAM,cAAmD,CAAC;AACpD,YAAA,QAAkB,CAAC,EAAE;AACrB,YAAA,8BAAc,IAAY;AAEzB,aAAA,MAAM,SAAS,GAAG;AACjB,cAAA,YAAY,MAAM,MAAM;AAE1B,YAAA,QAAQ,IAAI,SAAS,EAAG;AAC5B,gBAAQ,IAAI,SAAS;AAGjB,YAAA,cAAc,MAAM,aAAa;AAC7B,gBAAA,SAAS,kBAA4B,WAAW,WAAW;AAC7D,cAAA,oBAAoB,KAAK,EAAE,GAAG,QAAQ,YAAY,UAAU;AAAA,QAAA;AAI5D,cAAA,UAAU,qDAAkB,IAAI;AAClC,aAAA,mCAAS,WAAU,aAAa;AAClC,qBAAW,UAAU,SAAS;AACtB,kBAAA,OAAO,kBAA0B,QAAQ,WAAW;AACtD,gBAAA,kBAAkB,KAAK,EAAE,GAAG,MAAM,YAAY,QAAQ;AAAA,UAAA;AAAA,QAC5D;AAII,cAAA,iBAAiB,kBAAkB,IAAI,SAAS;AACtD,YAAI,iDAAgB,QAAQ;AACpB,gBAAA,KAAK,GAAG,cAAc;AAAA,QAAA;AAAA,MAC9B;AAGK,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa,kBAAkB,aAAa,iBAAiB;AAAA,EAChE;AAGA,QAAM,iBAAiC;AAAA,IACrC,CAAC,OAAO;AACN,YAAM,YAAsB,CAAC;AAC7B,UAAI,YAAY;AAEhB,aAAO,MAAM;AACX,cAAM,SAAS,eAAe,kBAA4B,WAAW,WAAW;AAChF,YAAI,CAAC,UAAU,CAAC,OAAO,SAAU;AAEvB,kBAAA,KAAK,OAAO,QAAQ;AAC9B,oBAAY,OAAO;AAAA,MAAA;AAGd,aAAA;AAAA,IACT;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAGA,QAAM,mBAAmB;AAAA,IACvB,CAAC,WAA6B;AACtB,YAAA,OAAO,qCAAU,IAAI;AAC3B,UAAI,CAAC,QAAQ,CAAC,KAAK,iBAAiB,CAAC;AAG/B,YAAA,YAAY,CAAC,KAAK,QAAQ;AAG1B,YAAA,kBAAkB,eAAe,KAAK,QAAQ;AAC1C,gBAAA,KAAK,GAAG,eAAe;AAE1B,aAAA;AAAA,IACT;AAAA,IACA,CAAC,UAAU,cAAc;AAAA,EAC3B;AAGA,QAAM,yBAAiD;AAAA,IACrD,CAAC,UAAU,gBAAgB;;AACzB,UAAI,CAAC,YAAY,OAAQ,QAAO,CAAC;AAEjC,YAAM,SAA8B,CAAC;AAC/B,YAAA,iBAAiB,IAAI,IAAI,WAAW;AAG1C,UAAI,YAAY;AAIT,aAAA,eAAe,OAAO,GAAG;AACxB,cAAA,SAAS,cAAc,SAAS;AAClC,YAAA,CAAC,UAAU,CAAC,WAAW;AAEzB,qBAAW,cAAc,gBAAgB;AACnC,gBAAA,iBAAiB,cAAc,eAAe;AAEzC,qBAAA,UAAU,IAAI,cAAc,UAAU;AAC7C,6BAAe,OAAO,UAAU;AAAA,YAAA;AAAA,UAClC;AAIF;AAAA,QAAA;AAIF,mBAAW,cAAc,MAAM,KAAK,cAAc,GAAG;AAEjD,gBAAA,YAAO,cAAP,mBAAkB,SAAS,gBAC3B,OAAO,UACP,cAAc,OAAO,QACrB;AAEA,mBAAO,UAAU,IAAI,OAAO,OAAO,UAAU;AAC7C,2BAAe,OAAO,UAAU;AAAA,UAAA;AAAA,QAClC;AAIF,oBAAY,OAAO;AAAA,MAAA;AAIrB,iBAAW,cAAc,gBAAgB;AACvC,eAAO,UAAU,IAAI;AAAA,MAAA;AAGhB,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAGA,QAAM,yBAAiD;AAAA,IACrD,CAAC,aAAa;AAEZ,UAAI,CAAC,SAAS,OAAQ,QAAO,CAAC;AAG9B,YAAM,SAA+B,CAAC;AAGhC,YAAA,4CAA4B,IAAyB;AAE3D,iBAAW,UAAU,UAAU;AAEzB,YAAA,OAAO,eAAe,SAAU;AAEpC,cAAM,gBAAgB,OAAO,QAAQ,OAAO,MAAM;AAC9C,YAAA,CAAC,cAAc,OAAQ;AAErB,cAAA,WAAW,oBAAoB,OAAO,QAAQ;AAGpD,cAAM,mBAAmB,SAAS;AAAA,UAChC,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,EAAE;AAAA,QAC1D;AAEI,YAAA,CAAC,iBAAiB,OAAQ;AAE9B,mBAAW,SAAS,kBAAkB;AAEpC,gBAAM,mBAAmB,cAAc;AAAA,YACrC,CAAC,CAAC,UAAU,MACV;;AAAA,wBAAC,WAAM,cAAN,mBAAiB,SAAS,kBAC3B,wDAAc,KAAK,CAAC,MAAM,EAAE,SAAS,gBAArC,mBAAkD,SAAlD,mBAAwD;AAAA;AAAA,UAC5D;AAGA,gBAAM,eAAe,cAAc;AAAA,YAAO,CAAC,CAAC,UAAU;;AACpD,iCAAM,cAAN,mBAAiB,SAAS;AAAA;AAAA,UAC5B;AAGA,cAAI,aAAa,QAAQ;AACvB,gBAAI,CAAC,sBAAsB,IAAI,MAAM,EAAE,GAAG;AACxC,oCAAsB,IAAI,MAAM,IAAI,oBAAI,KAAK;AAAA,YAAA;AAE/C,yBAAa,QAAQ,CAAC,CAAC,UAAU,MAAM;AACrC,oCAAsB,IAAI,MAAM,EAAE,EAAG,IAAI,UAAU;AAAA,YAAA,CACpD;AAAA,UAAA;AAIH,gBAAM,2BAA2B,iBAAiB,OAAO,CAAC,CAAC,UAAU,MAAM;AAEnE,kBAAA,YACJ,MAAM,eAAe,SAAS,iBAAiB,MAAM,EAAE,IAAI,eAAe,MAAM,EAAE;AAGpF,uBAAW,YAAY,WAAW;AAE9B,kBAAA,sBAAsB,IAAI,QAAQ,KAClC,sBAAsB,IAAI,QAAQ,EAAG,IAAI,UAAU,GACnD;AACO,uBAAA;AAAA,cAAA;AAAA,YACT;AAEK,mBAAA;AAAA,UAAA,CACR;AAED,cAAI,yBAAyB,QAAQ;AAE7B,kBAAA,sBAAsB,OAAO,UAAU,CAAC,SAAS,KAAK,aAAa,MAAM,EAAE;AAEjF,gBAAI,wBAAwB,IAAI;AAEvB,qBAAA,mBAAmB,EAAE,SAAS;AAAA,gBACnC,GAAG,OAAO,mBAAmB,EAAE;AAAA,gBAC/B,GAAG,OAAO,YAAY,wBAAwB;AAAA,cAChD;AAAA,YAAA,OACK;AAEL,qBAAO,KAAK;AAAA,gBACV,UAAU,MAAM;AAAA,gBAChB,YAAY,MAAM,eAAe,cAAc,QAAQ,WAAW;AAAA,gBAClE,QAAQ,OAAO,YAAY,wBAAwB;AAAA,cAAA,CACpD;AAAA,YAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAKK,aAAA;AAAA,IACT;AAAA,IACA,CAAC,qBAAqB,UAAU,kBAAkB,cAAc;AAAA,EAClE;AAGA,QAAM,kCAAkC;AAAA,IACtC,CAAC,UAAU,YAAY,eAAe;;AAC9B,YAAA,SAAS,cAAc,QAAQ;AACjC,UAAA,CAAC,OAAe,QAAA;AAGpB,UAAI,YAAY,eAAe,SAAS,OAAO,WAAW,OAAO;AAGjE,aAAO,WAAW;AACV,cAAA,WAAW,cAAc,SAAS;AACxC,YAAI,CAAC,SAAU;AAIb,cAAA,cAAS,cAAT,mBAAoB,SAAS,gBAC7B,SAAS,UACT,cAAc,SAAS,QACvB;AACO,iBAAA,SAAS,OAAO,UAAU;AAAA,QAAA;AAInC,oBAAY,SAAS;AAAA,MAAA;AAIhB,aAAA;AAAA,IACT;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;"}
|
|
1
|
+
{"version":3,"file":"useFolderRelationships.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useFolderRelationships.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport {\n EditorTaskNode,\n EMapResult,\n EntitiesMap,\n FolderNodeMap,\n MatchingFolder,\n TaskNodeMap,\n} from '../types/table'\nimport { ProjectAttribModel2 } from '../types/project'\nimport { ProjectTableAttribute } from '../types'\nimport { getEntityDataById } from '../utils/cellUtils'\n\nexport interface InheritedDependent {\n entityId: string\n entityType: 'task' | 'folder'\n attrib: Record<string, any> // all attribs that are inherited from the parent and their new value\n}\nexport type GetInheritedDependents = (entities: InheritedDependent[]) => InheritedDependent[]\nexport type FindInheritedValueFromAncestors = (\n entityId: string,\n entityType: 'folder' | 'task',\n attribName: string,\n) => any\nexport type FindNonInheritedValues = (\n folderId: string,\n attribNames: string[],\n) => Record<string, any>\nexport type GetAncestorsOf = (id: string) => string[]\ninterface UseFolderRelationshipsProps {\n tasksMap?: TaskNodeMap\n entitiesMap?: EntitiesMap\n tasksByFolderMap?: Map<string, string[]>\n getEntityById: (id: string) => any\n projectAttrib: ProjectAttribModel2 | undefined\n attribFields: ProjectTableAttribute[] | undefined\n}\n\nexport default function useFolderRelationships({\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields,\n}: UseFolderRelationshipsProps) {\n // Pre-compute folder-children relationships\n const folderChildrenMap = useMemo(() => {\n const map = new Map<string, string[]>()\n if (!entitiesMap) return map\n for (const folder of entitiesMap.values()) {\n // Skip if not a folder\n if (folder.entityType !== 'folder') continue\n const parentId = folder.parentId\n if (!parentId) continue\n\n if (!map.has(parentId)) {\n map.set(parentId, [])\n }\n map.get(parentId)!.push(folder.id)\n }\n return map\n }, [entitiesMap])\n\n const getChildrenEntities = useCallback(\n (id: string) => {\n const descendants: (MatchingFolder | EditorTaskNode)[] = []\n const queue: string[] = [id]\n const visited = new Set<string>()\n\n while (queue.length > 0) {\n const currentId = queue.shift()!\n\n if (visited.has(currentId)) continue\n visited.add(currentId)\n\n // Skip adding the root folder to descendants\n if (currentId !== id && entitiesMap) {\n const folder = getEntityDataById<'folder'>(currentId, entitiesMap)\n if (folder) descendants.push({ ...folder, entityType: 'folder' })\n }\n\n // Add tasks efficiently with a single lookup\n const taskIds = tasksByFolderMap?.get(currentId)\n if (taskIds?.length && entitiesMap) {\n for (const taskId of taskIds) {\n const task = getEntityDataById<'task'>(taskId, entitiesMap)\n if (task) descendants.push({ ...task, entityType: 'task' })\n }\n }\n\n // Add folder children to queue\n const childFolderIds = folderChildrenMap.get(currentId)\n if (childFolderIds?.length) {\n queue.push(...childFolderIds)\n }\n }\n\n return descendants\n },\n [entitiesMap, tasksByFolderMap, entitiesMap, folderChildrenMap],\n )\n\n // Helper function to get ancestors of a folder\n const getAncestorsOf: GetAncestorsOf = useCallback(\n (id) => {\n const ancestors: string[] = []\n let currentId = id\n\n while (true) {\n const entity = entitiesMap && getEntityDataById<'folder'>(currentId, entitiesMap)\n if (!entity || !entity.parentId) break\n\n ancestors.push(entity.parentId)\n currentId = entity.parentId\n }\n\n return ancestors\n },\n [entitiesMap],\n )\n\n // Helper function to get all folder ancestors of a task\n const getTaskAncestors = useCallback(\n (taskId: string): string[] => {\n const task = tasksMap?.get(taskId) as EMapResult<'task'>\n if (!task || !task.folderId) return []\n\n // Start with the direct parent folder\n const ancestors = [task.folderId]\n\n // Add all ancestors of the parent folder\n const folderAncestors = getAncestorsOf(task.folderId)\n ancestors.push(...folderAncestors)\n\n return ancestors\n },\n [tasksMap, getAncestorsOf],\n )\n\n // Helper function to find non-inherited values for multiple attributes from ancestors\n const findNonInheritedValues: FindNonInheritedValues = useCallback(\n (folderId, attribNames) => {\n if (!attribNames.length) return {}\n\n const result: Record<string, any> = {}\n const pendingAttribs = new Set(attribNames)\n\n // Start with the provided folder and traverse upward\n let currentId = folderId\n\n // Traverse up the folder hierarchy until we've found values for all attributes\n // or we've reached the root folder\n while (pendingAttribs.size > 0) {\n if (!currentId) break\n const folder = getEntityById(currentId)\n if (!folder || !currentId) {\n // use the project attrib\n for (const attribName of pendingAttribs) {\n if (projectAttrib && attribName in projectAttrib) {\n // @ts-ignore\n result[attribName] = projectAttrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // end search\n break\n }\n\n // Check if this folder has non-inherited values for any of our pending attributes\n for (const attribName of Array.from(pendingAttribs)) {\n if (\n folder.ownAttrib?.includes(attribName) &&\n folder.attrib &&\n attribName in folder.attrib\n ) {\n // Found a non-inherited value, add to result and remove from pending\n result[attribName] = folder.attrib[attribName]\n pendingAttribs.delete(attribName)\n }\n }\n\n // Move up to the parent folder\n currentId = folder.parentId\n }\n\n // For any attributes without non-inherited values found, set to null\n for (const attribName of pendingAttribs) {\n result[attribName] = null\n }\n\n return result\n },\n [getEntityById],\n )\n\n // Optimized implementation of getInheritedDependents\n const getInheritedDependents: GetInheritedDependents = useCallback(\n (entities) => {\n // console.time('getInheritedDependents') // 40ms - TODO improve this\n if (!entities.length) return []\n\n // Process all entities in one batch for efficiency\n const result: InheritedDependent[] = []\n\n // Track attributes that are owned (not inherited) to block inheritance\n const blockedInheritanceMap = new Map<string, Set<string>>()\n\n for (const entity of entities) {\n // check entity is folder\n if (entity.entityType !== 'folder') continue\n\n const attribEntries = Object.entries(entity.attrib)\n if (!attribEntries.length) continue\n\n const children = getChildrenEntities(entity.entityId)\n\n // filter out children that are in entities as they are already processed\n const filteredChildren = children.filter(\n (child) => !entities.find((e) => e.entityId === child.id),\n )\n\n if (!filteredChildren.length) continue\n\n for (const child of filteredChildren) {\n // Find which attributes would be inherited by this child\n const inheritedAttribs = attribEntries.filter(\n ([attribName]) =>\n !child.ownAttrib?.includes(attribName) &&\n attribFields?.find((a) => a.name === attribName)?.data?.inherit,\n )\n\n // Record attributes that child owns (has its own value for)\n const ownedAttribs = attribEntries.filter(([attribName]) =>\n child.ownAttrib?.includes(attribName),\n )\n\n // If the child has its own value for some attributes, block inheritance for its descendants\n if (ownedAttribs.length) {\n if (!blockedInheritanceMap.has(child.id)) {\n blockedInheritanceMap.set(child.id, new Set())\n }\n ownedAttribs.forEach(([attribName]) => {\n blockedInheritanceMap.get(child.id)!.add(attribName)\n })\n }\n\n // Filter out attributes blocked by ancestors\n const filteredInheritedAttribs = inheritedAttribs.filter(([attribName]) => {\n // Get ancestors based on entity type\n const ancestors =\n child.entityType === 'task' ? getTaskAncestors(child.id) : getAncestorsOf(child.id)\n\n // Check if any ancestor blocks this attribute\n for (const ancestor of ancestors) {\n if (\n blockedInheritanceMap.has(ancestor) &&\n blockedInheritanceMap.get(ancestor)!.has(attribName)\n ) {\n return false\n }\n }\n return true\n })\n\n if (filteredInheritedAttribs.length) {\n // Check if entity already exists in the result\n const existingEntityIndex = result.findIndex((item) => item.entityId === child.id)\n\n if (existingEntityIndex !== -1) {\n // Merge attributes with existing entry\n result[existingEntityIndex].attrib = {\n ...result[existingEntityIndex].attrib,\n ...Object.fromEntries(filteredInheritedAttribs),\n }\n } else {\n // Add new entity\n result.push({\n entityId: child.id,\n entityType: child.entityType || ('parentId' in child ? 'folder' : 'task'),\n attrib: Object.fromEntries(filteredInheritedAttribs),\n })\n }\n }\n }\n }\n\n // console.timeEnd('getInheritedDependents')\n\n return result\n },\n [getChildrenEntities, tasksMap, getTaskAncestors, getAncestorsOf],\n )\n\n // Helper function to find the inherited value for an attribute from ancestors\n const findInheritedValueFromAncestors = useCallback<FindInheritedValueFromAncestors>(\n (entityId, entityType, attribName) => {\n const entity = getEntityById(entityId)\n if (!entity) return null\n\n // For tasks, start with their parent folder\n let currentId = entityType === 'task' ? entity.folderId : entity.parentId\n\n // Traverse up the folder hierarchy\n while (currentId) {\n const ancestor = getEntityById(currentId)\n if (!ancestor) break\n\n // If the ancestor has its own value for this attribute, return it\n if (\n ancestor.ownAttrib?.includes(attribName) &&\n ancestor.attrib &&\n attribName in ancestor.attrib\n ) {\n return ancestor.attrib[attribName]\n }\n\n // Move up to the next parent\n currentId = ancestor.parentId\n }\n\n // If no ancestor has its own value, return null (will use the default)\n return null\n },\n [getEntityById],\n )\n\n return {\n folderChildrenMap,\n getChildrenEntities,\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,8 @@ require("../../../api/queries/users/updateUsers.cjs.js");
|
|
|
67
67
|
require("../../../api/queries/watchers/getWatchers.cjs.js");
|
|
68
68
|
require("../../../api/queries/permissions/getPermissions.cjs.js");
|
|
69
69
|
const getGrouping = require("../../../api/queries/grouping/getGrouping.cjs.js");
|
|
70
|
+
require("../../../api/queries/versions/updateVersions.cjs.js");
|
|
71
|
+
require("../../../api/queries/products/createProduct.cjs.js");
|
|
70
72
|
const useGetTaskGroups = ({ groupBy, projectName }) => {
|
|
71
73
|
const groupingKey = (groupBy == null ? void 0 : groupBy.id) || "";
|
|
72
74
|
const { data: { groups: taskGroups = [] } = {}, error } = getGrouping.useGetEntityGroupsQuery(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetTaskGroups.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetTaskGroups.ts"],"sourcesContent":["import { useGetEntityGroupsQuery } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetTaskGroupsProps = {\n groupBy?: TableGroupBy\n projectName: string\n}\n\nexport const useGetTaskGroups = ({ groupBy, projectName }: GetTaskGroupsProps) => {\n // GROUPING\n // 1. get groups data\n // 2. add that filter to the combined filter\n // 3. sort by that filter\n const groupingKey = groupBy?.id || ''\n const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(\n { projectName, entityType: 'task', groupingKey: groupingKey, empty: true },\n { skip: !groupBy?.id },\n )\n\n return {\n taskGroups,\n error,\n }\n}\n"],"names":["useGetEntityGroupsQuery"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetTaskGroups.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetTaskGroups.ts"],"sourcesContent":["import { useGetEntityGroupsQuery } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetTaskGroupsProps = {\n groupBy?: TableGroupBy\n projectName: string\n}\n\nexport const useGetTaskGroups = ({ groupBy, projectName }: GetTaskGroupsProps) => {\n // GROUPING\n // 1. get groups data\n // 2. add that filter to the combined filter\n // 3. sort by that filter\n const groupingKey = groupBy?.id || ''\n const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(\n { projectName, entityType: 'task', groupingKey: groupingKey, empty: true },\n { skip: !groupBy?.id },\n )\n\n return {\n taskGroups,\n error,\n }\n}\n"],"names":["useGetEntityGroupsQuery"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,mBAAmB,CAAC,EAAE,SAAS,kBAAsC;AAK1E,QAAA,eAAc,mCAAS,OAAM;AAC7B,QAAA,EAAE,MAAM,EAAE,QAAQ,aAAa,CAAA,MAAO,CAAA,GAAI,MAAA,IAAUA,YAAA;AAAA,IACxD,EAAE,aAAa,YAAY,QAAQ,aAA0B,OAAO,KAAK;AAAA,IACzE,EAAE,MAAM,EAAC,mCAAS,IAAG;AAAA,EACvB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;"}
|
|
@@ -65,6 +65,8 @@ import "../../../api/queries/users/updateUsers.es.js";
|
|
|
65
65
|
import "../../../api/queries/watchers/getWatchers.es.js";
|
|
66
66
|
import "../../../api/queries/permissions/getPermissions.es.js";
|
|
67
67
|
import { useGetEntityGroupsQuery } from "../../../api/queries/grouping/getGrouping.es.js";
|
|
68
|
+
import "../../../api/queries/versions/updateVersions.es.js";
|
|
69
|
+
import "../../../api/queries/products/createProduct.es.js";
|
|
68
70
|
const useGetTaskGroups = ({ groupBy, projectName }) => {
|
|
69
71
|
const groupingKey = (groupBy == null ? void 0 : groupBy.id) || "";
|
|
70
72
|
const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetTaskGroups.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetTaskGroups.ts"],"sourcesContent":["import { useGetEntityGroupsQuery } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetTaskGroupsProps = {\n groupBy?: TableGroupBy\n projectName: string\n}\n\nexport const useGetTaskGroups = ({ groupBy, projectName }: GetTaskGroupsProps) => {\n // GROUPING\n // 1. get groups data\n // 2. add that filter to the combined filter\n // 3. sort by that filter\n const groupingKey = groupBy?.id || ''\n const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(\n { projectName, entityType: 'task', groupingKey: groupingKey, empty: true },\n { skip: !groupBy?.id },\n )\n\n return {\n taskGroups,\n error,\n }\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetTaskGroups.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useGetTaskGroups.ts"],"sourcesContent":["import { useGetEntityGroupsQuery } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetTaskGroupsProps = {\n groupBy?: TableGroupBy\n projectName: string\n}\n\nexport const useGetTaskGroups = ({ groupBy, projectName }: GetTaskGroupsProps) => {\n // GROUPING\n // 1. get groups data\n // 2. add that filter to the combined filter\n // 3. sort by that filter\n const groupingKey = groupBy?.id || ''\n const { data: { groups: taskGroups = [] } = {}, error } = useGetEntityGroupsQuery(\n { projectName, entityType: 'task', groupingKey: groupingKey, empty: true },\n { skip: !groupBy?.id },\n )\n\n return {\n taskGroups,\n error,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,mBAAmB,CAAC,EAAE,SAAS,kBAAsC;AAK1E,QAAA,eAAc,mCAAS,OAAM;AAC7B,QAAA,EAAE,MAAM,EAAE,QAAQ,aAAa,CAAA,MAAO,CAAA,GAAI,MAAA,IAAU;AAAA,IACxD,EAAE,aAAa,YAAY,QAAQ,aAA0B,OAAO,KAAK;AAAA,IACzE,EAAE,MAAM,EAAC,mCAAS,IAAG;AAAA,EACvB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;"}
|
|
@@ -71,6 +71,8 @@ require("../../../api/queries/users/updateUsers.cjs.js");
|
|
|
71
71
|
require("../../../api/queries/watchers/getWatchers.cjs.js");
|
|
72
72
|
require("../../../api/queries/permissions/getPermissions.cjs.js");
|
|
73
73
|
require("../../../api/queries/grouping/getGrouping.cjs.js");
|
|
74
|
+
require("../../../api/queries/versions/updateVersions.cjs.js");
|
|
75
|
+
require("../../../api/queries/products/createProduct.cjs.js");
|
|
74
76
|
require("lodash");
|
|
75
77
|
require("react-toastify");
|
|
76
78
|
require("../../../context/RemoteModulesContext.cjs.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProjectTableModules.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useProjectTableModules.ts"],"sourcesContent":["import { useLoadModule } from '@shared/hooks'\nimport { GroupSettingsFallback } from '../components/GroupSettingsFallback'\nimport { EntityGroup } from '@shared/api'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { TableGroupBy } from '../context'\nimport { ProjectTableAttribute } from './useAttributesList'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: Filter[]\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\n dataType: ProjectTableAttribute['data']['type']\n}\n\ntype GetGroupQueriesReturn = {\n value: any\n count: number\n filter: string\n}[]\n\nexport type ProjectTableModulesType = {\n GroupSettings: typeof GroupSettingsFallback\n getGroupQueries?: (params: GetGroupQueriesParams) => GetGroupQueriesReturn\n requiredVersion?: string\n isLoading: boolean\n}\n\nconst getGroupQueriesFallback = (params: GetGroupQueriesParams): GetGroupQueriesReturn => []\n\nexport const useProjectTableModules = (): ProjectTableModulesType => {\n const minVersion = '1.0.6-dev'\n const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'GroupSettings',\n fallback: GroupSettingsFallback,\n minVersion: minVersion,\n })\n\n const [getGroupQueries, { isLoading: isLoadingQueries }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'getGroupQueries',\n fallback: getGroupQueriesFallback,\n minVersion: minVersion,\n })\n\n const isLoading = isLoadingSettings || isLoadingQueries\n\n return {\n GroupSettings,\n getGroupQueries,\n requiredVersion: outdated?.required,\n isLoading: isLoading,\n }\n}\n"],"names":["useLoadModule","GroupSettingsFallback"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProjectTableModules.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useProjectTableModules.ts"],"sourcesContent":["import { useLoadModule } from '@shared/hooks'\nimport { GroupSettingsFallback } from '../components/GroupSettingsFallback'\nimport { EntityGroup } from '@shared/api'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { TableGroupBy } from '../context'\nimport { ProjectTableAttribute } from './useAttributesList'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: Filter[]\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\n dataType: ProjectTableAttribute['data']['type']\n}\n\ntype GetGroupQueriesReturn = {\n value: any\n count: number\n filter: string\n}[]\n\nexport type ProjectTableModulesType = {\n GroupSettings: typeof GroupSettingsFallback\n getGroupQueries?: (params: GetGroupQueriesParams) => GetGroupQueriesReturn\n requiredVersion?: string\n isLoading: boolean\n}\n\nconst getGroupQueriesFallback = (params: GetGroupQueriesParams): GetGroupQueriesReturn => []\n\nexport const useProjectTableModules = (): ProjectTableModulesType => {\n const minVersion = '1.0.6-dev'\n const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'GroupSettings',\n fallback: GroupSettingsFallback,\n minVersion: minVersion,\n })\n\n const [getGroupQueries, { isLoading: isLoadingQueries }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'getGroupQueries',\n fallback: getGroupQueriesFallback,\n minVersion: minVersion,\n })\n\n const isLoading = isLoadingSettings || isLoadingQueries\n\n return {\n GroupSettings,\n getGroupQueries,\n requiredVersion: outdated?.required,\n isLoading: isLoading,\n }\n}\n"],"names":["useLoadModule","GroupSettingsFallback"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,0BAA0B,CAAC,WAAyD,CAAC;AAEpF,MAAM,yBAAyB,MAA+B;AACnE,QAAM,aAAa;AACb,QAAA,CAAC,eAAe,EAAE,UAAU,WAAW,kBAAkB,CAAC,IAAIA,4BAAc;AAAA,IAChF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAUC,sBAAA;AAAA,IACV;AAAA,EAAA,CACD;AAED,QAAM,CAAC,iBAAiB,EAAE,WAAW,iBAAkB,CAAA,IAAID,cAAAA,cAAc;AAAA,IACvE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AAED,QAAM,YAAY,qBAAqB;AAEhC,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,qCAAU;AAAA,IAC3B;AAAA,EACF;AACF;;"}
|
|
@@ -69,6 +69,8 @@ import "../../../api/queries/users/updateUsers.es.js";
|
|
|
69
69
|
import "../../../api/queries/watchers/getWatchers.es.js";
|
|
70
70
|
import "../../../api/queries/permissions/getPermissions.es.js";
|
|
71
71
|
import "../../../api/queries/grouping/getGrouping.es.js";
|
|
72
|
+
import "../../../api/queries/versions/updateVersions.es.js";
|
|
73
|
+
import "../../../api/queries/products/createProduct.es.js";
|
|
72
74
|
import "lodash";
|
|
73
75
|
import "react-toastify";
|
|
74
76
|
import "../../../context/RemoteModulesContext.es.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProjectTableModules.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useProjectTableModules.ts"],"sourcesContent":["import { useLoadModule } from '@shared/hooks'\nimport { GroupSettingsFallback } from '../components/GroupSettingsFallback'\nimport { EntityGroup } from '@shared/api'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { TableGroupBy } from '../context'\nimport { ProjectTableAttribute } from './useAttributesList'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: Filter[]\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\n dataType: ProjectTableAttribute['data']['type']\n}\n\ntype GetGroupQueriesReturn = {\n value: any\n count: number\n filter: string\n}[]\n\nexport type ProjectTableModulesType = {\n GroupSettings: typeof GroupSettingsFallback\n getGroupQueries?: (params: GetGroupQueriesParams) => GetGroupQueriesReturn\n requiredVersion?: string\n isLoading: boolean\n}\n\nconst getGroupQueriesFallback = (params: GetGroupQueriesParams): GetGroupQueriesReturn => []\n\nexport const useProjectTableModules = (): ProjectTableModulesType => {\n const minVersion = '1.0.6-dev'\n const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'GroupSettings',\n fallback: GroupSettingsFallback,\n minVersion: minVersion,\n })\n\n const [getGroupQueries, { isLoading: isLoadingQueries }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'getGroupQueries',\n fallback: getGroupQueriesFallback,\n minVersion: minVersion,\n })\n\n const isLoading = isLoadingSettings || isLoadingQueries\n\n return {\n GroupSettings,\n getGroupQueries,\n requiredVersion: outdated?.required,\n isLoading: isLoading,\n }\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProjectTableModules.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useProjectTableModules.ts"],"sourcesContent":["import { useLoadModule } from '@shared/hooks'\nimport { GroupSettingsFallback } from '../components/GroupSettingsFallback'\nimport { EntityGroup } from '@shared/api'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { TableGroupBy } from '../context'\nimport { ProjectTableAttribute } from './useAttributesList'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: Filter[]\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\n dataType: ProjectTableAttribute['data']['type']\n}\n\ntype GetGroupQueriesReturn = {\n value: any\n count: number\n filter: string\n}[]\n\nexport type ProjectTableModulesType = {\n GroupSettings: typeof GroupSettingsFallback\n getGroupQueries?: (params: GetGroupQueriesParams) => GetGroupQueriesReturn\n requiredVersion?: string\n isLoading: boolean\n}\n\nconst getGroupQueriesFallback = (params: GetGroupQueriesParams): GetGroupQueriesReturn => []\n\nexport const useProjectTableModules = (): ProjectTableModulesType => {\n const minVersion = '1.0.6-dev'\n const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'GroupSettings',\n fallback: GroupSettingsFallback,\n minVersion: minVersion,\n })\n\n const [getGroupQueries, { isLoading: isLoadingQueries }] = useLoadModule({\n addon: 'powerpack',\n remote: 'slicer',\n module: 'getGroupQueries',\n fallback: getGroupQueriesFallback,\n minVersion: minVersion,\n })\n\n const isLoading = isLoadingSettings || isLoadingQueries\n\n return {\n GroupSettings,\n getGroupQueries,\n requiredVersion: outdated?.required,\n isLoading: isLoading,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,0BAA0B,CAAC,WAAyD,CAAC;AAEpF,MAAM,yBAAyB,MAA+B;AACnE,QAAM,aAAa;AACb,QAAA,CAAC,eAAe,EAAE,UAAU,WAAW,kBAAkB,CAAC,IAAI,cAAc;AAAA,IAChF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AAED,QAAM,CAAC,iBAAiB,EAAE,WAAW,iBAAkB,CAAA,IAAI,cAAc;AAAA,IACvE,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AAED,QAAM,YAAY,qBAAqB;AAEhC,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,qCAAU;AAAA,IAC3B;AAAA,EACF;AACF;"}
|
|
@@ -9,14 +9,15 @@ const getTableFieldOptions = ({
|
|
|
9
9
|
statuses,
|
|
10
10
|
folderTypes,
|
|
11
11
|
taskTypes,
|
|
12
|
-
tags
|
|
12
|
+
tags,
|
|
13
|
+
scopes
|
|
13
14
|
}) => ({
|
|
14
15
|
assignee: users.map(({ name, fullName }) => ({
|
|
15
16
|
value: name,
|
|
16
17
|
label: fullName || name,
|
|
17
18
|
icon: `/api/users/${name}/avatar`
|
|
18
19
|
})),
|
|
19
|
-
status: statuses.filter((status) => !status.scope ||
|
|
20
|
+
status: statuses.filter((status) => !status.scope || scopes.some((s) => {
|
|
20
21
|
var _a;
|
|
21
22
|
return (_a = status.scope) == null ? void 0 : _a.includes(s);
|
|
22
23
|
})).map(({ name, color, icon, scope }) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTableFieldOptions.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/getTableFieldOptions.ts"],"sourcesContent":["import { productTypes } from '@shared/util'\nimport { BuiltInFieldOptions } from '../types'\nimport { FolderType, Status, Tag, TaskType } from '../types/project'\n\ntype Params = {\n users: {\n name: string\n fullName?: string\n }[]\n statuses: Status[]\n folderTypes: FolderType[]\n taskTypes: TaskType[]\n tags: Tag[]\n}\n\nexport const getTableFieldOptions = ({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n}: Params): BuiltInFieldOptions => ({\n assignee: users.map(({ name, fullName }) => ({\n value: name,\n label: fullName || name,\n icon: `/api/users/${name}/avatar`,\n })),\n status: statuses\n .filter((status) => !status.scope ||
|
|
1
|
+
{"version":3,"file":"getTableFieldOptions.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/getTableFieldOptions.ts"],"sourcesContent":["import { productTypes } from '@shared/util'\nimport { BuiltInFieldOptions } from '../types'\nimport { FolderType, Status, Tag, TaskType } from '../types/project'\n\ntype Params = {\n users: {\n name: string\n fullName?: string\n }[]\n statuses: Status[]\n folderTypes: FolderType[]\n taskTypes: TaskType[]\n tags: Tag[]\n scopes: string[]\n}\n\nexport const getTableFieldOptions = ({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n scopes,\n}: Params): BuiltInFieldOptions => ({\n assignee: users.map(({ name, fullName }) => ({\n value: name,\n label: fullName || name,\n icon: `/api/users/${name}/avatar`,\n })),\n status: statuses\n .filter((status) => !status.scope || scopes.some((s) => status.scope?.includes(s)))\n .map(({ name, color, icon, scope }) => ({\n value: name,\n label: name,\n color,\n icon,\n scope,\n })),\n tag: tags.map(({ name, color }) => ({ value: name, label: name, color })),\n folderType: folderTypes.map(({ name, icon }) => ({ value: name, label: name, icon })),\n taskType: taskTypes.map(({ name, icon }) => ({ value: name, label: name, icon })),\n productType: Object.entries(productTypes).map(([key, value]) => ({\n value: key,\n label: value.name,\n icon: value.icon,\n })),\n})\n"],"names":[],"mappings":";;;;;;AAgBO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAAoC;AAAA,EAClC,UAAU,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB;AAAA,IAC3C,OAAO;AAAA,IACP,OAAO,YAAY;AAAA,IACnB,MAAM,cAAc,IAAI;AAAA,EAAA,EACxB;AAAA,EACF,QAAQ,SACL,OAAO,CAAC,WAAW,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,MAAM;;AAAA,wBAAO,UAAP,mBAAc,SAAS;AAAA,GAAE,CAAC,EACjF,IAAI,CAAC,EAAE,MAAM,OAAO,MAAM,aAAa;AAAA,IACtC,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA;AAAA,EACJ,KAAK,KAAK,IAAI,CAAC,EAAE,MAAM,MAAA,OAAa,EAAE,OAAO,MAAM,OAAO,MAAM,MAAQ,EAAA;AAAA,EACxE,YAAY,YAAY,IAAI,CAAC,EAAE,MAAM,KAAA,OAAY,EAAE,OAAO,MAAM,OAAO,MAAM,KAAO,EAAA;AAAA,EACpF,UAAU,UAAU,IAAI,CAAC,EAAE,MAAM,KAAA,OAAY,EAAE,OAAO,MAAM,OAAO,MAAM,KAAO,EAAA;AAAA,EAChF,aAAa,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IAC/D,OAAO;AAAA,IACP,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,EAAA,EACZ;AACJ;;"}
|
|
@@ -7,14 +7,15 @@ const getTableFieldOptions = ({
|
|
|
7
7
|
statuses,
|
|
8
8
|
folderTypes,
|
|
9
9
|
taskTypes,
|
|
10
|
-
tags
|
|
10
|
+
tags,
|
|
11
|
+
scopes
|
|
11
12
|
}) => ({
|
|
12
13
|
assignee: users.map(({ name, fullName }) => ({
|
|
13
14
|
value: name,
|
|
14
15
|
label: fullName || name,
|
|
15
16
|
icon: `/api/users/${name}/avatar`
|
|
16
17
|
})),
|
|
17
|
-
status: statuses.filter((status) => !status.scope ||
|
|
18
|
+
status: statuses.filter((status) => !status.scope || scopes.some((s) => {
|
|
18
19
|
var _a;
|
|
19
20
|
return (_a = status.scope) == null ? void 0 : _a.includes(s);
|
|
20
21
|
})).map(({ name, color, icon, scope }) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTableFieldOptions.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/getTableFieldOptions.ts"],"sourcesContent":["import { productTypes } from '@shared/util'\nimport { BuiltInFieldOptions } from '../types'\nimport { FolderType, Status, Tag, TaskType } from '../types/project'\n\ntype Params = {\n users: {\n name: string\n fullName?: string\n }[]\n statuses: Status[]\n folderTypes: FolderType[]\n taskTypes: TaskType[]\n tags: Tag[]\n}\n\nexport const getTableFieldOptions = ({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n}: Params): BuiltInFieldOptions => ({\n assignee: users.map(({ name, fullName }) => ({\n value: name,\n label: fullName || name,\n icon: `/api/users/${name}/avatar`,\n })),\n status: statuses\n .filter((status) => !status.scope ||
|
|
1
|
+
{"version":3,"file":"getTableFieldOptions.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/getTableFieldOptions.ts"],"sourcesContent":["import { productTypes } from '@shared/util'\nimport { BuiltInFieldOptions } from '../types'\nimport { FolderType, Status, Tag, TaskType } from '../types/project'\n\ntype Params = {\n users: {\n name: string\n fullName?: string\n }[]\n statuses: Status[]\n folderTypes: FolderType[]\n taskTypes: TaskType[]\n tags: Tag[]\n scopes: string[]\n}\n\nexport const getTableFieldOptions = ({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n scopes,\n}: Params): BuiltInFieldOptions => ({\n assignee: users.map(({ name, fullName }) => ({\n value: name,\n label: fullName || name,\n icon: `/api/users/${name}/avatar`,\n })),\n status: statuses\n .filter((status) => !status.scope || scopes.some((s) => status.scope?.includes(s)))\n .map(({ name, color, icon, scope }) => ({\n value: name,\n label: name,\n color,\n icon,\n scope,\n })),\n tag: tags.map(({ name, color }) => ({ value: name, label: name, color })),\n folderType: folderTypes.map(({ name, icon }) => ({ value: name, label: name, icon })),\n taskType: taskTypes.map(({ name, icon }) => ({ value: name, label: name, icon })),\n productType: Object.entries(productTypes).map(([key, value]) => ({\n value: key,\n label: value.name,\n icon: value.icon,\n })),\n})\n"],"names":[],"mappings":";;;;AAgBO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAAoC;AAAA,EAClC,UAAU,MAAM,IAAI,CAAC,EAAE,MAAM,gBAAgB;AAAA,IAC3C,OAAO;AAAA,IACP,OAAO,YAAY;AAAA,IACnB,MAAM,cAAc,IAAI;AAAA,EAAA,EACxB;AAAA,EACF,QAAQ,SACL,OAAO,CAAC,WAAW,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,MAAM;;AAAA,wBAAO,UAAP,mBAAc,SAAS;AAAA,GAAE,CAAC,EACjF,IAAI,CAAC,EAAE,MAAM,OAAO,MAAM,aAAa;AAAA,IACtC,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA;AAAA,EACJ,KAAK,KAAK,IAAI,CAAC,EAAE,MAAM,MAAA,OAAa,EAAE,OAAO,MAAM,OAAO,MAAM,MAAQ,EAAA;AAAA,EACxE,YAAY,YAAY,IAAI,CAAC,EAAE,MAAM,KAAA,OAAY,EAAE,OAAO,MAAM,OAAO,MAAM,KAAO,EAAA;AAAA,EACpF,UAAU,UAAU,IAAI,CAAC,EAAE,MAAM,KAAA,OAAY,EAAE,OAAO,MAAM,OAAO,MAAM,KAAO,EAAA;AAAA,EAChF,aAAa,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IAC/D,OAAO;AAAA,IACP,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,EAAA,EACZ;AACJ;"}
|
|
@@ -4,7 +4,7 @@ const jsxRuntime = require("../../../../../_virtual/jsx-runtime.cjs.js");
|
|
|
4
4
|
const ayonReactComponents = require("@ynput/ayon-react-components");
|
|
5
5
|
const styled = require("styled-components");
|
|
6
6
|
const Expander = styled(ayonReactComponents.Button)`
|
|
7
|
-
background-color: unset;
|
|
7
|
+
background-color: unset !important;
|
|
8
8
|
padding: 2px !important;
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityNameWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Button","theme","jsx","jsxs","Icon"],"mappings":";;;;;AAGA,MAAM,WAAW,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,yBAAyB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUtC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BC,0BAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,2DACG,wBACE,EAAA,UAAA;AAAA,IAAA,gBACC,SAAS,WACPC,2BAAA,kBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAClB,cAAI,EAAE,QAAQ;AAEZ,4BAAgB,EAAE;AAAA,UAAA,OACb;AAEU,2BAAA;AAAA,UAAA;AAAA,QAEnB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC,IAECA,iDAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,IACHA,2BAAA,kBAAA,IAAA,sBAAA,EAAqB,OAAO,EAAE,QAAQ,OAAO,KAAK,GAAA,GACjD,UAAAA,2BAAAA,kBAAAA,IAAC,uBACC,EAAA,UAAAC,2BAAAA,kBAAAA,KAAC,eACE,EAAA,UAAA;AAAA,MAAQ,QAAAD,2BAAA,kBAAA,IAACE,4BAAK,KAAY,CAAA;AAAA,wDAC1B,mBACE,EAAA,UAAA;AAAA,QAAA,QAASF,2BAAA,kBAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAK,MAAA;AAAA,QACrCA,2BAAA,kBAAA,IAAA,QAAA,EAAK,WAAU,SAAS,mBAAS,KAAK,CAAA;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
|
|
1
|
+
{"version":3,"file":"EntityNameWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset !important;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Button","theme","jsx","jsxs","Icon"],"mappings":";;;;;AAGA,MAAM,WAAW,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,yBAAyB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUtC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BC,0BAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,2DACG,wBACE,EAAA,UAAA;AAAA,IAAA,gBACC,SAAS,WACPC,2BAAA,kBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAClB,cAAI,EAAE,QAAQ;AAEZ,4BAAgB,EAAE;AAAA,UAAA,OACb;AAEU,2BAAA;AAAA,UAAA;AAAA,QAEnB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC,IAECA,iDAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,IACHA,2BAAA,kBAAA,IAAA,sBAAA,EAAqB,OAAO,EAAE,QAAQ,OAAO,KAAK,GAAA,GACjD,UAAAA,2BAAAA,kBAAAA,IAAC,uBACC,EAAA,UAAAC,2BAAAA,kBAAAA,KAAC,eACE,EAAA,UAAA;AAAA,MAAQ,QAAAD,2BAAA,kBAAA,IAACE,4BAAK,KAAY,CAAA;AAAA,wDAC1B,mBACE,EAAA,UAAA;AAAA,QAAA,QAASF,2BAAA,kBAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAK,MAAA;AAAA,QACrCA,2BAAA,kBAAA,IAAA,QAAA,EAAK,WAAU,SAAS,mBAAS,KAAK,CAAA;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
|
|
@@ -2,7 +2,7 @@ import { j as jsxRuntimeExports } from "../../../../../_virtual/jsx-runtime.es.j
|
|
|
2
2
|
import { Button, theme, Icon } from "@ynput/ayon-react-components";
|
|
3
3
|
import styled from "styled-components";
|
|
4
4
|
const Expander = styled(Button)`
|
|
5
|
-
background-color: unset;
|
|
5
|
+
background-color: unset !important;
|
|
6
6
|
padding: 2px !important;
|
|
7
7
|
cursor: pointer;
|
|
8
8
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityNameWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["jsx","jsxs"],"mappings":";;;AAGA,MAAM,WAAW,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,yBAAyB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUtC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3B,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,gDACG,wBACE,EAAA,UAAA;AAAA,IAAA,gBACC,SAAS,WACPA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAClB,cAAI,EAAE,QAAQ;AAEZ,4BAAgB,EAAE;AAAA,UAAA,OACb;AAEU,2BAAA;AAAA,UAAA;AAAA,QAEnB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC,IAECA,sCAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,IACHA,kCAAA,IAAA,sBAAA,EAAqB,OAAO,EAAE,QAAQ,OAAO,KAAK,GAAA,GACjD,UAAAA,kCAAAA,IAAC,uBACC,EAAA,UAAAC,kCAAAA,KAAC,eACE,EAAA,UAAA;AAAA,MAAQ,QAAAD,kCAAA,IAAC,QAAK,KAAY,CAAA;AAAA,6CAC1B,mBACE,EAAA,UAAA;AAAA,QAAA,QAASA,kCAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAK,MAAA;AAAA,QACrCA,kCAAA,IAAA,QAAA,EAAK,WAAU,SAAS,mBAAS,KAAK,CAAA;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"EntityNameWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset !important;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["jsx","jsxs"],"mappings":";;;AAGA,MAAM,WAAW,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,yBAAyB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUtC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3B,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,MAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,gDACG,wBACE,EAAA,UAAA;AAAA,IAAA,gBACC,SAAS,WACPA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AAClB,cAAI,EAAE,QAAQ;AAEZ,4BAAgB,EAAE;AAAA,UAAA,OACb;AAEU,2BAAA;AAAA,UAAA;AAAA,QAEnB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC,IAECA,sCAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,IACHA,kCAAA,IAAA,sBAAA,EAAqB,OAAO,EAAE,QAAQ,OAAO,KAAK,GAAA,GACjD,UAAAA,kCAAAA,IAAC,uBACC,EAAA,UAAAC,kCAAAA,KAAC,eACE,EAAA,UAAA;AAAA,MAAQ,QAAAD,kCAAA,IAAC,QAAK,KAAY,CAAA;AAAA,6CAC1B,mBACE,EAAA,UAAA;AAAA,QAAA,QAASA,kCAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAK,MAAA;AAAA,QACrCA,kCAAA,IAAA,QAAA,EAAK,WAAU,SAAS,mBAAS,KAAK,CAAA;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -4,7 +4,7 @@ const jsxRuntime = require("../../../../../_virtual/jsx-runtime.cjs.js");
|
|
|
4
4
|
const ayonReactComponents = require("@ynput/ayon-react-components");
|
|
5
5
|
const styled = require("styled-components");
|
|
6
6
|
const Expander = styled(ayonReactComponents.Button)`
|
|
7
|
-
background-color: unset;
|
|
7
|
+
background-color: unset !important;
|
|
8
8
|
padding: 2px !important;
|
|
9
9
|
cursor: pointer;
|
|
10
10
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupHeaderWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledGroupHeader = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\nconst StyledImg = styled.img`\n width: 24px;\n height: 24px;\n border-radius: 12px;\n object-fit: cover;\n`\n\nconst Count = styled.span`\n color: var(--md-sys-color-outline);\n`\n\ntype GroupHeaderProps = {\n id: string\n label: string\n name: string\n icon?: string | null\n img?: string | null\n color?: string | null\n count?: number\n isExpanded: boolean\n isEmpty?: boolean\n toggleExpanded: () => void\n}\n\nexport const GroupHeaderWidget = ({\n id,\n label,\n name,\n icon,\n img,\n count,\n color,\n isExpanded,\n isEmpty,\n toggleExpanded,\n}: GroupHeaderProps) => {\n return (\n <StyledGroupHeader id={id}>\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n toggleExpanded()\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n <StyledContentWrapper>\n <StyledContentAbsolute>\n <StyledContent>\n {img && <StyledImg src={img} alt={name} className=\"img\" />}\n {icon && <Icon icon={icon} style={{ color: color || undefined }} />}\n <StyledTextContent style={{ color: color || undefined }}>\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n {/* {count === undefined && <Count>{count}</Count>} */}\n {isEmpty && <Count>(Empty)</Count>}\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledGroupHeader>\n )\n}\n"],"names":["Button","theme","jsxs","jsx","Icon"],"mappings":";;;;;AAGA,MAAM,WAAW,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUjC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BC,0BAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAiBd,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEpB,SAAAC,kDAAC,qBAAkB,IACjB,UAAA;AAAA,IAAAC,2BAAA,kBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AACH,yBAAA;AAAA,QACjB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC;AAAA,IACCA,2BAAAA,kBAAAA,IAAA,sBAAA,EACC,UAACA,iDAAA,uBAAA,EACC,4DAAC,eACE,EAAA,UAAA;AAAA,MAAA,wDAAQ,WAAU,EAAA,KAAK,KAAK,KAAK,MAAM,WAAU,OAAM;AAAA,MACvD,yDAASC,oBAAK,MAAA,EAAA,MAAY,OAAO,EAAE,OAAO,SAAS,OAAA,GAAa;AAAA,MAChED,2BAAA,kBAAA,IAAA,mBAAA,EAAkB,OAAO,EAAE,OAAO,SAAS,OAAA,GAC1C,UAAAA,2BAAA,kBAAA,IAAC,QAAK,EAAA,WAAU,SAAS,UAAA,SAAS,KAAK,CAAA,GACzC;AAAA,MAEC,WAAYA,2BAAAA,kBAAAA,IAAA,OAAA,EAAM,UAAO,UAAA,CAAA;AAAA,IAAA,EAC5B,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
|
|
1
|
+
{"version":3,"file":"GroupHeaderWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n background-color: unset !important;\n padding: 2px !important;\n cursor: pointer;\n`\n\nconst StyledGroupHeader = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\nconst StyledImg = styled.img`\n width: 24px;\n height: 24px;\n border-radius: 12px;\n object-fit: cover;\n`\n\nconst Count = styled.span`\n color: var(--md-sys-color-outline);\n`\n\ntype GroupHeaderProps = {\n id: string\n label: string\n name: string\n icon?: string | null\n img?: string | null\n color?: string | null\n count?: number\n isExpanded: boolean\n isEmpty?: boolean\n toggleExpanded: () => void\n}\n\nexport const GroupHeaderWidget = ({\n id,\n label,\n name,\n icon,\n img,\n count,\n color,\n isExpanded,\n isEmpty,\n toggleExpanded,\n}: GroupHeaderProps) => {\n return (\n <StyledGroupHeader id={id}>\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n toggleExpanded()\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n <StyledContentWrapper>\n <StyledContentAbsolute>\n <StyledContent>\n {img && <StyledImg src={img} alt={name} className=\"img\" />}\n {icon && <Icon icon={icon} style={{ color: color || undefined }} />}\n <StyledTextContent style={{ color: color || undefined }}>\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n {/* {count === undefined && <Count>{count}</Count>} */}\n {isEmpty && <Count>(Empty)</Count>}\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledGroupHeader>\n )\n}\n"],"names":["Button","theme","jsxs","jsx","Icon"],"mappings":";;;;;AAGA,MAAM,WAAW,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUjC,MAAM,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,MAAM,oBAAoB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BC,0BAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAiBd,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEpB,SAAAC,kDAAC,qBAAkB,IACjB,UAAA;AAAA,IAAAC,2BAAA,kBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,MAAM;AACd,YAAE,gBAAgB;AACH,yBAAA;AAAA,QACjB;AAAA,QACA,WAAU;AAAA,QACV,MAAM,aAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC;AAAA,IACCA,2BAAAA,kBAAAA,IAAA,sBAAA,EACC,UAACA,iDAAA,uBAAA,EACC,4DAAC,eACE,EAAA,UAAA;AAAA,MAAA,wDAAQ,WAAU,EAAA,KAAK,KAAK,KAAK,MAAM,WAAU,OAAM;AAAA,MACvD,yDAASC,oBAAK,MAAA,EAAA,MAAY,OAAO,EAAE,OAAO,SAAS,OAAA,GAAa;AAAA,MAChED,2BAAA,kBAAA,IAAA,mBAAA,EAAkB,OAAO,EAAE,OAAO,SAAS,OAAA,GAC1C,UAAAA,2BAAA,kBAAA,IAAC,QAAK,EAAA,WAAU,SAAS,UAAA,SAAS,KAAK,CAAA,GACzC;AAAA,MAEC,WAAYA,2BAAAA,kBAAAA,IAAA,OAAA,EAAM,UAAO,UAAA,CAAA;AAAA,IAAA,EAC5B,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
|
|
@@ -2,7 +2,7 @@ import { j as jsxRuntimeExports } from "../../../../../_virtual/jsx-runtime.es.j
|
|
|
2
2
|
import { Button, theme, Icon } from "@ynput/ayon-react-components";
|
|
3
3
|
import styled from "styled-components";
|
|
4
4
|
const Expander = styled(Button)`
|
|
5
|
-
background-color: unset;
|
|
5
|
+
background-color: unset !important;
|
|
6
6
|
padding: 2px !important;
|
|
7
7
|
cursor: pointer;
|
|
8
8
|
`;
|