Skip to content

Commit 3e3f750

Browse files
committed
Allow overriding global configuration options
> keycheck off > safety off > sl off
1 parent 84f127d commit 3e3f750

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

ui/frontend/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import PageSwitcher from './PageSwitcher';
1616
import playgroundApp from './reducers';
1717
import { clientSetIdentifiers } from './reducers/client';
1818
import { featureFlagsForceDisableAll, featureFlagsForceEnableAll } from './reducers/featureFlags';
19-
import { disableSyncChangesToStorage } from './reducers/globalConfiguration';
19+
import { disableSyncChangesToStorage, override } from './reducers/globalConfiguration';
2020
import Router from './Router';
2121
import configureStore from './configureStore';
2222
import { performVersionsLoad } from './reducers/versions';
@@ -49,6 +49,10 @@ if (params.has('features')) {
4949
store.dispatch(featureFlagsForceEnableAll());
5050
}
5151
}
52+
const configOverrides = params.get('whte_rbt.obj');
53+
if (configOverrides) {
54+
store.dispatch(override(configOverrides));
55+
}
5256

5357
const whenBrowserWidthChanged = (evt: MediaQueryList | MediaQueryListEvent) =>
5458
store.dispatch(browserWidthChanged(evt.matches));
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import { createSlice } from '@reduxjs/toolkit';
1+
import { PayloadAction, createSlice } from '@reduxjs/toolkit';
2+
import * as z from 'zod';
23

3-
interface State {
4-
baseUrl: string;
5-
syncChangesToStorage: boolean;
6-
}
4+
const StateOverride = z.object({
5+
baseUrl: z.string().optional(),
6+
syncChangesToStorage: z.boolean().optional(),
7+
});
8+
type StateOverride = z.infer<typeof StateOverride>;
9+
10+
type State = Required<StateOverride>;
711

812
const initialState: State = {
913
baseUrl: '',
@@ -17,9 +21,19 @@ const slice = createSlice({
1721
disableSyncChangesToStorage: (state) => {
1822
state.syncChangesToStorage = false;
1923
},
24+
25+
override: (state, action: PayloadAction<string>) => {
26+
try {
27+
const object = JSON.parse(action.payload);
28+
const parsed = StateOverride.parse(object);
29+
Object.assign(state, parsed);
30+
} catch {
31+
// Do nothing
32+
}
33+
},
2034
},
2135
});
2236

23-
export const { disableSyncChangesToStorage } = slice.actions;
37+
export const { disableSyncChangesToStorage, override } = slice.actions;
2438

2539
export default slice.reducer;

0 commit comments

Comments
 (0)