new config preview:showhiddenfiles and term:theme (#981)

This commit is contained in:
Mike Sawka 2024-10-07 14:08:57 -07:00 committed by GitHub
parent 26fcbe0f0f
commit 447596b5e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 27 additions and 14 deletions

View File

@ -19,11 +19,11 @@ import {
getBlockComponentModel,
getConnStatusAtom,
getHostName,
getSettingsKeyAtom,
getUserName,
globalStore,
refocusNode,
useBlockAtom,
useSettingsKeyAtom,
WOS,
} from "@/app/store/global";
import * as services from "@/app/store/services";
@ -161,7 +161,7 @@ const BlockFrame_Header = ({
}: BlockFrameProps & { changeConnModalAtom: jotai.PrimitiveAtom<boolean>; error?: Error }) => {
const [blockData] = WOS.useWaveObjectValue<Block>(WOS.makeORef("block", nodeModel.blockId));
let viewName = util.useAtomValueSafe(viewModel?.viewName) ?? blockViewToName(blockData?.meta?.view);
const showBlockIds = jotai.useAtomValue(useSettingsKeyAtom("blockheader:showblockids"));
const showBlockIds = jotai.useAtomValue(getSettingsKeyAtom("blockheader:showblockids"));
let viewIconUnion = util.useAtomValueSafe(viewModel?.viewIcon) ?? blockViewToIcon(blockData?.meta?.view);
const preIconButton = util.useAtomValueSafe(viewModel?.preIconButton);
let headerTextUnion = util.useAtomValueSafe(viewModel?.viewText);

View File

@ -191,7 +191,7 @@ const Markdown = ({
scrollable = true,
onClickExecute,
}: MarkdownProps) => {
const textAtomValue = useAtomValueSafe(textAtom);
const textAtomValue = useAtomValueSafe<string>(textAtom);
const tocRef = useRef<TocItem[]>([]);
const showToc = useAtomValueSafe(showTocAtom) ?? false;
const contentsOsRef = useRef<OverlayScrollbarsComponentRef>(null);

View File

@ -230,7 +230,7 @@ function useBlockCache<T>(blockId: string, name: string, makeFn: () => T): T {
const settingsAtomCache = new Map<string, Atom<any>>();
function useSettingsKeyAtom<T extends keyof SettingsType>(key: T): Atom<SettingsType[T]> {
function getSettingsKeyAtom<T extends keyof SettingsType>(key: T): Atom<SettingsType[T]> {
let settingsKeyAtom = settingsAtomCache.get(key) as Atom<SettingsType[T]>;
if (settingsKeyAtom == null) {
settingsKeyAtom = atom((get) => {
@ -534,6 +534,7 @@ export {
getConnStatusAtom,
getHostName,
getObjectId,
getSettingsKeyAtom,
getUserName,
globalStore,
initGlobal,
@ -553,7 +554,6 @@ export {
useBlockAtom,
useBlockCache,
useBlockDataLoaded,
useSettingsKeyAtom,
useSettingsPrefixAtom,
WOS,
};

View File

@ -8,7 +8,7 @@ import { RpcApi } from "@/app/store/wshclientapi";
import { WindowRpcClient } from "@/app/store/wshrpcutil";
import { Markdown } from "@/element/markdown";
import { NodeModel } from "@/layout/index";
import { atoms, createBlock, getConnStatusAtom, globalStore, refocusNode } from "@/store/global";
import { atoms, createBlock, getConnStatusAtom, getSettingsKeyAtom, globalStore, refocusNode } from "@/store/global";
import * as services from "@/store/services";
import * as WOS from "@/store/wos";
import { getWebServerEndpoint } from "@/util/endpoints";
@ -153,7 +153,8 @@ export class PreviewModel implements ViewModel {
this.viewType = "preview";
this.blockId = blockId;
this.nodeModel = nodeModel;
this.showHiddenFiles = jotai.atom(true);
let showHiddenFiles = globalStore.get(getSettingsKeyAtom("preview:showhiddenfiles")) ?? true;
this.showHiddenFiles = jotai.atom<boolean>(showHiddenFiles);
this.refreshVersion = jotai.atom(0);
this.previewTextRef = createRef();
this.openFileModal = jotai.atom(false);

View File

@ -6,7 +6,7 @@ import { waveEventSubscribe } from "@/app/store/wps";
import { RpcApi } from "@/app/store/wshclientapi";
import { WindowRpcClient } from "@/app/store/wshrpcutil";
import { VDomView } from "@/app/view/term/vdom";
import { WOS, atoms, getConnStatusAtom, globalStore, useSettingsPrefixAtom } from "@/store/global";
import { WOS, atoms, getConnStatusAtom, getSettingsKeyAtom, globalStore, useSettingsPrefixAtom } from "@/store/global";
import * as services from "@/store/services";
import * as keyutil from "@/util/keyutil";
import * as util from "@/util/util";
@ -134,7 +134,11 @@ class TermViewModel {
this.blockBg = jotai.atom((get) => {
const blockData = get(this.blockAtom);
const fullConfig = get(atoms.fullConfigAtom);
const theme = computeTheme(fullConfig, blockData?.meta?.["term:theme"]);
let themeName: string = globalStore.get(getSettingsKeyAtom("term:theme"));
if (blockData?.meta?.["term:theme"]) {
themeName = blockData.meta["term:theme"];
}
const theme = computeTheme(fullConfig, themeName);
if (theme != null && theme.background != null) {
return { bg: theme.background };
}

View File

@ -1,7 +1,7 @@
// Copyright 2024, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0
import { getApi, openLink, useSettingsKeyAtom } from "@/app/store/global";
import { getApi, getSettingsKeyAtom, openLink } from "@/app/store/global";
import { getSimpleControlShiftAtom } from "@/app/store/keymodel";
import { RpcApi } from "@/app/store/wshclientapi";
import { WindowRpcClient } from "@/app/store/wshrpcutil";
@ -63,7 +63,7 @@ export class WebViewModel implements ViewModel {
this.webviewRef = React.createRef<WebviewTag>();
this.viewText = jotai.atom((get) => {
const defaultUrlAtom = useSettingsKeyAtom("web:defaulturl");
const defaultUrlAtom = getSettingsKeyAtom("web:defaulturl");
let url = get(this.blockAtom)?.meta?.url || get(defaultUrlAtom);
const currUrl = get(this.url);
if (currUrl !== undefined) {
@ -270,7 +270,7 @@ export class WebViewModel implements ViewModel {
* @param newUrl The new URL to load in the webview.
*/
loadUrl(newUrl: string, reason: string) {
const defaultSearchAtom = useSettingsKeyAtom("web:defaultsearch");
const defaultSearchAtom = getSettingsKeyAtom("web:defaultsearch");
const searchTemplate = globalStore.get(defaultSearchAtom);
const nextUrl = this.ensureUrlScheme(newUrl, searchTemplate);
console.log("webview loadUrl", reason, nextUrl, "cur=", this.webviewRef?.current.getURL());
@ -384,9 +384,9 @@ interface WebViewProps {
const WebView = memo(({ model }: WebViewProps) => {
const blockData = jotai.useAtomValue(model.blockAtom);
const defaultUrlAtom = useSettingsKeyAtom("web:defaulturl");
const defaultUrlAtom = getSettingsKeyAtom("web:defaulturl");
const defaultUrl = jotai.useAtomValue(defaultUrlAtom);
const defaultSearchAtom = useSettingsKeyAtom("web:defaultsearch");
const defaultSearchAtom = getSettingsKeyAtom("web:defaultsearch");
const defaultSearch = jotai.useAtomValue(defaultSearchAtom);
let metaUrl = blockData?.meta?.url || defaultUrl;
metaUrl = model.ensureUrlScheme(metaUrl, defaultSearch);

View File

@ -421,6 +421,7 @@ declare global {
"term:*"?: boolean;
"term:fontsize"?: number;
"term:fontfamily"?: string;
"term:theme"?: string;
"term:disablewebgl"?: boolean;
"term:localshellpath"?: string;
"term:localshellopts"?: string[];
@ -438,6 +439,7 @@ declare global {
"autoupdate:intervalms"?: number;
"autoupdate:installonquit"?: boolean;
"autoupdate:channel"?: string;
"preview:showhiddenfiles"?: boolean;
"widget:*"?: boolean;
"widget:showhelp"?: boolean;
"window:*"?: boolean;

View File

@ -17,6 +17,7 @@ const (
ConfigKey_TermClear = "term:*"
ConfigKey_TermFontSize = "term:fontsize"
ConfigKey_TermFontFamily = "term:fontfamily"
ConfigKey_TermTheme = "term:theme"
ConfigKey_TermDisableWebGl = "term:disablewebgl"
ConfigKey_TermLocalShellPath = "term:localshellpath"
ConfigKey_TermLocalShellOpts = "term:localshellopts"
@ -39,6 +40,8 @@ const (
ConfigKey_AutoUpdateInstallOnQuit = "autoupdate:installonquit"
ConfigKey_AutoUpdateChannel = "autoupdate:channel"
ConfigKey_PreviewShowHiddenFiles = "preview:showhiddenfiles"
ConfigKey_WidgetClear = "widget:*"
ConfigKey_WidgetShowHelp = "widget:showhelp"

View File

@ -51,6 +51,7 @@ type SettingsType struct {
TermClear bool `json:"term:*,omitempty"`
TermFontSize float64 `json:"term:fontsize,omitempty"`
TermFontFamily string `json:"term:fontfamily,omitempty"`
TermTheme string `json:"term:theme,omitempty"`
TermDisableWebGl bool `json:"term:disablewebgl,omitempty"`
TermLocalShellPath string `json:"term:localshellpath,omitempty"`
TermLocalShellOpts []string `json:"term:localshellopts,omitempty"`
@ -73,6 +74,8 @@ type SettingsType struct {
AutoUpdateInstallOnQuit bool `json:"autoupdate:installonquit,omitempty"`
AutoUpdateChannel string `json:"autoupdate:channel,omitempty"`
PreviewShowHiddenFiles *bool `json:"preview:showhiddenfiles,omitempty"`
WidgetClear bool `json:"widget:*,omitempty"`
WidgetShowHelp bool `json:"widget:showhelp,omitempty"`