1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

feat: enable dark mode for all (#3614)

This commit is contained in:
Mateusz Kwasniewski 2023-04-25 10:13:06 +02:00 committed by GitHub
parent ae60cf05b5
commit 545e231cae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 24 additions and 56 deletions

View File

@ -239,11 +239,6 @@ const Header: VFC = () => {
/> />
</StyledLinks> </StyledLinks>
<StyledUserContainer> <StyledUserContainer>
<ConditionallyRender
condition={Boolean(
uiConfig.flags.ENABLE_DARK_MODE_SUPPORT
)}
show={
<Tooltip <Tooltip
title={ title={
themeMode === 'dark' themeMode === 'dark'
@ -252,19 +247,14 @@ const Header: VFC = () => {
} }
arrow arrow
> >
<IconButton <IconButton onClick={onSetThemeMode} sx={focusable}>
onClick={onSetThemeMode}
sx={focusable}
>
<ConditionallyRender <ConditionallyRender
condition={themeMode === 'dark'} condition={themeMode === 'dark'}
show={<DarkModeOutlined />} show={<DarkModeOutlined />}
elseShow={<LightModeOutlined />} elseShow={<LightModeOutlined />}
/> />
</IconButton> </IconButton>
</Tooltip> </Tooltip>{' '}
}
/>
<ConditionallyRender <ConditionallyRender
condition={!isOss()} condition={!isOss()}
show={<Notifications />} show={<Notifications />}

View File

@ -3,16 +3,15 @@ import UIContext, { createEmptyToast, themeMode } from 'contexts/UIContext';
import { IToast } from 'interfaces/toast'; import { IToast } from 'interfaces/toast';
import { getLocalStorageItem } from 'utils/storage'; import { getLocalStorageItem } from 'utils/storage';
const resolveMode = (darkmode: boolean): themeMode => { const resolveMode = (): themeMode => {
const value = getLocalStorageItem('unleash-theme'); const value = getLocalStorageItem('unleash-theme');
if (value) { if (value) {
return value as themeMode; return value as themeMode;
} }
let osDark; const osDark =
if (darkmode) { window.matchMedia &&
osDark = window.matchMedia('(prefers-color-scheme: dark)').matches; window.matchMedia('(prefers-color-scheme: dark)').matches;
}
if (osDark) { if (osDark) {
return 'dark'; return 'dark';
@ -20,17 +19,10 @@ const resolveMode = (darkmode: boolean): themeMode => {
return 'light'; return 'light';
}; };
interface IUiProviderProps { const UIProvider: React.FC = ({ children }) => {
darkmode: boolean;
}
const UIProvider: React.FC<IUiProviderProps> = ({
children,
darkmode = false,
}) => {
const [toastData, setToast] = useState<IToast>(createEmptyToast()); const [toastData, setToast] = useState<IToast>(createEmptyToast());
const [showFeedback, setShowFeedback] = useState(false); const [showFeedback, setShowFeedback] = useState(false);
const [themeMode, setThemeMode] = useState(resolveMode(darkmode)); const [themeMode, setThemeMode] = useState(resolveMode());
const context = React.useMemo( const context = React.useMemo(
() => ({ () => ({

View File

@ -8,9 +8,5 @@ export const UIProviderContainer: React.FC = ({ children }) => {
return null; return null;
} }
return ( return <UIProvider>{children}</UIProvider>;
<UIProvider darkmode={uiConfig.flags.ENABLE_DARK_MODE_SUPPORT || false}>
{children}
</UIProvider>
);
}; };

View File

@ -13,7 +13,7 @@ test('renders an empty list correctly', () => {
<MemoryRouter> <MemoryRouter>
<ThemeProvider> <ThemeProvider>
<AnnouncerProvider> <AnnouncerProvider>
<UIProvider darkmode={false}> <UIProvider>
<AccessProviderMock <AccessProviderMock
permissions={[{ permission: ADMIN }]} permissions={[{ permission: ADMIN }]}
> >

View File

@ -36,7 +36,6 @@ export interface IFlags {
T?: boolean; T?: boolean;
UNLEASH_CLOUD?: boolean; UNLEASH_CLOUD?: boolean;
UG?: boolean; UG?: boolean;
ENABLE_DARK_MODE_SUPPORT?: boolean;
embedProxyFrontend?: boolean; embedProxyFrontend?: boolean;
maintenanceMode?: boolean; maintenanceMode?: boolean;
messageBanner?: boolean; messageBanner?: boolean;

View File

@ -66,7 +66,6 @@ exports[`should create default config 1`] = `
"isEnabled": [Function], "isEnabled": [Function],
}, },
"flags": { "flags": {
"ENABLE_DARK_MODE_SUPPORT": false,
"anonymiseEventLog": false, "anonymiseEventLog": false,
"bulkOperations": false, "bulkOperations": false,
"caseInsensitiveInOperators": false, "caseInsensitiveInOperators": false,
@ -93,7 +92,6 @@ exports[`should create default config 1`] = `
}, },
"flagResolver": FlagResolver { "flagResolver": FlagResolver {
"experiments": { "experiments": {
"ENABLE_DARK_MODE_SUPPORT": false,
"anonymiseEventLog": false, "anonymiseEventLog": false,
"bulkOperations": false, "bulkOperations": false,
"caseInsensitiveInOperators": false, "caseInsensitiveInOperators": false,
@ -168,9 +166,6 @@ exports[`should create default config 1`] = `
"strategySegmentsLimit": 5, "strategySegmentsLimit": 5,
"ui": { "ui": {
"environment": "Open Source", "environment": "Open Source",
"flags": {
"ENABLE_DARK_MODE_SUPPORT": false,
},
}, },
"versionCheck": { "versionCheck": {
"enable": true, "enable": true,

View File

@ -105,9 +105,6 @@ function loadUI(options: IUnleashOptions): IUIConfig {
environment: 'Open Source', environment: 'Open Source',
}; };
ui.flags = {
ENABLE_DARK_MODE_SUPPORT: false,
};
return mergeAll([ui, uiO]); return mergeAll([ui, uiO]);
} }

View File

@ -4,7 +4,6 @@ export type IFlags = Partial<typeof flags>;
export type IFlagKey = keyof IFlags; export type IFlagKey = keyof IFlags;
const flags = { const flags = {
ENABLE_DARK_MODE_SUPPORT: false,
anonymiseEventLog: false, anonymiseEventLog: false,
embedProxy: parseEnvVarBoolean( embedProxy: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_EMBED_PROXY, process.env.UNLEASH_EXPERIMENTAL_EMBED_PROXY,

View File

@ -7,7 +7,7 @@ test('should produce empty exposed flags', () => {
const result = resolver.getAll(); const result = resolver.getAll();
expect(result.ENABLE_DARK_MODE_SUPPORT).toBe(false); expect(result.anonymiseEventLog).toBe(false);
}); });
test('should produce UI flags with extra dynamic flags', () => { test('should produce UI flags with extra dynamic flags', () => {