Skip to content

Commit 13dd2a9

Browse files
authored
RI-7574: allow setting default theme from query param (#5031)
* RI-7574: allow setting default theme from query param * update theme lookup logic * refactor theme provider
1 parent 965e062 commit 13dd2a9

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

redisinsight/ui/src/components/config/Config.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import { useEffect } from 'react'
1+
import { useContext, useEffect } from 'react'
22
import { useDispatch, useSelector } from 'react-redux'
33
import { useLocation } from 'react-router-dom'
44
import { isNumber } from 'lodash'
55
import { BrowserStorageItem, FeatureFlags, Theme } from 'uiSrc/constants'
66
import { BuildType } from 'uiSrc/constants/env'
77
import { BUILD_FEATURES } from 'uiSrc/constants/featuresHighlighting'
8-
import {
9-
localStorageService,
10-
setObjectStorage,
11-
themeService,
12-
} from 'uiSrc/services'
8+
import { localStorageService, setObjectStorage } from 'uiSrc/services'
139

1410
import {
1511
appFeatureFlagsFeaturesSelector,
@@ -44,6 +40,7 @@ import { fetchProfile } from 'uiSrc/slices/oauth/cloud'
4440
import { fetchDBSettings } from 'uiSrc/slices/app/db-settings'
4541
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
4642
import { DatabaseSettingsData } from 'uiSrc/slices/interfaces'
43+
import { ThemeContext } from 'uiSrc/contexts/themeContext'
4744

4845
const SETTINGS_PAGE_PATH = '/settings'
4946
const Config = () => {
@@ -54,6 +51,7 @@ const Config = () => {
5451
[FeatureFlags.cloudSso]: cloudSsoFeature,
5552
[FeatureFlags.envDependent]: envDependentFeature,
5653
} = useSelector(appFeatureFlagsFeaturesSelector)
54+
const { changeTheme } = useContext(ThemeContext)
5755
const { pathname } = useLocation()
5856

5957
const dispatch = useDispatch()
@@ -211,7 +209,7 @@ const Config = () => {
211209
const checkAndSetTheme = () => {
212210
const theme = config?.theme
213211
if (theme && localStorageService.get(BrowserStorageItem.theme) !== theme)
214-
themeService.applyTheme(theme as Theme)
212+
changeTheme(theme)
215213
}
216214

217215
return null

redisinsight/ui/src/contexts/themeContext.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ interface Props {
2626

2727
const THEME_NAMES = THEMES.map(({ value }) => value)
2828

29+
const getQueryTheme = () => {
30+
const queryThemeParam = new URLSearchParams(window.location.search)
31+
.get('theme')
32+
?.toUpperCase()
33+
34+
return THEMES.find(({ value }) => value === queryThemeParam)?.value
35+
}
36+
2937
export const defaultState = {
3038
theme: DEFAULT_THEME || Theme.System,
3139
usingSystemTheme:
@@ -41,14 +49,20 @@ export class ThemeProvider extends React.Component<Props> {
4149
constructor(props: any) {
4250
super(props)
4351

52+
const queryTheme = getQueryTheme()
4453
const storedThemeValue = localStorageService.get(BrowserStorageItem.theme)
45-
const theme =
46-
!storedThemeValue || !THEME_NAMES.includes(storedThemeValue)
47-
? defaultState.theme
48-
: storedThemeValue
54+
55+
let theme = defaultState.theme
56+
57+
if (queryTheme) {
58+
theme = queryTheme
59+
} else if (storedThemeValue && THEME_NAMES.includes(storedThemeValue)) {
60+
theme = storedThemeValue
61+
}
62+
4963
const usingSystemTheme = theme === Theme.System
5064

51-
themeService.applyTheme(theme)
65+
themeService.applyTheme(theme as Theme)
5266

5367
this.state = {
5468
theme: theme === Theme.System ? this.getSystemTheme() : theme,

0 commit comments

Comments
 (0)