mirror of
https://github.com/bitwarden/browser
synced 2026-02-27 18:13:29 +00:00
* Remove nord and remnants from solarizedark * Update window reload color * Remove extension-refresh feature flag from clients (#13450) Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com> * Remove usage of nord and solarized themes within DarkImageDirective --------- Co-authored-by: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { Observable, map } from "rxjs";
|
|
|
|
import { Theme, ThemeTypes } from "../enums";
|
|
import { GlobalStateProvider, KeyDefinition, THEMING_DISK } from "../state";
|
|
|
|
export abstract class ThemeStateService {
|
|
/**
|
|
* The users selected theme.
|
|
*/
|
|
abstract selectedTheme$: Observable<Theme>;
|
|
|
|
/**
|
|
* A method for updating the current users configured theme.
|
|
* @param theme The chosen user theme.
|
|
*/
|
|
abstract setSelectedTheme(theme: Theme): Promise<void>;
|
|
}
|
|
|
|
export const THEME_SELECTION = new KeyDefinition<Theme>(THEMING_DISK, "selection", {
|
|
deserializer: (s) => s,
|
|
});
|
|
|
|
export class DefaultThemeStateService implements ThemeStateService {
|
|
private readonly selectedThemeState = this.globalStateProvider.get(THEME_SELECTION);
|
|
|
|
selectedTheme$ = this.selectedThemeState.state$.pipe(
|
|
map((theme) => {
|
|
// We used to support additional themes. Since these are no longer supported we return null to default to the system theme.
|
|
if (theme != null && !Object.values(ThemeTypes).includes(theme)) {
|
|
return null;
|
|
}
|
|
|
|
return theme;
|
|
}),
|
|
map((theme) => theme ?? this.defaultTheme),
|
|
);
|
|
|
|
constructor(
|
|
private globalStateProvider: GlobalStateProvider,
|
|
private defaultTheme: Theme = ThemeTypes.System,
|
|
) {}
|
|
|
|
async setSelectedTheme(theme: Theme): Promise<void> {
|
|
await this.selectedThemeState.update(() => theme, {
|
|
shouldUpdate: (currentTheme) => currentTheme !== theme,
|
|
});
|
|
}
|
|
}
|