This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously. closes #1282
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { SunIcon, MoonIcon, BrowserIcon } from "outline-icons";
|
|
import * as React from "react";
|
|
import stores from "~/stores";
|
|
import { Theme } from "~/stores/UiStore";
|
|
import { createAction } from "~/actions";
|
|
import { SettingsSection } from "~/actions/sections";
|
|
|
|
export const changeToDarkTheme = createAction({
|
|
name: ({ t }) => t("Dark"),
|
|
icon: <MoonIcon />,
|
|
iconInContextMenu: false,
|
|
keywords: "theme dark night",
|
|
section: SettingsSection,
|
|
selected: () => stores.ui.theme === "dark",
|
|
perform: () => stores.ui.setTheme(Theme.Dark),
|
|
});
|
|
|
|
export const changeToLightTheme = createAction({
|
|
name: ({ t }) => t("Light"),
|
|
icon: <SunIcon />,
|
|
iconInContextMenu: false,
|
|
keywords: "theme light day",
|
|
section: SettingsSection,
|
|
selected: () => stores.ui.theme === "light",
|
|
perform: () => stores.ui.setTheme(Theme.Light),
|
|
});
|
|
|
|
export const changeToSystemTheme = createAction({
|
|
name: ({ t }) => t("System"),
|
|
icon: <BrowserIcon />,
|
|
iconInContextMenu: false,
|
|
keywords: "theme system default",
|
|
section: SettingsSection,
|
|
selected: () => stores.ui.theme === "system",
|
|
perform: () => stores.ui.setTheme(Theme.System),
|
|
});
|
|
|
|
export const changeTheme = createAction({
|
|
name: ({ t }) => t("Change theme"),
|
|
placeholder: ({ t }) => t("Change theme to"),
|
|
icon: () =>
|
|
stores.ui.resolvedTheme === "light" ? <SunIcon /> : <MoonIcon />,
|
|
keywords: "appearance display",
|
|
section: SettingsSection,
|
|
children: [changeToLightTheme, changeToDarkTheme, changeToSystemTheme],
|
|
});
|
|
|
|
export const rootSettingsActions = [changeTheme];
|