Path: blob/master/src/packages/frontend/account/editor-settings/editor-settings.tsx
6040 views
/*1* This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45// cSpell:ignore nodeadkeys67import { FormattedMessage } from "react-intl";89import { Panel } from "@cocalc/frontend/antd-bootstrap";10import { redux, useTypedRedux } from "@cocalc/frontend/app-framework";11import { Icon, Loading } from "@cocalc/frontend/components";12import { KEYBOARD_VARIANTS } from "@cocalc/frontend/frame-editors/x11-editor/xpra/keyboards";13import { deep_copy } from "@cocalc/util/misc";14import { set_account_table } from "../util";15import { EditorSettingsAutosaveInterval } from "./autosave-interval";16import { EditorSettingsCheckboxes } from "./checkboxes";17import { EditorSettingsColorScheme } from "./color-schemes";18import { EditorSettingsFontSize } from "./font-size";19import { EditorSettingsIndentSize } from "./indent-size";20import { EditorSettingsKeyboardBindings } from "./keyboard-bindings";21import {22EditorSettingsKeyboardVariant,23EditorSettingsPhysicalKeyboard,24} from "./x11-keyboard";2526export function EditorSettings({}) {27const autosave = useTypedRedux("account", "autosave");28const font_size = useTypedRedux("account", "font_size");29const editor_settings = useTypedRedux("account", "editor_settings");30const other_settings = useTypedRedux("account", "other_settings");31const email_address = useTypedRedux("account", "email_address");32const tab_size = editor_settings?.get("tab_size");3334function get_keyboard_variant_options(val?) {35if (val == null) {36val = editor_settings?.get("physical_keyboard");37}38const options = deep_copy(KEYBOARD_VARIANTS[val] ?? []);39options.unshift({ value: "", display: "No variant" });40return options;41}4243function on_change(name: string, val: any): void {44if (name === "autosave" || name === "font_size") {45set_account_table({ [name]: val });46} else {47set_account_table({ editor_settings: { [name]: val } });48}4950if (name === "physical_keyboard") {51const options = get_keyboard_variant_options(val);52redux53.getActions("account")54.setState({ keyboard_variant_options: options });55for (const opt of options) {56if (opt.value === "nodeadkeys") {57on_change("keyboard_variant", opt.value);58return;59}60}61// otherwise, select default62on_change("keyboard_variant", "");63}64}6566function on_change_other_settings(name: string, value: any): void {67redux.getActions("account").set_other_settings(name, value);68}6970if (editor_settings == null || font_size == null || !autosave || !tab_size) {71return <Loading />;72}7374return (75<>76<Panel77size="small"78header={79<>80<Icon name="font" />{" "}81<FormattedMessage82id="account.editor-settings.basic.title"83defaultMessage="Basic Settings"84/>85</>86}87>88<EditorSettingsFontSize on_change={on_change} font_size={font_size} />89<EditorSettingsAutosaveInterval90on_change={on_change}91autosave={autosave}92/>93<EditorSettingsIndentSize on_change={on_change} tab_size={tab_size} />94</Panel>95<EditorSettingsColorScheme96style={{ marginTop: "10px" }}97size={"small"}98on_change={(value) => on_change("theme", value)}99theme={editor_settings.get("theme") ?? ""}100editor_settings={editor_settings}101font_size={font_size}102/>103<Panel104size="small"105header={106<>107<Icon name="keyboard" />{" "}108<FormattedMessage109id="account.editor-settings.keyboard.title"110defaultMessage="Keyboard"111/>112</>113}114>115<EditorSettingsKeyboardBindings116on_change={(value) => on_change("bindings", value)}117bindings={editor_settings.get("bindings") ?? ""}118/>119<EditorSettingsPhysicalKeyboard120on_change={(value) => on_change("physical_keyboard", value)}121physical_keyboard={editor_settings.get("physical_keyboard") ?? ""}122/>123<EditorSettingsKeyboardVariant124on_change={(value) => on_change("keyboard_variant", value)}125keyboard_variant={editor_settings.get("keyboard_variant") ?? ""}126keyboard_variant_options={get_keyboard_variant_options()}127/>128</Panel>129<EditorSettingsCheckboxes130on_change={on_change}131on_change_other_settings={on_change_other_settings}132editor_settings={editor_settings}133other_settings={other_settings}134email_address={email_address}135/>136</>137);138}139140141