Skip to content
Snippets Groups Projects
Unverified Commit e299928a authored by Anton Kulyk's avatar Anton Kulyk Committed by GitHub
Browse files

Add query builder redux state types (#22536)

* Add `Dataset` mock function

* Add query builder redux state type

* Add query builder redux state mock helper
parent 75c6618a
No related branches found
No related tags found
No related merge requests found
import { DatabaseId } from "./database";
import { DownloadPermission } from "./permissions";
export interface DatasetColumn {
......@@ -6,14 +7,16 @@ export interface DatasetColumn {
name: string;
}
export interface DatasetData {
rows: any[][];
cols: DatasetColumn[];
rows_truncated: number;
download_perms?: DownloadPermission;
}
export interface Dataset {
data: {
rows: any[][];
cols: DatasetColumn[];
rows_truncated: number;
download_perms?: DownloadPermission;
};
database_id: number;
data: DatasetData;
database_id: DatabaseId;
row_count: number;
running_time: number;
}
import { Dataset, DatasetData } from "metabase-types/api/dataset";
type MockDatasetOpts = Partial<Omit<Dataset, "data">> & {
data?: Partial<DatasetData>;
};
export const createMockDataset = ({ data = {}, ...opts }: MockDatasetOpts) => ({
data: {
rows: [],
cols: [{ display_name: "NAME", source: "native", name: "NAME" }],
rows_truncated: 0,
...data,
},
database_id: 1,
row_count: 0,
running_time: 1000,
...opts,
});
......@@ -3,6 +3,7 @@ export * from "./automagic-dashboards";
export * from "./collection";
export * from "./dashboard";
export * from "./database";
export * from "./dataset";
export * from "./timeline";
export * from "./settings";
export * from "./user";
......@@ -3,5 +3,6 @@ export * from "./app";
export * from "./entities";
export * from "./forms";
export * from "./settings";
export * from "./qb";
export * from "./setup";
export * from "./state";
......@@ -2,6 +2,7 @@ export * from "./admin";
export * from "./app";
export * from "./entities";
export * from "./forms";
export * from "./qb";
export * from "./settings";
export * from "./setup";
export * from "./state";
import {
QueryBuilderState,
QueryBuilderUIControls,
} from "metabase-types/store";
export const createMockQueryBuilderUIControlsState = (
opts?: Partial<QueryBuilderUIControls>,
): QueryBuilderUIControls => ({
isShowingDataReference: false,
isShowingTemplateTagsEditor: false,
isShowingNewbModal: false,
isEditing: false,
isRunning: false,
isQueryComplete: false,
isShowingSummarySidebar: false,
isShowingFilterSidebar: false,
isShowingChartTypeSidebar: false,
isShowingChartSettingsSidebar: false,
isShowingQuestionDetailsSidebar: false,
isShowingTimelineSidebar: false,
initialChartSetting: null,
isPreviewing: true,
isShowingRawTable: false,
queryBuilderMode: "view",
previousQueryBuilderMode: false,
snippetCollectionId: null,
datasetEditorTab: "query",
...opts,
});
export const createMockQueryBuilderState = (
opts?: Partial<QueryBuilderState>,
): QueryBuilderState => ({
uiControls: createMockQueryBuilderUIControlsState(),
loadingControls: {
showLoadCompleteFavicon: false,
documentTitle: "",
timeoutId: "",
},
queryStatus: "complete",
queryResults: null,
queryStartTime: null,
cancelQueryDeferred: null,
card: null,
originalCard: null,
lastRunCard: null,
parameterValues: {},
zoomedRowObjectId: null,
tableForeignKeyReferences: null,
visibleTimelineIds: [],
selectedTimelineEventIds: [],
metadataDiff: {},
currentState: null,
...opts,
});
......@@ -5,6 +5,7 @@ import {
createMockAppState,
createMockSettingsState,
createMockEntitiesState,
createMockQueryBuilderState,
createMockSetupState,
createMockFormState,
} from "metabase-types/store/mocks";
......@@ -15,6 +16,7 @@ export const createMockState = (opts?: Partial<State>): State => ({
currentUser: createMockUser(),
entities: createMockEntitiesState(),
form: createMockFormState(),
qb: createMockQueryBuilderState(),
settings: createMockSettingsState(),
setup: createMockSetupState(),
...opts,
......
import { Dataset } from "metabase-types/api/dataset";
import { Card } from "metabase-types/types/Card";
import { Field } from "metabase-types/types/Field";
import { ParameterValueOrArray } from "metabase-types/types/Parameter";
export type QueryBuilderMode = "view" | "notebook" | "dataset";
export type DatasetEditorTab = "query" | "metadata";
export type QueryBuilderQueryStatus = "idle" | "running" | "complete";
export type ForeignKeyReference = {
status: number;
value: number;
};
export interface QueryBuilderUIControls {
isShowingDataReference: boolean;
isShowingTemplateTagsEditor: boolean;
isShowingNewbModal: boolean;
isEditing: boolean;
isRunning: boolean;
isQueryComplete: boolean;
isShowingSummarySidebar: boolean;
isShowingFilterSidebar: boolean;
isShowingChartTypeSidebar: boolean;
isShowingChartSettingsSidebar: boolean;
isShowingQuestionDetailsSidebar: boolean;
isShowingTimelineSidebar: boolean;
initialChartSetting: null;
isPreviewing: boolean;
isShowingRawTable: boolean;
queryBuilderMode: QueryBuilderMode;
previousQueryBuilderMode: boolean;
snippetCollectionId: number | null;
datasetEditorTab: DatasetEditorTab;
}
export interface QueryBuilderLoadingControls {
showLoadCompleteFavicon: boolean;
documentTitle: string;
timeoutId: string;
}
export interface QueryBuilderState {
uiControls: QueryBuilderUIControls;
loadingControls: QueryBuilderLoadingControls;
queryStatus: QueryBuilderQueryStatus;
queryResults: Dataset[] | null;
queryStartTime: number | null;
cancelQueryDeferred: Promise<void> | null;
card: Card | null;
originalCard: Card | null;
lastRunCard: Card | null;
parameterValues: Record<string, ParameterValueOrArray>;
zoomedRowObjectId: number | string | null;
tableForeignKeyReferences: Record<number, ForeignKeyReference> | null;
visibleTimelineIds: number[];
selectedTimelineEventIds: number[];
metadataDiff: Record<string, Partial<Field>>;
currentState: {
card: Card;
cardId?: number;
serializedCard: string;
} | null;
}
......@@ -3,6 +3,7 @@ import { AdminState } from "./admin";
import { AppState } from "./app";
import { EntitiesState } from "./entities";
import { FormState } from "./forms";
import { QueryBuilderState } from "./qb";
import { SettingsState } from "./settings";
import { SetupState } from "./setup";
......@@ -12,6 +13,7 @@ export interface State {
currentUser: User;
entities: EntitiesState;
form: FormState;
qb: QueryBuilderState;
settings: SettingsState;
setup: SetupState;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment