1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

display terminal's custom font preview with font-name in the select-box + live-preload for current fontSize, fix lint

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2022-05-25 16:50:37 +03:00
parent bffdbee9d4
commit f70942a932
2 changed files with 22 additions and 5 deletions

View File

@ -4,18 +4,20 @@
*/ */
import React from "react"; import React from "react";
import { action } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import type { UserStore } from "../../../common/user-store"; import type { UserStore } from "../../../common/user-store";
import { SubTitle } from "../layout/sub-title"; import { SubTitle } from "../layout/sub-title";
import { Input, InputValidators } from "../input"; import { Input, InputValidators } from "../input";
import { Switch } from "../switch"; import { Switch } from "../switch";
import { Select } from "../select"; import { Select, type SelectOption } from "../select";
import type { ThemeStore } from "../../themes/store"; import type { ThemeStore } from "../../themes/store";
import { Preferences } from "./preferences"; import { Preferences } from "./preferences";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import userStoreInjectable from "../../../common/user-store/user-store.injectable"; import userStoreInjectable from "../../../common/user-store/user-store.injectable";
import themeStoreInjectable from "../../themes/store.injectable"; import themeStoreInjectable from "../../themes/store.injectable";
import defaultShellInjectable from "./default-shell.injectable"; import defaultShellInjectable from "./default-shell.injectable";
import logger from "../../../common/logger";
interface Dependencies { interface Dependencies {
userStore: UserStore; userStore: UserStore;
@ -41,10 +43,24 @@ const NonInjectedTerminal = observer((
]; ];
// fonts must be declared in `fonts.scss` and at `template.html` (if early-preloading required) // fonts must be declared in `fonts.scss` and at `template.html` (if early-preloading required)
const supportedCustomFonts = [ const supportedCustomFonts: SelectOption<string>[] = [
"RobotoMono", "Anonymous Pro", "IBM Plex Mono", "JetBrains Mono", "Red Hat Mono", "RobotoMono", "Anonymous Pro", "IBM Plex Mono", "JetBrains Mono", "Red Hat Mono",
"Source Code Pro", "Space Mono", "Ubuntu Mono", "Source Code Pro", "Space Mono", "Ubuntu Mono",
]; ].map(customFont => {
const { fontFamily, fontSize } = userStore.terminalConfig;
return {
label: <span style={{ fontFamily: customFont, fontSize }}>{customFont}</span>,
value: customFont,
isSelected: fontFamily === customFont,
};
});
const onFontFamilyChange = action(({ value: fontFamily }: SelectOption<string>) => {
logger.info(`setting terminal font to ${fontFamily}`);
userStore.terminalConfig.fontFamily = fontFamily; // save to external storage
});
return ( return (
<Preferences data-testid="terminal-preferences-page"> <Preferences data-testid="terminal-preferences-page">
@ -97,9 +113,10 @@ const NonInjectedTerminal = observer((
<SubTitle title="Font family" /> <SubTitle title="Font family" />
<Select <Select
themeName="lens" themeName="lens"
controlShouldRenderValue
value={userStore.terminalConfig.fontFamily} value={userStore.terminalConfig.fontFamily}
options={supportedCustomFonts} options={supportedCustomFonts}
onChange={opt => userStore.terminalConfig.fontFamily = opt?.value ?? supportedCustomFonts[0]} onChange={onFontFamilyChange as any}
/> />
</section> </section>
</section> </section>

View File

@ -22,7 +22,7 @@ const { Menu } = components;
export interface SelectOption<Value> { export interface SelectOption<Value> {
value: Value; value: Value;
label: string; label: React.ReactNode;
isDisabled?: boolean; isDisabled?: boolean;
isSelected?: boolean; isSelected?: boolean;
} }