From 7d805521da7d2c147e391c4c1964bcd95e9b35ea Mon Sep 17 00:00:00 2001 From: Guillaume LADORME Date: Wed, 23 Sep 2026 23:30:04 +0200 Subject: [PATCH] [ENHANCEMENT] Scope datasource select items query by the store project Signed-off-by: Guillaume LADORME --- dashboards/src/context/DatasourceStoreProvider.tsx | 2 ++ plugin-system/src/runtime/datasources.ts | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dashboards/src/context/DatasourceStoreProvider.tsx b/dashboards/src/context/DatasourceStoreProvider.tsx index 9f36ee5d..df2fb07c 100644 --- a/dashboards/src/context/DatasourceStoreProvider.tsx +++ b/dashboards/src/context/DatasourceStoreProvider.tsx @@ -236,6 +236,7 @@ export function DatasourceStoreProvider(props: DatasourceStoreProviderProps): Re const ctxValue: DatasourceStore = useMemo( () => ({ + project, getDatasource, getDatasourceClient, getDatasourceSpecSync, @@ -246,6 +247,7 @@ export function DatasourceStoreProvider(props: DatasourceStoreProviderProps): Re listDatasourceSelectItems, }) as DatasourceStore, [ + project, getDatasource, getDatasourceClient, getDatasourceSpecSync, diff --git a/plugin-system/src/runtime/datasources.ts b/plugin-system/src/runtime/datasources.ts index 53ca31c4..c30454bb 100644 --- a/plugin-system/src/runtime/datasources.ts +++ b/plugin-system/src/runtime/datasources.ts @@ -17,6 +17,11 @@ import { useQuery } from '@tanstack/react-query'; import { createContext, useContext } from 'react'; export interface DatasourceStore { + /** + * Project whose datasources are listed alongside global ones. Undefined for a global-only scope. + */ + project?: string; + // TODO: Do we even need this method? getDatasource(selector: DatasourceSelector): Promise; @@ -101,10 +106,11 @@ export function useListDatasourceSelectItems( datasourcePluginName: string, project?: string, ): UseQueryResult { - const { listDatasourceSelectItems } = useDatasourceStore(); + const store = useDatasourceStore(); + // Results are scoped by the store's project; the explicit parameter only remains as a fallback discriminator. return useQuery({ - queryKey: ['listDatasourceSelectItems', datasourcePluginName, project], - queryFn: () => listDatasourceSelectItems(datasourcePluginName), + queryKey: ['listDatasourceSelectItems', datasourcePluginName, store.project ?? project], + queryFn: () => store.listDatasourceSelectItems(datasourcePluginName), }); }