From 615b86c074e24c376b08412e68b620cd1aa10e49 Mon Sep 17 00:00:00 2001 From: Anton Kulyk <kuliks.anton@gmail.com> Date: Mon, 21 Nov 2022 12:32:09 +0000 Subject: [PATCH] Add dashboard state to metabase-types/store (#26621) * Add `DashboardState` to `metabase-types/store` * Add `createMockDashboardState` * Use no dashboard state by default --- .../src/metabase-types/store/dashboard.ts | 60 +++++++++++++++++++ frontend/src/metabase-types/store/index.ts | 1 + .../metabase-types/store/mocks/dashboard.ts | 28 +++++++++ .../src/metabase-types/store/mocks/index.ts | 1 + .../src/metabase-types/store/mocks/state.ts | 2 + frontend/src/metabase-types/store/state.ts | 2 + 6 files changed, 94 insertions(+) create mode 100644 frontend/src/metabase-types/store/dashboard.ts create mode 100644 frontend/src/metabase-types/store/mocks/dashboard.ts diff --git a/frontend/src/metabase-types/store/dashboard.ts b/frontend/src/metabase-types/store/dashboard.ts new file mode 100644 index 00000000000..41baf765405 --- /dev/null +++ b/frontend/src/metabase-types/store/dashboard.ts @@ -0,0 +1,60 @@ +import type { + Dashboard, + DashboardId, + DashboardOrderedCard, + DashCardId, + DashCardDataMap, + ParameterId, +} from "metabase-types/api"; +import { ParameterValueOrArray } from "metabase-types/types/Parameter"; + +export type DashboardSidebarName = + | "addQuestion" + | "addActionButton" + | "addActionForm" + | "clickBehavior" + | "editParameter" + | "sharing" + | "info"; + +type ParameterValueCacheKey = string; + +export interface DashboardState { + dashboardId: DashboardId | null; + dashboards: Record<DashboardId, Dashboard>; + + dashcards: Record<DashCardId, DashboardOrderedCard>; + dashcardData: DashCardDataMap; + + parameterValues: Record<ParameterId, ParameterValueOrArray>; + parameterValuesSearchCache: Record< + ParameterValueCacheKey, + { + has_more_values: boolean; + results: ParameterValueOrArray[]; + } + >; + + loadingDashCards: { + dashcardIds: DashCardId[]; + loadingIds: DashCardId[]; + loadingStatus: "idle" | "running" | "complete"; + startTime: number | null; + }; + loadingControls: { + documentTitle?: string; + showLoadCompleteFavicon?: boolean; + }; + + isEditing: Dashboard | null; + isAddParameterPopoverOpen: boolean; + + slowCards: Record<DashCardId, unknown>; + + sidebar: { + name?: DashboardSidebarName; + props: Record<string, unknown>; + }; + + titleTemplateChange: string | null; +} diff --git a/frontend/src/metabase-types/store/index.ts b/frontend/src/metabase-types/store/index.ts index fe6a10c8255..9c88498f5ea 100644 --- a/frontend/src/metabase-types/store/index.ts +++ b/frontend/src/metabase-types/store/index.ts @@ -1,5 +1,6 @@ export * from "./admin"; export * from "./app"; +export * from "./dashboard"; export * from "./embed"; export * from "./entities"; export * from "./forms"; diff --git a/frontend/src/metabase-types/store/mocks/dashboard.ts b/frontend/src/metabase-types/store/mocks/dashboard.ts new file mode 100644 index 00000000000..a40bb9ec374 --- /dev/null +++ b/frontend/src/metabase-types/store/mocks/dashboard.ts @@ -0,0 +1,28 @@ +import { createMockDashboard } from "metabase-types/api/mocks"; +import type { DashboardState } from "metabase-types/store"; + +export const createMockDashboardState = ( + opts: Partial<DashboardState> = {}, +): DashboardState => ({ + dashboardId: null, + dashboards: {}, + dashcards: {}, + dashcardData: {}, + parameterValues: {}, + parameterValuesSearchCache: {}, + loadingDashCards: { + dashcardIds: [], + loadingIds: [], + loadingStatus: "idle", + startTime: null, + }, + loadingControls: {}, + isEditing: null, + isAddParameterPopoverOpen: false, + slowCards: {}, + sidebar: { + props: {}, + }, + titleTemplateChange: null, + ...opts, +}); diff --git a/frontend/src/metabase-types/store/mocks/index.ts b/frontend/src/metabase-types/store/mocks/index.ts index b3215315b9a..f1aee2f690c 100644 --- a/frontend/src/metabase-types/store/mocks/index.ts +++ b/frontend/src/metabase-types/store/mocks/index.ts @@ -1,5 +1,6 @@ export * from "./admin"; export * from "./app"; +export * from "./dashboard"; export * from "./embed"; export * from "./entities"; export * from "./forms"; diff --git a/frontend/src/metabase-types/store/mocks/state.ts b/frontend/src/metabase-types/store/mocks/state.ts index e7a05e80c7c..3b1ebc433a0 100644 --- a/frontend/src/metabase-types/store/mocks/state.ts +++ b/frontend/src/metabase-types/store/mocks/state.ts @@ -3,6 +3,7 @@ import { createMockUser } from "metabase-types/api/mocks"; import { createMockAdminState, createMockAppState, + createMockDashboardState, createMockEmbedState, createMockEntitiesState, createMockFormState, @@ -15,6 +16,7 @@ export const createMockState = (opts?: Partial<State>): State => ({ admin: createMockAdminState(), app: createMockAppState(), currentUser: createMockUser(), + dashboard: createMockDashboardState(), embed: createMockEmbedState(), entities: createMockEntitiesState(), form: createMockFormState(), diff --git a/frontend/src/metabase-types/store/state.ts b/frontend/src/metabase-types/store/state.ts index c0d0ee77e44..d03c1017334 100644 --- a/frontend/src/metabase-types/store/state.ts +++ b/frontend/src/metabase-types/store/state.ts @@ -1,6 +1,7 @@ import { User } from "metabase-types/api"; import { AdminState } from "./admin"; import { AppState } from "./app"; +import { DashboardState } from "./dashboard"; import { EmbedState } from "./embed"; import { EntitiesState } from "./entities"; import { FormState } from "./forms"; @@ -12,6 +13,7 @@ export interface State { admin: AdminState; app: AppState; currentUser: User | null; + dashboard: DashboardState; embed: EmbedState; entities: EntitiesState; form: FormState; -- GitLab