Skip to content
Snippets Groups Projects
Unverified Commit 26779d30 authored by Kamil Mielnik's avatar Kamil Mielnik Committed by GitHub
Browse files

Type routing in State (#38645)


* Add routing to State

* Introduce getLocation selector

* Shorten code

* Do not export local selector

* Update frontend/src/metabase/selectors/routing.ts

Co-authored-by: default avatarUladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>

---------

Co-authored-by: default avatarUladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
parent 19334990
Branches
Tags
No related merge requests found
......@@ -7,6 +7,7 @@ export * from "./embed";
export * from "./metabot";
export * from "./parameters";
export * from "./qb";
export * from "./routing";
export * from "./settings";
export * from "./setup";
export * from "./state";
......
import type { Location } from "history";
import type { RouterState } from "react-router-redux";
export const createMockRoutingState = (
opts?: Partial<RouterState>,
): RouterState => {
return {
...opts,
locationBeforeTransitions: createMockLocation(
opts?.locationBeforeTransitions,
),
};
};
export const createMockLocation = (opts?: Partial<Location>): Location => {
return {
pathname: "/",
search: "",
query: {},
hash: "",
state: undefined,
action: "POP",
key: "", // can be null but react-router-redux@4.0.8 typings are inaccurate
...opts,
};
};
......@@ -9,6 +9,7 @@ import { createMockEmbedState } from "./embed";
import { createMockMetabotState } from "./metabot";
import { createMockParametersState } from "./parameters";
import { createMockQueryBuilderState } from "./qb";
import { createMockRoutingState } from "./routing";
import { createMockSettingsState } from "./settings";
import { createMockSetupState } from "./setup";
import { createMockUploadState } from "./upload";
......@@ -27,6 +28,7 @@ export const createMockState = (
metabot: createMockMetabotState(),
parameters: createMockParametersState(),
qb: createMockQueryBuilderState(),
routing: createMockRoutingState(),
settings: createMockSettingsState(),
setup: createMockSetupState(),
upload: createMockUploadState(),
......
import type { RouterState } from "react-router-redux";
import type { User } from "metabase-types/api";
import type { AdminState } from "./admin";
import type { AppState } from "./app";
......@@ -21,8 +23,9 @@ export interface State {
embed: EmbedState;
entities: EntitiesState;
metabot: MetabotState;
qb: QueryBuilderState;
parameters: ParametersState;
qb: QueryBuilderState;
routing: RouterState;
settings: SettingsState;
setup: SetupState;
upload: FileUploadState;
......
......@@ -4,6 +4,7 @@ import { push, replace } from "react-router-redux";
import { createThunkAction } from "metabase/lib/redux";
import { equals } from "metabase/lib/utils";
import { getLocation } from "metabase/selectors/routing";
import { isEqualCard } from "metabase/lib/card";
......@@ -40,8 +41,7 @@ export const popState = createThunkAction(
const zoomedObjectId = getZoomedObjectId(getState());
if (zoomedObjectId) {
const { locationBeforeTransitions = {} } = getState().routing;
const { state, query } = locationBeforeTransitions;
const { state, query } = getLocation(getState());
const previouslyZoomedObjectId = state?.objectId || query?.objectId;
if (
......
import type { State } from "metabase-types/store";
export const getLocation = (state: State) =>
state.routing.locationBeforeTransitions;
......@@ -53,7 +53,8 @@ export function renderWithProviders(
...options
}: RenderWithProvidersOptions = {},
) {
let initialState = createMockState(storeInitialState);
let { routing, ...initialState }: Partial<State> =
createMockState(storeInitialState);
if (mode === "public") {
const publicReducerNames = Object.keys(publicReducers);
......@@ -72,6 +73,7 @@ export function renderWithProviders(
if (withRouter) {
Object.assign(reducers, { routing: routerReducer });
Object.assign(initialState, { routing });
}
if (customReducers) {
reducers = { ...reducers, ...customReducers };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment