From 56469a29db576eacb73fbdffbd7cff0fbc6b1311 Mon Sep 17 00:00:00 2001 From: Alexander Polyankin <alexander.polyankin@metabase.com> Date: Fri, 5 Apr 2024 18:30:21 +0300 Subject: [PATCH] Fix loading metadata for models (#41074) --- .../metabase/query_builder/containers/test-utils.tsx | 2 ++ frontend/src/metabase/questions/actions.ts | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/frontend/src/metabase/query_builder/containers/test-utils.tsx b/frontend/src/metabase/query_builder/containers/test-utils.tsx index d620e342194..04e45e34c5f 100644 --- a/frontend/src/metabase/query_builder/containers/test-utils.tsx +++ b/frontend/src/metabase/query_builder/containers/test-utils.tsx @@ -285,6 +285,8 @@ export const setup = async ({ }, ); + await waitForLoadingRequests(getState); + await waitForLoaderToBeRemoved(); await waitForLoadingRequests(getState); return { diff --git a/frontend/src/metabase/questions/actions.ts b/frontend/src/metabase/questions/actions.ts index 359bc84d2d0..4931a356a40 100644 --- a/frontend/src/metabase/questions/actions.ts +++ b/frontend/src/metabase/questions/actions.ts @@ -2,6 +2,7 @@ import { loadMetadataForDependentItems } from "metabase/redux/metadata"; import { getMetadata } from "metabase/selectors/metadata"; import * as Lib from "metabase-lib"; import Question from "metabase-lib/v1/Question"; +import { getQuestionVirtualTableId } from "metabase-lib/v1/metadata/utils/saved-questions"; import type { Card } from "metabase-types/api"; import type { Dispatch, GetState } from "metabase-types/store"; @@ -13,11 +14,16 @@ export const loadMetadataForCard = (card: Card, options?: LoadMetadataOptions) => async (dispatch: Dispatch, getState: GetState) => { const question = new Question(card, getMetadata(getState())); - const dependencies = Lib.dependentMetadata(question.query()); + const loadAdhocMetadata = + question.isSaved() && question.type() !== "question"; + const dependencies = [...Lib.dependentMetadata(question.query())]; + if (loadAdhocMetadata) { + const tableId = getQuestionVirtualTableId(question.id()); + dependencies.push({ id: tableId, type: "table" }); + } await dispatch(loadMetadataForDependentItems(dependencies, options)); - // metadata for an ad-hoc question based on this question - if (question.isSaved() && question.type() !== "question") { + if (loadAdhocMetadata) { const questionWithMetadata = new Question(card, getMetadata(getState())); const adhocQuestion = questionWithMetadata.composeQuestionAdhoc(); const adhocDependencies = Lib.dependentMetadata(adhocQuestion.query()); -- GitLab