@ynput/ayon-frontend-shared 0.2.20 → 0.2.21
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 +4 -3
- package/dist/DetailsPanel.cjs.js.map +1 -1
- package/dist/DetailsPanel.es.js +4 -3
- package/dist/DetailsPanel.es.js.map +1 -1
- package/dist/ProjectTreeTable.cjs.js +2 -2
- package/dist/ProjectTreeTable.es.js +2 -2
- package/dist/Views.cjs.js +41 -0
- package/dist/Views.cjs.js.map +1 -0
- package/dist/Views.es.js +41 -0
- package/dist/Views.es.js.map +1 -0
- package/dist/_virtual/index.cjs5.js +5 -3
- package/dist/_virtual/index.cjs5.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +3 -5
- package/dist/_virtual/index.cjs6.js.map +1 -1
- package/dist/_virtual/index.es5.js +5 -2
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +2 -5
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/api.cjs.js +6 -1
- package/dist/api.cjs.js.map +1 -1
- package/dist/api.es.js +8 -3
- package/dist/components.cjs.js +0 -17
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +1 -18
- package/dist/components.es.js.map +1 -1
- package/dist/index.cjs.js +4 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +4 -3
- package/dist/index.es.js.map +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/shared/node_modules/uuid/dist/esm-browser/native.cjs.js +3 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.es.js +3 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/native.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.cjs.js +2 -2
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.es.js +2 -2
- package/dist/shared/node_modules/uuid/dist/esm-browser/rng.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.cjs.js +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.es.js +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/stringify.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.cjs.js +41 -58
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.es.js +41 -57
- package/dist/shared/node_modules/uuid/dist/esm-browser/v1.es.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.cjs.js +1 -5
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.cjs.js.map +1 -1
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.es.js +1 -5
- package/dist/shared/node_modules/uuid/dist/esm-browser/v4.es.js.map +1 -1
- package/dist/shared/src/api/generated/views.cjs.js +30 -2
- package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/views.es.js +30 -2
- package/dist/shared/src/api/generated/views.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js +29 -5
- package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.es.js +29 -5
- package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.cjs.js +169 -9
- package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.es.js +170 -10
- package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +4 -3
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +4 -3
- package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -0
- package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js +1 -0
- package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +4 -3
- package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +4 -3
- package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +4 -3
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +4 -3
- package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +4 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +4 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +4 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +4 -3
- package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +4 -3
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +4 -3
- package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +4 -3
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +4 -3
- package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +4 -3
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +4 -3
- package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +4 -3
- package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +4 -3
- package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +4 -3
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +4 -3
- package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +4 -3
- package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +10 -11
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +10 -11
- package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +4 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +4 -3
- package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +69 -21
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +69 -21
- package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.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 +0 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +0 -5
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +3 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +3 -5
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useProjectTableModules.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +18 -10
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +18 -10
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js +106 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map +1 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js +106 -0
- package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js.map +1 -0
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +4 -3
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +4 -3
- package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js +49 -0
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js +49 -0
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewItem/ViewItem.styled.cjs.js +24 -12
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewItem/ViewItem.styled.es.js +24 -12
- package/dist/shared/src/containers/Views/ViewItem/ViewItem.styled.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/Views.cjs.js +6 -10
- package/dist/shared/src/containers/Views/Views.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/Views.es.js +7 -11
- package/dist/shared/src/containers/Views/Views.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/Views.styled.cjs.js +4 -3
- package/dist/shared/src/containers/Views/Views.styled.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/Views.styled.es.js +4 -3
- package/dist/shared/src/containers/Views/Views.styled.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewsButton/ViewsButton.cjs.js +11 -2
- package/dist/shared/src/containers/Views/ViewsButton/ViewsButton.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewsButton/ViewsButton.es.js +11 -2
- package/dist/shared/src/containers/Views/ViewsButton/ViewsButton.es.js.map +1 -0
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js +4 -0
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js +5 -0
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.es.js.map +1 -0
- package/dist/shared/src/{components/Views/context/ViewsContext.cjs.js → containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js} +67 -58
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -0
- package/dist/shared/src/{components/Views/context/ViewsContext.es.js → containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js} +66 -57
- package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.cjs.js +1 -0
- package/dist/shared/src/containers/Views/ViewsMenu/ViewsMenu.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.es.js +1 -0
- package/dist/shared/src/containers/Views/ViewsMenu/ViewsMenu.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.styled.cjs.js.map +1 -1
- package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +105 -0
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +105 -0
- package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -0
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +211 -0
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js +211 -0
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js +52 -0
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js +52 -0
- package/dist/shared/src/containers/Views/hooks/pages/useListsViewSettings.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +69 -0
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +69 -0
- package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.cjs.js +44 -0
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.es.js +44 -0
- package/dist/shared/src/containers/Views/hooks/pages/useTaskProgressViewSettings.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/hooks/useBuildViewMenuItems.cjs.js +58 -32
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/hooks/useBuildViewMenuItems.es.js +59 -33
- package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +33 -0
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +33 -0
- package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -0
- package/dist/shared/src/{components/Views/ViewForm/ViewFormContainer.cjs.js → containers/Views/hooks/useSelectedView.cjs.js} +33 -114
- package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +108 -0
- package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.cjs.js +19 -0
- package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.es.js +19 -0
- package/dist/shared/src/containers/Views/hooks/useViewSettingsChanged.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +143 -0
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +143 -0
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.cjs.js +67 -0
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.es.js +67 -0
- package/dist/shared/src/containers/Views/hooks/useViewsShortcuts.es.js.map +1 -0
- package/dist/shared/src/containers/Views/utils/generateWorkingView.cjs.js +13 -0
- package/dist/shared/src/containers/Views/utils/generateWorkingView.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/utils/generateWorkingView.es.js +13 -0
- package/dist/shared/src/containers/Views/utils/generateWorkingView.es.js.map +1 -0
- package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.cjs.js.map +1 -0
- package/dist/shared/src/containers/Views/utils/getCustomViewsFallback.es.js.map +1 -0
- package/dist/shared/src/{components → containers}/Views/utils/portalUtils.cjs.js +1 -1
- package/dist/shared/src/{components → containers}/Views/utils/portalUtils.cjs.js.map +1 -1
- package/dist/shared/src/{components → containers}/Views/utils/portalUtils.es.js +1 -1
- package/dist/shared/src/{components → containers}/Views/utils/portalUtils.es.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +125 -0
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -0
- package/dist/shared/src/{components/Views/ViewForm/ViewFormContainer.es.js → containers/Views/utils/viewUpdateHelper.es.js} +48 -112
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -0
- package/dist/shared/src/context/PowerpackContext.cjs.js +9 -3
- package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
- package/dist/shared/src/context/PowerpackContext.es.js +9 -3
- package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js +1 -1
- package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js +1 -1
- package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
- package/dist/shared/src/util/columnConfigConverter.cjs.js +116 -0
- package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -0
- package/dist/shared/src/util/columnConfigConverter.es.js +116 -0
- package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -0
- package/dist/types/Views.d.ts +2 -0
- package/dist/types/api/generated/powerPack1.1.1Views.d.ts +25 -0
- package/dist/types/api/generated/views.d.ts +130 -22
- package/dist/types/api/queries/views/getViews.d.ts +161 -22
- package/dist/types/api/queries/views/updateViews.d.ts +500 -13
- package/dist/types/components/index.d.ts +0 -1
- package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +15 -5
- package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsProvider.d.ts +1 -1
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -2
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +2 -4
- package/dist/types/containers/ProjectTreeTable/hooks/index.d.ts +0 -1
- package/dist/types/containers/ProjectTreeTable/hooks/useFetchOverviewData.d.ts +3 -5
- package/dist/types/containers/ProjectTreeTable/hooks/useProjectTableModules.d.ts +2 -5
- package/dist/types/containers/ProjectTreeTable/hooks/useQueryFilters.d.ts +5 -3
- package/dist/types/containers/ProjectTreeTable/types/index.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/types/overviewContext.d.ts +5 -6
- package/dist/types/containers/ProjectTreeTable/utils/index.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/utils/queryFilterToClientFilter.d.ts +24 -0
- package/dist/types/{components → containers}/Views/ViewItem/ViewItem.d.ts +3 -1
- package/dist/types/{components → containers}/Views/ViewItem/ViewItem.styled.d.ts +1 -1
- package/dist/types/containers/Views/Views.d.ts +2 -0
- package/dist/types/containers/Views/ViewsDialogContainer/ViewFormDialogFallback.d.ts +24 -0
- package/dist/types/containers/Views/ViewsDialogContainer/ViewsDialogContainer.d.ts +6 -0
- package/dist/types/{components → containers}/Views/ViewsMenu/ViewsMenu.d.ts +1 -2
- package/dist/types/{components → containers}/Views/ViewsMenuContainer/ViewsMenuContainer.d.ts +1 -1
- package/dist/types/containers/Views/context/ViewsContext.d.ts +46 -0
- package/dist/types/containers/Views/hooks/index.d.ts +5 -0
- package/dist/types/containers/Views/hooks/pages/useListsViewSettings.d.ts +9 -0
- package/dist/types/containers/Views/hooks/pages/useOverviewViewSettings.d.ts +12 -0
- package/dist/types/containers/Views/hooks/pages/useTaskProgressViewSettings.d.ts +10 -0
- package/dist/types/containers/Views/hooks/pages/viewUpdateHelper.d.ts +0 -0
- package/dist/types/containers/Views/hooks/useBuildViewMenuItems.d.ts +22 -0
- package/dist/types/containers/Views/hooks/useOverviewViewSettings.d.ts +0 -0
- package/dist/types/containers/Views/hooks/useSaveViewFromCurrent.d.ts +12 -0
- package/dist/types/containers/Views/hooks/useSelectedView.d.ts +12 -0
- package/dist/types/containers/Views/hooks/useViewSettingsChanged.d.ts +6 -0
- package/dist/types/containers/Views/hooks/useViewsMutations.d.ts +13 -0
- package/dist/types/containers/Views/hooks/useViewsShortcuts.d.ts +13 -0
- package/dist/types/containers/Views/index.d.ts +19 -0
- package/dist/types/containers/Views/utils/generateWorkingView.d.ts +3 -0
- package/dist/types/{components → containers}/Views/utils/getCustomViewsFallback.d.ts +3 -2
- package/dist/types/{components → containers}/Views/utils/portalUtils.d.ts +1 -1
- package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +17 -0
- package/dist/types/containers/index.d.ts +1 -0
- package/dist/types/context/PowerpackContext.d.ts +4 -1
- package/dist/types/util/columnConfigConverter.d.ts +15 -0
- package/dist/types/util/index.d.ts +1 -0
- package/dist/util.cjs.js +3 -0
- package/dist/util.cjs.js.map +1 -1
- package/dist/util.es.js +3 -0
- package/dist/util.es.js.map +1 -1
- package/package.json +6 -1
- package/dist/shared/src/components/Views/ViewForm/ViewForm.cjs.js +0 -164
- package/dist/shared/src/components/Views/ViewForm/ViewForm.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewForm/ViewForm.es.js +0 -164
- package/dist/shared/src/components/Views/ViewForm/ViewForm.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.cjs.js +0 -71
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.es.js +0 -71
- package/dist/shared/src/components/Views/ViewForm/ViewForm.styled.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewForm/ViewFormContainer.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewItem/ViewItem.cjs.js +0 -36
- package/dist/shared/src/components/Views/ViewItem/ViewItem.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewItem/ViewItem.es.js +0 -36
- package/dist/shared/src/components/Views/ViewItem/ViewItem.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewItem/ViewItem.styled.es.js.map +0 -1
- package/dist/shared/src/components/Views/Views.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/Views.es.js.map +0 -1
- package/dist/shared/src/components/Views/Views.styled.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/Views.styled.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsButton/ViewsButton.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsMenu/ViewsMenu.es.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +0 -132
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +0 -132
- package/dist/shared/src/components/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +0 -1
- package/dist/shared/src/components/Views/context/ViewsContext.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/context/ViewsContext.es.js.map +0 -1
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/hooks/useBuildViewMenuItems.es.js.map +0 -1
- package/dist/shared/src/components/Views/utils/generatePersonalView.cjs.js +0 -13
- package/dist/shared/src/components/Views/utils/generatePersonalView.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/utils/generatePersonalView.es.js +0 -13
- package/dist/shared/src/components/Views/utils/generatePersonalView.es.js.map +0 -1
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.cjs.js.map +0 -1
- package/dist/shared/src/components/Views/utils/getCustomViewsFallback.es.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js +0 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.cjs.js.map +0 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js +0 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnSorting.es.js.map +0 -1
- package/dist/types/components/Views/ViewForm/ViewForm.d.ts +0 -14
- package/dist/types/components/Views/ViewForm/ViewForm.styled.d.ts +0 -9
- package/dist/types/components/Views/ViewForm/ViewFormContainer.d.ts +0 -15
- package/dist/types/components/Views/Views.d.ts +0 -8
- package/dist/types/components/Views/context/ViewsContext.d.ts +0 -31
- package/dist/types/components/Views/hooks/useBuildViewMenuItems.d.ts +0 -14
- package/dist/types/components/Views/index.d.ts +0 -11
- package/dist/types/components/Views/utils/generatePersonalView.d.ts +0 -3
- package/dist/types/containers/ProjectTreeTable/hooks/useColumnSorting.d.ts +0 -12
- /package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.styled.cjs.js +0 -0
- /package/dist/shared/src/{components → containers}/Views/ViewsMenu/ViewsMenu.styled.es.js +0 -0
- /package/dist/shared/src/{components → containers}/Views/utils/getCustomViewsFallback.cjs.js +0 -0
- /package/dist/shared/src/{components → containers}/Views/utils/getCustomViewsFallback.es.js +0 -0
- /package/dist/types/{components → containers}/Views/Views.styled.d.ts +0 -0
- /package/dist/types/{components → containers}/Views/ViewsButton/ViewsButton.d.ts +0 -0
- /package/dist/types/{components → containers}/Views/ViewsMenu/ViewsMenu.styled.d.ts +0 -0
|
@@ -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 QueryFilter,\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 { 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 queryFilters: {\n filter: QueryFilter | undefined\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 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: queryFilters.filter,\n groupBy,\n groupPageCounts,\n }) ?? []\n : []\n }, [groupBy, taskGroups, groupPageCounts, groupByDataType, queryFilters.filter, 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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"}
|
|
@@ -94,7 +94,7 @@ require("custom-protocol-check");
|
|
|
94
94
|
const GroupSettingsFallback = require("../components/GroupSettingsFallback.cjs.js");
|
|
95
95
|
const getGroupQueriesFallback = (params) => [];
|
|
96
96
|
const useProjectTableModules = () => {
|
|
97
|
-
const minVersion = "1.
|
|
97
|
+
const minVersion = "1.1.1-dev";
|
|
98
98
|
const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule.useLoadModule({
|
|
99
99
|
addon: "powerpack",
|
|
100
100
|
remote: "slicer",
|
|
@@ -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 {
|
|
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, QueryFilter } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: QueryFilter | undefined\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\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.1.1-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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,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;;"}
|
|
@@ -92,7 +92,7 @@ import "custom-protocol-check";
|
|
|
92
92
|
import { GroupSettingsFallback } from "../components/GroupSettingsFallback.es.js";
|
|
93
93
|
const getGroupQueriesFallback = (params) => [];
|
|
94
94
|
const useProjectTableModules = () => {
|
|
95
|
-
const minVersion = "1.
|
|
95
|
+
const minVersion = "1.1.1-dev";
|
|
96
96
|
const [GroupSettings, { outdated, isLoading: isLoadingSettings }] = useLoadModule({
|
|
97
97
|
addon: "powerpack",
|
|
98
98
|
remote: "slicer",
|
|
@@ -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 {
|
|
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, QueryFilter } from '@shared/api'\nimport { TableGroupBy } from '../context'\n\ntype GetGroupQueriesParams = {\n taskGroups: EntityGroup[]\n filters: QueryFilter | undefined\n groupBy: TableGroupBy\n groupPageCounts: Record<string, number>\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.1.1-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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,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;"}
|
|
@@ -109,25 +109,33 @@ require("custom-protocol-check");
|
|
|
109
109
|
require("../components/GroupSettingsFallback.cjs.js");
|
|
110
110
|
require("../context/ProjectDataContext.cjs.js");
|
|
111
111
|
const useQueryFilters = ({
|
|
112
|
-
|
|
112
|
+
queryFilters,
|
|
113
113
|
sliceFilter
|
|
114
114
|
}) => {
|
|
115
115
|
return React.useMemo(() => {
|
|
116
|
-
var _a, _b, _c, _d;
|
|
117
|
-
let
|
|
116
|
+
var _a, _b, _c, _d, _e, _f;
|
|
117
|
+
let combinedQueryFilter = queryFilters;
|
|
118
118
|
if ((_a = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _a.length) {
|
|
119
|
-
|
|
119
|
+
const sliceQueryFilter = clientFilterToQueryFilter.clientFilterToQueryFilter([sliceFilter]);
|
|
120
|
+
if ((_b = sliceQueryFilter.conditions) == null ? void 0 : _b.length) {
|
|
121
|
+
const existingConditions = (combinedQueryFilter == null ? void 0 : combinedQueryFilter.conditions) || [];
|
|
122
|
+
combinedQueryFilter = {
|
|
123
|
+
conditions: [...existingConditions, ...sliceQueryFilter.conditions],
|
|
124
|
+
operator: "and"
|
|
125
|
+
};
|
|
126
|
+
}
|
|
120
127
|
}
|
|
121
|
-
|
|
122
|
-
const queryFilterString =
|
|
123
|
-
const fuzzySearchFilter = (_d =
|
|
128
|
+
let displayQueryFilter = queryFilters;
|
|
129
|
+
const queryFilterString = ((_c = combinedQueryFilter == null ? void 0 : combinedQueryFilter.conditions) == null ? void 0 : _c.length) ? JSON.stringify(combinedQueryFilter) : "";
|
|
130
|
+
const fuzzySearchFilter = ((_d = sliceFilter == null ? void 0 : sliceFilter.id) == null ? void 0 : _d.includes("text")) ? (_f = (_e = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _e[0]) == null ? void 0 : _f.id : void 0;
|
|
124
131
|
return {
|
|
125
132
|
filterString: queryFilterString,
|
|
126
|
-
filter:
|
|
133
|
+
filter: combinedQueryFilter,
|
|
127
134
|
search: fuzzySearchFilter,
|
|
128
|
-
combinedFilters
|
|
135
|
+
combinedFilters: combinedQueryFilter,
|
|
136
|
+
displayFilters: displayQueryFilter
|
|
129
137
|
};
|
|
130
|
-
}, [
|
|
138
|
+
}, [queryFilters, sliceFilter]);
|
|
131
139
|
};
|
|
132
140
|
exports.useQueryFilters = useQueryFilters;
|
|
133
141
|
//# sourceMappingURL=useQueryFilters.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryFilters.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '../utils'\n\ninterface UseQueryFiltersProps {\n
|
|
1
|
+
{"version":3,"file":"useQueryFilters.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '../utils'\nimport { QueryFilter, QueryCondition } from '../types/operations'\n\ninterface UseQueryFiltersProps {\n queryFilters: QueryFilter\n sliceFilter?: Filter | null\n}\n\ninterface QueryFiltersResult {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n combinedFilters: QueryFilter // For data fetching (includes slice filters)\n displayFilters: QueryFilter // For SearchFilterWrapper (excludes slice filters, except hierarchy)\n}\n\nexport const useQueryFilters = ({\n queryFilters,\n sliceFilter,\n}: UseQueryFiltersProps): QueryFiltersResult => {\n return useMemo(() => {\n let combinedQueryFilter = queryFilters\n\n // If there's a slice filter, convert it and merge it with the query filters\n if (sliceFilter?.values?.length) {\n const sliceQueryFilter = clientFilterToQueryFilter([sliceFilter])\n\n // Merge the slice filter with existing query filters for data fetching\n if (sliceQueryFilter.conditions?.length) {\n const existingConditions = combinedQueryFilter?.conditions || []\n combinedQueryFilter = {\n conditions: [...existingConditions, ...sliceQueryFilter.conditions],\n operator: 'and',\n }\n }\n }\n\n // Create display filters (for SearchFilterWrapper)\n // This excludes slice filters, except for hierarchy when slice type changes\n let displayQueryFilter = queryFilters\n\n const queryFilterString = combinedQueryFilter?.conditions?.length\n ? JSON.stringify(combinedQueryFilter)\n : ''\n\n // For text search, we'll need to extract it from the slice filter if it contains text\n const fuzzySearchFilter = sliceFilter?.id?.includes('text')\n ? sliceFilter?.values?.[0]?.id\n : undefined\n\n return {\n filterString: queryFilterString,\n filter: combinedQueryFilter,\n search: fuzzySearchFilter,\n combinedFilters: combinedQueryFilter,\n displayFilters: displayQueryFilter,\n }\n }, [queryFilters, sliceFilter])\n}\n"],"names":["useMemo","clientFilterToQueryFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MAAgD;AAC9C,SAAOA,cAAQ,MAAM;;AACnB,QAAI,sBAAsB;AAGtB,SAAA,gDAAa,WAAb,mBAAqB,QAAQ;AAC/B,YAAM,mBAAmBC,0BAAAA,0BAA0B,CAAC,WAAW,CAAC;AAG5D,WAAA,sBAAiB,eAAjB,mBAA6B,QAAQ;AACjC,cAAA,sBAAqB,2DAAqB,eAAc,CAAC;AACzC,8BAAA;AAAA,UACpB,YAAY,CAAC,GAAG,oBAAoB,GAAG,iBAAiB,UAAU;AAAA,UAClE,UAAU;AAAA,QACZ;AAAA,MAAA;AAAA,IACF;AAKF,QAAI,qBAAqB;AAEzB,UAAM,sBAAoB,gEAAqB,eAArB,mBAAiC,UACvD,KAAK,UAAU,mBAAmB,IAClC;AAGE,UAAA,sBAAoB,gDAAa,OAAb,mBAAiB,SAAS,YAChD,sDAAa,WAAb,mBAAsB,OAAtB,mBAA0B,KAC1B;AAEG,WAAA;AAAA,MACL,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,IAClB;AAAA,EAAA,GACC,CAAC,cAAc,WAAW,CAAC;AAChC;;"}
|
|
@@ -107,25 +107,33 @@ import "custom-protocol-check";
|
|
|
107
107
|
import "../components/GroupSettingsFallback.es.js";
|
|
108
108
|
import "../context/ProjectDataContext.es.js";
|
|
109
109
|
const useQueryFilters = ({
|
|
110
|
-
|
|
110
|
+
queryFilters,
|
|
111
111
|
sliceFilter
|
|
112
112
|
}) => {
|
|
113
113
|
return useMemo(() => {
|
|
114
|
-
var _a, _b, _c, _d;
|
|
115
|
-
let
|
|
114
|
+
var _a, _b, _c, _d, _e, _f;
|
|
115
|
+
let combinedQueryFilter = queryFilters;
|
|
116
116
|
if ((_a = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _a.length) {
|
|
117
|
-
|
|
117
|
+
const sliceQueryFilter = clientFilterToQueryFilter([sliceFilter]);
|
|
118
|
+
if ((_b = sliceQueryFilter.conditions) == null ? void 0 : _b.length) {
|
|
119
|
+
const existingConditions = (combinedQueryFilter == null ? void 0 : combinedQueryFilter.conditions) || [];
|
|
120
|
+
combinedQueryFilter = {
|
|
121
|
+
conditions: [...existingConditions, ...sliceQueryFilter.conditions],
|
|
122
|
+
operator: "and"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
118
125
|
}
|
|
119
|
-
|
|
120
|
-
const queryFilterString =
|
|
121
|
-
const fuzzySearchFilter = (_d =
|
|
126
|
+
let displayQueryFilter = queryFilters;
|
|
127
|
+
const queryFilterString = ((_c = combinedQueryFilter == null ? void 0 : combinedQueryFilter.conditions) == null ? void 0 : _c.length) ? JSON.stringify(combinedQueryFilter) : "";
|
|
128
|
+
const fuzzySearchFilter = ((_d = sliceFilter == null ? void 0 : sliceFilter.id) == null ? void 0 : _d.includes("text")) ? (_f = (_e = sliceFilter == null ? void 0 : sliceFilter.values) == null ? void 0 : _e[0]) == null ? void 0 : _f.id : void 0;
|
|
122
129
|
return {
|
|
123
130
|
filterString: queryFilterString,
|
|
124
|
-
filter:
|
|
131
|
+
filter: combinedQueryFilter,
|
|
125
132
|
search: fuzzySearchFilter,
|
|
126
|
-
combinedFilters
|
|
133
|
+
combinedFilters: combinedQueryFilter,
|
|
134
|
+
displayFilters: displayQueryFilter
|
|
127
135
|
};
|
|
128
|
-
}, [
|
|
136
|
+
}, [queryFilters, sliceFilter]);
|
|
129
137
|
};
|
|
130
138
|
export {
|
|
131
139
|
useQueryFilters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryFilters.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '../utils'\n\ninterface UseQueryFiltersProps {\n
|
|
1
|
+
{"version":3,"file":"useQueryFilters.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/hooks/useQueryFilters.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { Filter } from '@ynput/ayon-react-components'\nimport { type QueryTasksFoldersApiArg } from '@shared/api'\nimport { clientFilterToQueryFilter } from '../utils'\nimport { QueryFilter, QueryCondition } from '../types/operations'\n\ninterface UseQueryFiltersProps {\n queryFilters: QueryFilter\n sliceFilter?: Filter | null\n}\n\ninterface QueryFiltersResult {\n filter: QueryTasksFoldersApiArg['tasksFoldersQuery']['filter']\n filterString?: string\n search: QueryTasksFoldersApiArg['tasksFoldersQuery']['search']\n combinedFilters: QueryFilter // For data fetching (includes slice filters)\n displayFilters: QueryFilter // For SearchFilterWrapper (excludes slice filters, except hierarchy)\n}\n\nexport const useQueryFilters = ({\n queryFilters,\n sliceFilter,\n}: UseQueryFiltersProps): QueryFiltersResult => {\n return useMemo(() => {\n let combinedQueryFilter = queryFilters\n\n // If there's a slice filter, convert it and merge it with the query filters\n if (sliceFilter?.values?.length) {\n const sliceQueryFilter = clientFilterToQueryFilter([sliceFilter])\n\n // Merge the slice filter with existing query filters for data fetching\n if (sliceQueryFilter.conditions?.length) {\n const existingConditions = combinedQueryFilter?.conditions || []\n combinedQueryFilter = {\n conditions: [...existingConditions, ...sliceQueryFilter.conditions],\n operator: 'and',\n }\n }\n }\n\n // Create display filters (for SearchFilterWrapper)\n // This excludes slice filters, except for hierarchy when slice type changes\n let displayQueryFilter = queryFilters\n\n const queryFilterString = combinedQueryFilter?.conditions?.length\n ? JSON.stringify(combinedQueryFilter)\n : ''\n\n // For text search, we'll need to extract it from the slice filter if it contains text\n const fuzzySearchFilter = sliceFilter?.id?.includes('text')\n ? sliceFilter?.values?.[0]?.id\n : undefined\n\n return {\n filterString: queryFilterString,\n filter: combinedQueryFilter,\n search: fuzzySearchFilter,\n combinedFilters: combinedQueryFilter,\n displayFilters: displayQueryFilter,\n }\n }, [queryFilters, sliceFilter])\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MAAgD;AAC9C,SAAO,QAAQ,MAAM;;AACnB,QAAI,sBAAsB;AAGtB,SAAA,gDAAa,WAAb,mBAAqB,QAAQ;AAC/B,YAAM,mBAAmB,0BAA0B,CAAC,WAAW,CAAC;AAG5D,WAAA,sBAAiB,eAAjB,mBAA6B,QAAQ;AACjC,cAAA,sBAAqB,2DAAqB,eAAc,CAAC;AACzC,8BAAA;AAAA,UACpB,YAAY,CAAC,GAAG,oBAAoB,GAAG,iBAAiB,UAAU;AAAA,UAClE,UAAU;AAAA,QACZ;AAAA,MAAA;AAAA,IACF;AAKF,QAAI,qBAAqB;AAEzB,UAAM,sBAAoB,gEAAqB,eAArB,mBAAiC,UACvD,KAAK,UAAU,mBAAmB,IAClC;AAGE,UAAA,sBAAoB,gDAAa,OAAb,mBAAiB,SAAS,YAChD,sDAAa,WAAb,mBAAsB,OAAtB,mBAA0B,KAC1B;AAEG,WAAA;AAAA,MACL,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,IAClB;AAAA,EAAA,GACC,CAAC,cAAc,WAAW,CAAC;AAChC;"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const queryFilterToClientFilter = (queryFilter, filterOptions) => {
|
|
4
|
+
if (!(queryFilter == null ? void 0 : queryFilter.conditions) || queryFilter.conditions.length === 0) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
const filters = [];
|
|
8
|
+
const processedConditions = /* @__PURE__ */ new Set();
|
|
9
|
+
queryFilter.conditions.forEach((condition) => {
|
|
10
|
+
if ("key" in condition) {
|
|
11
|
+
const filter = convertConditionToFilter(condition, filterOptions, processedConditions);
|
|
12
|
+
if (filter) {
|
|
13
|
+
filters.push(filter);
|
|
14
|
+
}
|
|
15
|
+
} else {
|
|
16
|
+
const nestedFilters = queryFilterToClientFilter(condition, filterOptions);
|
|
17
|
+
filters.push(...nestedFilters);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return filters;
|
|
21
|
+
};
|
|
22
|
+
const convertConditionToFilter = (condition, filterOptions, processedConditions) => {
|
|
23
|
+
const { key, value, operator } = condition;
|
|
24
|
+
const filterOption = findFilterOption(key, filterOptions);
|
|
25
|
+
if (!filterOption) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const conditionKey = `${key}_${operator}_${JSON.stringify(value)}`;
|
|
29
|
+
if (processedConditions.has(conditionKey)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
processedConditions.add(conditionKey);
|
|
33
|
+
const filterValues = convertConditionValueToFilterValues(value, operator, filterOption);
|
|
34
|
+
const inverted = isInvertedOperator(operator, filterOption.type);
|
|
35
|
+
const filterOperator = getFilterOperator(operator, filterOption.type);
|
|
36
|
+
const filter = {
|
|
37
|
+
id: filterOption.id,
|
|
38
|
+
type: filterOption.type,
|
|
39
|
+
label: filterOption.label,
|
|
40
|
+
inverted,
|
|
41
|
+
operator: filterOperator,
|
|
42
|
+
icon: filterOption.icon,
|
|
43
|
+
values: filterValues,
|
|
44
|
+
isCustom: filterOption.allowsCustomValues,
|
|
45
|
+
singleSelect: filterOption.singleSelect
|
|
46
|
+
};
|
|
47
|
+
return filter;
|
|
48
|
+
};
|
|
49
|
+
const findFilterOption = (key, filterOptions) => {
|
|
50
|
+
let option = filterOptions.find((opt) => opt.id === key);
|
|
51
|
+
if (option) return option;
|
|
52
|
+
option = filterOptions.find(
|
|
53
|
+
(opt) => opt.id.endsWith(key) || opt.id.replace(/^[^.]*\./, "") === key || opt.id.split("_").pop() === key
|
|
54
|
+
);
|
|
55
|
+
if (option) return option;
|
|
56
|
+
option = filterOptions.find((opt) => {
|
|
57
|
+
var _a;
|
|
58
|
+
return ((_a = opt.label) == null ? void 0 : _a.toLowerCase()) === key.toLowerCase();
|
|
59
|
+
});
|
|
60
|
+
return option;
|
|
61
|
+
};
|
|
62
|
+
const convertConditionValueToFilterValues = (value, operator, filterOption) => {
|
|
63
|
+
if (operator === "isnull" || operator === "notnull") {
|
|
64
|
+
return operator === "isnull" ? [{ id: "noValue", label: "No Value" }] : [{ id: "hasValue", label: "Has Value" }];
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
67
|
+
if (operator === "eq") {
|
|
68
|
+
return [{ id: "noValue", label: "No Value" }];
|
|
69
|
+
} else if (operator === "ne") {
|
|
70
|
+
return [{ id: "hasValue", label: "Has Value" }];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (value === void 0 || value === null) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const values = Array.isArray(value) ? value : [value];
|
|
77
|
+
return values.map((val) => {
|
|
78
|
+
var _a;
|
|
79
|
+
const stringValue = String(val);
|
|
80
|
+
const existingValue = (_a = filterOption.values) == null ? void 0 : _a.find((v) => v.id === stringValue);
|
|
81
|
+
if (existingValue) {
|
|
82
|
+
return existingValue;
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
id: stringValue,
|
|
86
|
+
label: stringValue,
|
|
87
|
+
isCustom: true
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
const isInvertedOperator = (operator, type) => {
|
|
92
|
+
const invertedOperators = ["ne", "notin", "excludes", "excludesall", "excludesany", "notnull"];
|
|
93
|
+
return operator ? invertedOperators.includes(operator) : false;
|
|
94
|
+
};
|
|
95
|
+
const getFilterOperator = (operator, type) => {
|
|
96
|
+
if (type == null ? void 0 : type.startsWith("list_of_")) {
|
|
97
|
+
if (operator === "includesall" || operator === "excludesall") {
|
|
98
|
+
return "AND";
|
|
99
|
+
}
|
|
100
|
+
return "OR";
|
|
101
|
+
}
|
|
102
|
+
return "OR";
|
|
103
|
+
};
|
|
104
|
+
exports.default = queryFilterToClientFilter;
|
|
105
|
+
exports.queryFilterToClientFilter = queryFilterToClientFilter;
|
|
106
|
+
//# sourceMappingURL=queryFilterToClientFilter.cjs.js.map
|
package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryFilterToClientFilter.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.ts"],"sourcesContent":["import { Filter, FilterValue } from '@ynput/ayon-react-components'\nimport { QueryFilter, QueryCondition } from '../types/operations'\n\n// Option interface for filter options (from useBuildFilterOptions)\ninterface Option {\n id: string\n type?: string\n label: string\n icon?: string | null\n img?: string | null\n inverted?: boolean\n operator?: 'AND' | 'OR'\n values?: FilterValue[]\n allowsCustomValues?: boolean\n allowHasValue?: boolean\n allowNoValue?: boolean\n allowExcludes?: boolean\n operatorChangeable?: boolean\n singleSelect?: boolean\n}\n\n/**\n * Converts a QueryFilter back to Filter[] objects that can be consumed by the SearchFilter component\n * This requires the filter options to properly reconstruct the Filter objects with all their metadata\n */\nexport const queryFilterToClientFilter = (\n queryFilter: QueryFilter | undefined,\n filterOptions: Option[],\n): Filter[] => {\n if (!queryFilter?.conditions || queryFilter.conditions.length === 0) {\n return []\n }\n\n const filters: Filter[] = []\n const processedConditions = new Set<string>()\n\n // Process each condition in the query filter\n queryFilter.conditions.forEach((condition) => {\n if ('key' in condition) {\n // This is a QueryCondition\n const filter = convertConditionToFilter(condition, filterOptions, processedConditions)\n if (filter) {\n filters.push(filter)\n }\n } else {\n // This is a nested QueryFilter - recursively process it\n const nestedFilters = queryFilterToClientFilter(condition, filterOptions)\n filters.push(...nestedFilters)\n }\n })\n\n return filters\n}\n\nconst convertConditionToFilter = (\n condition: QueryCondition,\n filterOptions: Option[],\n processedConditions: Set<string>,\n): Filter | null => {\n const { key, value, operator } = condition\n\n // Find the matching filter option\n const filterOption = findFilterOption(key, filterOptions)\n if (!filterOption) {\n return null\n }\n\n // Create a unique key for this condition to avoid duplicates\n const conditionKey = `${key}_${operator}_${JSON.stringify(value)}`\n if (processedConditions.has(conditionKey)) {\n return null\n }\n processedConditions.add(conditionKey)\n\n // Convert the condition values to FilterValue objects\n const filterValues = convertConditionValueToFilterValues(value, operator, filterOption)\n\n // Determine if the filter is inverted based on the operator\n const inverted = isInvertedOperator(operator, filterOption.type)\n\n // Determine the filter operator (AND/OR)\n const filterOperator = getFilterOperator(operator, filterOption.type)\n\n const filter: Filter = {\n id: filterOption.id,\n type: filterOption.type as Filter['type'],\n label: filterOption.label,\n inverted,\n operator: filterOperator,\n icon: filterOption.icon,\n values: filterValues,\n isCustom: filterOption.allowsCustomValues,\n singleSelect: filterOption.singleSelect,\n }\n\n return filter\n}\n\nconst findFilterOption = (key: string, filterOptions: Option[]): Option | undefined => {\n // Try exact match first\n let option = filterOptions.find((opt) => opt.id === key)\n if (option) return option\n\n // Try to find by the base key (without prefixes)\n option = filterOptions.find(\n (opt) =>\n opt.id.endsWith(key) ||\n opt.id.replace(/^[^.]*\\./, '') === key ||\n opt.id.split('_').pop() === key,\n )\n if (option) return option\n\n // Try to find by label match\n option = filterOptions.find((opt) => opt.label?.toLowerCase() === key.toLowerCase())\n\n return option\n}\n\nconst convertConditionValueToFilterValues = (\n value: QueryCondition['value'],\n operator: QueryCondition['operator'],\n filterOption: Option,\n): FilterValue[] => {\n // Handle special operators for null/empty checks\n if (operator === 'isnull' || operator === 'notnull') {\n return operator === 'isnull'\n ? [{ id: 'noValue', label: 'No Value' }]\n : [{ id: 'hasValue', label: 'Has Value' }]\n }\n\n // Handle empty array cases - these represent \"No Value\" and \"Has Value\" conditions\n if (Array.isArray(value) && value.length === 0) {\n if (operator === 'eq') {\n // Empty array with 'eq' operator means \"No Value\"\n return [{ id: 'noValue', label: 'No Value' }]\n } else if (operator === 'ne') {\n // Empty array with 'ne' operator means \"Has Value\"\n return [{ id: 'hasValue', label: 'Has Value' }]\n }\n }\n\n if (value === undefined || value === null) {\n return []\n }\n\n // Convert value(s) to FilterValue objects\n const values = Array.isArray(value) ? value : [value]\n\n return values.map((val) => {\n const stringValue = String(val)\n\n // Try to find existing option value with metadata\n const existingValue = filterOption.values?.find((v: FilterValue) => v.id === stringValue)\n if (existingValue) {\n return existingValue\n }\n\n // Create a basic FilterValue if no existing option found\n return {\n id: stringValue,\n label: stringValue,\n isCustom: true,\n }\n })\n}\n\nconst isInvertedOperator = (operator: QueryCondition['operator'], type?: string): boolean => {\n const invertedOperators = ['ne', 'notin', 'excludes', 'excludesall', 'excludesany', 'notnull']\n return operator ? invertedOperators.includes(operator) : false\n}\n\nconst getFilterOperator = (operator: QueryCondition['operator'], type?: string): 'AND' | 'OR' => {\n // For list types, determine AND/OR based on the operator\n if (type?.startsWith('list_of_')) {\n if (operator === 'includesall' || operator === 'excludesall') {\n return 'AND'\n }\n return 'OR'\n }\n\n // Default to OR for most cases\n return 'OR'\n}\n\nexport default queryFilterToClientFilter\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const queryFilterToClientFilter = (queryFilter, filterOptions) => {
|
|
2
|
+
if (!(queryFilter == null ? void 0 : queryFilter.conditions) || queryFilter.conditions.length === 0) {
|
|
3
|
+
return [];
|
|
4
|
+
}
|
|
5
|
+
const filters = [];
|
|
6
|
+
const processedConditions = /* @__PURE__ */ new Set();
|
|
7
|
+
queryFilter.conditions.forEach((condition) => {
|
|
8
|
+
if ("key" in condition) {
|
|
9
|
+
const filter = convertConditionToFilter(condition, filterOptions, processedConditions);
|
|
10
|
+
if (filter) {
|
|
11
|
+
filters.push(filter);
|
|
12
|
+
}
|
|
13
|
+
} else {
|
|
14
|
+
const nestedFilters = queryFilterToClientFilter(condition, filterOptions);
|
|
15
|
+
filters.push(...nestedFilters);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return filters;
|
|
19
|
+
};
|
|
20
|
+
const convertConditionToFilter = (condition, filterOptions, processedConditions) => {
|
|
21
|
+
const { key, value, operator } = condition;
|
|
22
|
+
const filterOption = findFilterOption(key, filterOptions);
|
|
23
|
+
if (!filterOption) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const conditionKey = `${key}_${operator}_${JSON.stringify(value)}`;
|
|
27
|
+
if (processedConditions.has(conditionKey)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
processedConditions.add(conditionKey);
|
|
31
|
+
const filterValues = convertConditionValueToFilterValues(value, operator, filterOption);
|
|
32
|
+
const inverted = isInvertedOperator(operator, filterOption.type);
|
|
33
|
+
const filterOperator = getFilterOperator(operator, filterOption.type);
|
|
34
|
+
const filter = {
|
|
35
|
+
id: filterOption.id,
|
|
36
|
+
type: filterOption.type,
|
|
37
|
+
label: filterOption.label,
|
|
38
|
+
inverted,
|
|
39
|
+
operator: filterOperator,
|
|
40
|
+
icon: filterOption.icon,
|
|
41
|
+
values: filterValues,
|
|
42
|
+
isCustom: filterOption.allowsCustomValues,
|
|
43
|
+
singleSelect: filterOption.singleSelect
|
|
44
|
+
};
|
|
45
|
+
return filter;
|
|
46
|
+
};
|
|
47
|
+
const findFilterOption = (key, filterOptions) => {
|
|
48
|
+
let option = filterOptions.find((opt) => opt.id === key);
|
|
49
|
+
if (option) return option;
|
|
50
|
+
option = filterOptions.find(
|
|
51
|
+
(opt) => opt.id.endsWith(key) || opt.id.replace(/^[^.]*\./, "") === key || opt.id.split("_").pop() === key
|
|
52
|
+
);
|
|
53
|
+
if (option) return option;
|
|
54
|
+
option = filterOptions.find((opt) => {
|
|
55
|
+
var _a;
|
|
56
|
+
return ((_a = opt.label) == null ? void 0 : _a.toLowerCase()) === key.toLowerCase();
|
|
57
|
+
});
|
|
58
|
+
return option;
|
|
59
|
+
};
|
|
60
|
+
const convertConditionValueToFilterValues = (value, operator, filterOption) => {
|
|
61
|
+
if (operator === "isnull" || operator === "notnull") {
|
|
62
|
+
return operator === "isnull" ? [{ id: "noValue", label: "No Value" }] : [{ id: "hasValue", label: "Has Value" }];
|
|
63
|
+
}
|
|
64
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
65
|
+
if (operator === "eq") {
|
|
66
|
+
return [{ id: "noValue", label: "No Value" }];
|
|
67
|
+
} else if (operator === "ne") {
|
|
68
|
+
return [{ id: "hasValue", label: "Has Value" }];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (value === void 0 || value === null) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
const values = Array.isArray(value) ? value : [value];
|
|
75
|
+
return values.map((val) => {
|
|
76
|
+
var _a;
|
|
77
|
+
const stringValue = String(val);
|
|
78
|
+
const existingValue = (_a = filterOption.values) == null ? void 0 : _a.find((v) => v.id === stringValue);
|
|
79
|
+
if (existingValue) {
|
|
80
|
+
return existingValue;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
id: stringValue,
|
|
84
|
+
label: stringValue,
|
|
85
|
+
isCustom: true
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const isInvertedOperator = (operator, type) => {
|
|
90
|
+
const invertedOperators = ["ne", "notin", "excludes", "excludesall", "excludesany", "notnull"];
|
|
91
|
+
return operator ? invertedOperators.includes(operator) : false;
|
|
92
|
+
};
|
|
93
|
+
const getFilterOperator = (operator, type) => {
|
|
94
|
+
if (type == null ? void 0 : type.startsWith("list_of_")) {
|
|
95
|
+
if (operator === "includesall" || operator === "excludesall") {
|
|
96
|
+
return "AND";
|
|
97
|
+
}
|
|
98
|
+
return "OR";
|
|
99
|
+
}
|
|
100
|
+
return "OR";
|
|
101
|
+
};
|
|
102
|
+
export {
|
|
103
|
+
queryFilterToClientFilter as default,
|
|
104
|
+
queryFilterToClientFilter
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=queryFilterToClientFilter.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryFilterToClientFilter.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.ts"],"sourcesContent":["import { Filter, FilterValue } from '@ynput/ayon-react-components'\nimport { QueryFilter, QueryCondition } from '../types/operations'\n\n// Option interface for filter options (from useBuildFilterOptions)\ninterface Option {\n id: string\n type?: string\n label: string\n icon?: string | null\n img?: string | null\n inverted?: boolean\n operator?: 'AND' | 'OR'\n values?: FilterValue[]\n allowsCustomValues?: boolean\n allowHasValue?: boolean\n allowNoValue?: boolean\n allowExcludes?: boolean\n operatorChangeable?: boolean\n singleSelect?: boolean\n}\n\n/**\n * Converts a QueryFilter back to Filter[] objects that can be consumed by the SearchFilter component\n * This requires the filter options to properly reconstruct the Filter objects with all their metadata\n */\nexport const queryFilterToClientFilter = (\n queryFilter: QueryFilter | undefined,\n filterOptions: Option[],\n): Filter[] => {\n if (!queryFilter?.conditions || queryFilter.conditions.length === 0) {\n return []\n }\n\n const filters: Filter[] = []\n const processedConditions = new Set<string>()\n\n // Process each condition in the query filter\n queryFilter.conditions.forEach((condition) => {\n if ('key' in condition) {\n // This is a QueryCondition\n const filter = convertConditionToFilter(condition, filterOptions, processedConditions)\n if (filter) {\n filters.push(filter)\n }\n } else {\n // This is a nested QueryFilter - recursively process it\n const nestedFilters = queryFilterToClientFilter(condition, filterOptions)\n filters.push(...nestedFilters)\n }\n })\n\n return filters\n}\n\nconst convertConditionToFilter = (\n condition: QueryCondition,\n filterOptions: Option[],\n processedConditions: Set<string>,\n): Filter | null => {\n const { key, value, operator } = condition\n\n // Find the matching filter option\n const filterOption = findFilterOption(key, filterOptions)\n if (!filterOption) {\n return null\n }\n\n // Create a unique key for this condition to avoid duplicates\n const conditionKey = `${key}_${operator}_${JSON.stringify(value)}`\n if (processedConditions.has(conditionKey)) {\n return null\n }\n processedConditions.add(conditionKey)\n\n // Convert the condition values to FilterValue objects\n const filterValues = convertConditionValueToFilterValues(value, operator, filterOption)\n\n // Determine if the filter is inverted based on the operator\n const inverted = isInvertedOperator(operator, filterOption.type)\n\n // Determine the filter operator (AND/OR)\n const filterOperator = getFilterOperator(operator, filterOption.type)\n\n const filter: Filter = {\n id: filterOption.id,\n type: filterOption.type as Filter['type'],\n label: filterOption.label,\n inverted,\n operator: filterOperator,\n icon: filterOption.icon,\n values: filterValues,\n isCustom: filterOption.allowsCustomValues,\n singleSelect: filterOption.singleSelect,\n }\n\n return filter\n}\n\nconst findFilterOption = (key: string, filterOptions: Option[]): Option | undefined => {\n // Try exact match first\n let option = filterOptions.find((opt) => opt.id === key)\n if (option) return option\n\n // Try to find by the base key (without prefixes)\n option = filterOptions.find(\n (opt) =>\n opt.id.endsWith(key) ||\n opt.id.replace(/^[^.]*\\./, '') === key ||\n opt.id.split('_').pop() === key,\n )\n if (option) return option\n\n // Try to find by label match\n option = filterOptions.find((opt) => opt.label?.toLowerCase() === key.toLowerCase())\n\n return option\n}\n\nconst convertConditionValueToFilterValues = (\n value: QueryCondition['value'],\n operator: QueryCondition['operator'],\n filterOption: Option,\n): FilterValue[] => {\n // Handle special operators for null/empty checks\n if (operator === 'isnull' || operator === 'notnull') {\n return operator === 'isnull'\n ? [{ id: 'noValue', label: 'No Value' }]\n : [{ id: 'hasValue', label: 'Has Value' }]\n }\n\n // Handle empty array cases - these represent \"No Value\" and \"Has Value\" conditions\n if (Array.isArray(value) && value.length === 0) {\n if (operator === 'eq') {\n // Empty array with 'eq' operator means \"No Value\"\n return [{ id: 'noValue', label: 'No Value' }]\n } else if (operator === 'ne') {\n // Empty array with 'ne' operator means \"Has Value\"\n return [{ id: 'hasValue', label: 'Has Value' }]\n }\n }\n\n if (value === undefined || value === null) {\n return []\n }\n\n // Convert value(s) to FilterValue objects\n const values = Array.isArray(value) ? value : [value]\n\n return values.map((val) => {\n const stringValue = String(val)\n\n // Try to find existing option value with metadata\n const existingValue = filterOption.values?.find((v: FilterValue) => v.id === stringValue)\n if (existingValue) {\n return existingValue\n }\n\n // Create a basic FilterValue if no existing option found\n return {\n id: stringValue,\n label: stringValue,\n isCustom: true,\n }\n })\n}\n\nconst isInvertedOperator = (operator: QueryCondition['operator'], type?: string): boolean => {\n const invertedOperators = ['ne', 'notin', 'excludes', 'excludesall', 'excludesany', 'notnull']\n return operator ? invertedOperators.includes(operator) : false\n}\n\nconst getFilterOperator = (operator: QueryCondition['operator'], type?: string): 'AND' | 'OR' => {\n // For list types, determine AND/OR based on the operator\n if (type?.startsWith('list_of_')) {\n if (operator === 'includesall' || operator === 'excludesall') {\n return 'AND'\n }\n return 'OR'\n }\n\n // Default to OR for most cases\n return 'OR'\n}\n\nexport default queryFilterToClientFilter\n"],"names":[],"mappings":"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"}
|
|
@@ -177,6 +177,10 @@ require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js
|
|
|
177
177
|
require("../Actions/Actions.styled.cjs.js");
|
|
178
178
|
require("../Actions/ActionsDropdown/ActionsDropdown.cjs.js");
|
|
179
179
|
require("../Actions/ActionIcon.cjs.js");
|
|
180
|
+
require("../Views/context/ViewsContext.cjs.js");
|
|
181
|
+
require("../Views/Views.styled.cjs.js");
|
|
182
|
+
require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");
|
|
183
|
+
require("../Views/ViewsMenu/ViewsMenu.cjs.js");
|
|
180
184
|
require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");
|
|
181
185
|
require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");
|
|
182
186
|
require("../../components/EntityPath/EntityPath.styled.cjs.js");
|
|
@@ -198,9 +202,6 @@ require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js"
|
|
|
198
202
|
require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");
|
|
199
203
|
require("../../components/Feedback/FeedbackContext.cjs.js");
|
|
200
204
|
require("../../components/Feedback/SupportBubble.cjs.js");
|
|
201
|
-
require("../../components/Views/context/ViewsContext.cjs.js");
|
|
202
|
-
require("../../components/Views/Views.styled.cjs.js");
|
|
203
|
-
require("../../components/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");
|
|
204
205
|
const columns = [
|
|
205
206
|
{
|
|
206
207
|
field: "name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepresentationsList.cjs.js","sources":["../../../../../src/containers/RepresentationsList/RepresentationsList.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { TablePanel } from '@ynput/ayon-react-components'\n\nimport { TreeTable } from 'primereact/treetable'\nimport { Column } from 'primereact/column'\n\nimport { groupResult } from '@shared/util'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { DetailsDialog } from '@shared/components'\nimport versionsToRepresentations from './versionsToRepresentations'\nimport { DetailsPanelEntityData } from '@shared/api'\n\nconst columns = [\n {\n field: 'name',\n header: 'Name',\n width: 90,\n expander: true,\n },\n {\n field: 'folderName',\n header: 'Folder',\n width: 130,\n },\n {\n field: 'productName',\n header: 'Product',\n width: 130,\n },\n {\n field: 'Product type',\n header: 'productType',\n width: 110,\n },\n]\n\ntype Props = {\n entities: DetailsPanelEntityData[]\n}\n\nexport const RepresentationsList = ({ entities = [] }: Props) => {\n // merge all entities data into one array of entities\n const representations = useMemo(() => versionsToRepresentations(entities) || [], [entities])\n\n const [showDetail, setShowDetail] = useState<false | string>(false)\n const showDetailProjectName = representations.find((rep) => rep.id === showDetail)?.projectName\n\n const [selected, setSelected] = useState<string[]>([])\n\n const data = useMemo(() => {\n // @ts-expect-error - groupResult is not typed\n return groupResult(representations, 'name')\n }, [representations])\n\n const onRepSelectionChange = (entityId: string) => {\n // set focused state\n setSelected([entityId])\n }\n\n const onRowClick = (e: any) => {\n onRepSelectionChange(e.node.data.id)\n }\n\n const ctxMenuItems = (id: string) => [\n {\n label: 'Representation detail',\n command: () => setShowDetail(id),\n icon: 'database',\n },\n ]\n\n const [ctxMenuShow] = useCreateContextMenu([])\n\n const handleContextMenu = (e: any) => {\n const id = e.node.data.id\n\n if (id) {\n // update focused representations\n onRepSelectionChange(id)\n // open context menu\n ctxMenuShow(e.originalEvent, ctxMenuItems(id))\n }\n }\n\n return (\n <>\n <TablePanel>\n <TreeTable\n scrollable\n scrollHeight=\"100%\"\n value={data}\n emptyMessage=\"No representation found\"\n selectionMode=\"single\"\n selectionKeys={selected[0]}\n onRowClick={onRowClick}\n onContextMenu={handleContextMenu}\n >\n {columns.map((col) => {\n return (\n <Column\n key={col.field}\n field={col.field}\n header={col.header}\n expander={col.expander}\n style={{ width: col.width }}\n />\n )\n })}\n </TreeTable>\n </TablePanel>\n\n {showDetail && (\n <DetailsDialog\n projectName={showDetailProjectName}\n entityType={'representation'}\n entityIds={[showDetail]}\n visible={!!showDetail}\n onHide={() => setShowDetail(false)}\n />\n )}\n </>\n )\n}\n"],"names":["useMemo","useState","groupResult","useCreateContextMenu","jsxs","Fragment","jsx","TablePanel","TreeTable","Column","DetailsDialog"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RepresentationsList.cjs.js","sources":["../../../../../src/containers/RepresentationsList/RepresentationsList.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { TablePanel } from '@ynput/ayon-react-components'\n\nimport { TreeTable } from 'primereact/treetable'\nimport { Column } from 'primereact/column'\n\nimport { groupResult } from '@shared/util'\nimport { useCreateContextMenu } from '@shared/containers/ContextMenu'\nimport { DetailsDialog } from '@shared/components'\nimport versionsToRepresentations from './versionsToRepresentations'\nimport { DetailsPanelEntityData } from '@shared/api'\n\nconst columns = [\n {\n field: 'name',\n header: 'Name',\n width: 90,\n expander: true,\n },\n {\n field: 'folderName',\n header: 'Folder',\n width: 130,\n },\n {\n field: 'productName',\n header: 'Product',\n width: 130,\n },\n {\n field: 'Product type',\n header: 'productType',\n width: 110,\n },\n]\n\ntype Props = {\n entities: DetailsPanelEntityData[]\n}\n\nexport const RepresentationsList = ({ entities = [] }: Props) => {\n // merge all entities data into one array of entities\n const representations = useMemo(() => versionsToRepresentations(entities) || [], [entities])\n\n const [showDetail, setShowDetail] = useState<false | string>(false)\n const showDetailProjectName = representations.find((rep) => rep.id === showDetail)?.projectName\n\n const [selected, setSelected] = useState<string[]>([])\n\n const data = useMemo(() => {\n // @ts-expect-error - groupResult is not typed\n return groupResult(representations, 'name')\n }, [representations])\n\n const onRepSelectionChange = (entityId: string) => {\n // set focused state\n setSelected([entityId])\n }\n\n const onRowClick = (e: any) => {\n onRepSelectionChange(e.node.data.id)\n }\n\n const ctxMenuItems = (id: string) => [\n {\n label: 'Representation detail',\n command: () => setShowDetail(id),\n icon: 'database',\n },\n ]\n\n const [ctxMenuShow] = useCreateContextMenu([])\n\n const handleContextMenu = (e: any) => {\n const id = e.node.data.id\n\n if (id) {\n // update focused representations\n onRepSelectionChange(id)\n // open context menu\n ctxMenuShow(e.originalEvent, ctxMenuItems(id))\n }\n }\n\n return (\n <>\n <TablePanel>\n <TreeTable\n scrollable\n scrollHeight=\"100%\"\n value={data}\n emptyMessage=\"No representation found\"\n selectionMode=\"single\"\n selectionKeys={selected[0]}\n onRowClick={onRowClick}\n onContextMenu={handleContextMenu}\n >\n {columns.map((col) => {\n return (\n <Column\n key={col.field}\n field={col.field}\n header={col.header}\n expander={col.expander}\n style={{ width: col.width }}\n />\n )\n })}\n </TreeTable>\n </TablePanel>\n\n {showDetail && (\n <DetailsDialog\n projectName={showDetailProjectName}\n entityType={'representation'}\n entityIds={[showDetail]}\n visible={!!showDetail}\n onHide={() => setShowDetail(false)}\n />\n )}\n </>\n )\n}\n"],"names":["useMemo","useState","groupResult","useCreateContextMenu","jsxs","Fragment","jsx","TablePanel","TreeTable","Column","DetailsDialog"],"mappings":"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"}
|