mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-02 18:39:05 +01:00
allow metadata to override the frame title, icon, and text (#972)
This commit is contained in:
parent
f835441507
commit
d9d19f8368
@ -113,10 +113,6 @@ function makeDefaultViewModel(blockId: string, viewType: string): ViewModel {
|
|||||||
const blockData = get(blockDataAtom);
|
const blockData = get(blockDataAtom);
|
||||||
return blockViewToName(blockData?.meta?.view);
|
return blockViewToName(blockData?.meta?.view);
|
||||||
}),
|
}),
|
||||||
viewText: jotai.atom((get) => {
|
|
||||||
const blockData = get(blockDataAtom);
|
|
||||||
return blockData?.meta?.title;
|
|
||||||
}),
|
|
||||||
preIconButton: jotai.atom(null),
|
preIconButton: jotai.atom(null),
|
||||||
endIconButtons: jotai.atom(null),
|
endIconButtons: jotai.atom(null),
|
||||||
};
|
};
|
||||||
|
@ -160,15 +160,25 @@ const BlockFrame_Header = ({
|
|||||||
error,
|
error,
|
||||||
}: BlockFrameProps & { changeConnModalAtom: jotai.PrimitiveAtom<boolean>; error?: Error }) => {
|
}: BlockFrameProps & { changeConnModalAtom: jotai.PrimitiveAtom<boolean>; error?: Error }) => {
|
||||||
const [blockData] = WOS.useWaveObjectValue<Block>(WOS.makeORef("block", nodeModel.blockId));
|
const [blockData] = WOS.useWaveObjectValue<Block>(WOS.makeORef("block", nodeModel.blockId));
|
||||||
const viewName = util.useAtomValueSafe(viewModel?.viewName) ?? blockViewToName(blockData?.meta?.view);
|
let viewName = util.useAtomValueSafe(viewModel?.viewName) ?? blockViewToName(blockData?.meta?.view);
|
||||||
const showBlockIds = jotai.useAtomValue(useSettingsKeyAtom("blockheader:showblockids"));
|
const showBlockIds = jotai.useAtomValue(useSettingsKeyAtom("blockheader:showblockids"));
|
||||||
const viewIconUnion = util.useAtomValueSafe(viewModel?.viewIcon) ?? blockViewToIcon(blockData?.meta?.view);
|
let viewIconUnion = util.useAtomValueSafe(viewModel?.viewIcon) ?? blockViewToIcon(blockData?.meta?.view);
|
||||||
const preIconButton = util.useAtomValueSafe(viewModel?.preIconButton);
|
const preIconButton = util.useAtomValueSafe(viewModel?.preIconButton);
|
||||||
const headerTextUnion = util.useAtomValueSafe(viewModel?.viewText);
|
let headerTextUnion = util.useAtomValueSafe(viewModel?.viewText);
|
||||||
const magnified = jotai.useAtomValue(nodeModel.isMagnified);
|
const magnified = jotai.useAtomValue(nodeModel.isMagnified);
|
||||||
const manageConnection = util.useAtomValueSafe(viewModel?.manageConnection);
|
const manageConnection = util.useAtomValueSafe(viewModel?.manageConnection);
|
||||||
const dragHandleRef = preview ? null : nodeModel.dragHandleRef;
|
const dragHandleRef = preview ? null : nodeModel.dragHandleRef;
|
||||||
|
|
||||||
|
if (blockData?.meta?.["frame:title"]) {
|
||||||
|
viewName = blockData.meta["frame:title"];
|
||||||
|
}
|
||||||
|
if (blockData?.meta?.["frame:icon"]) {
|
||||||
|
viewIconUnion = blockData.meta["frame:icon"];
|
||||||
|
}
|
||||||
|
if (blockData?.meta?.["frame:text"]) {
|
||||||
|
headerTextUnion = blockData.meta["frame:text"];
|
||||||
|
}
|
||||||
|
|
||||||
const onContextMenu = React.useCallback(
|
const onContextMenu = React.useCallback(
|
||||||
(e: React.MouseEvent<HTMLDivElement>) => {
|
(e: React.MouseEvent<HTMLDivElement>) => {
|
||||||
handleHeaderContextMenu(e, blockData, viewModel, magnified, nodeModel.toggleMagnify, nodeModel.onClose);
|
handleHeaderContextMenu(e, blockData, viewModel, magnified, nodeModel.toggleMagnify, nodeModel.onClose);
|
||||||
|
@ -107,7 +107,6 @@ class TermViewModel {
|
|||||||
htmlElemFocusRef: React.RefObject<HTMLInputElement>;
|
htmlElemFocusRef: React.RefObject<HTMLInputElement>;
|
||||||
blockId: string;
|
blockId: string;
|
||||||
viewIcon: jotai.Atom<string>;
|
viewIcon: jotai.Atom<string>;
|
||||||
viewText: jotai.Atom<HeaderElem[]>;
|
|
||||||
viewName: jotai.Atom<string>;
|
viewName: jotai.Atom<string>;
|
||||||
blockBg: jotai.Atom<MetaType>;
|
blockBg: jotai.Atom<MetaType>;
|
||||||
manageConnection: jotai.Atom<boolean>;
|
manageConnection: jotai.Atom<boolean>;
|
||||||
@ -132,11 +131,6 @@ class TermViewModel {
|
|||||||
return "Terminal";
|
return "Terminal";
|
||||||
});
|
});
|
||||||
this.manageConnection = jotai.atom(true);
|
this.manageConnection = jotai.atom(true);
|
||||||
this.viewText = jotai.atom((get) => {
|
|
||||||
const blockData = get(this.blockAtom);
|
|
||||||
const titleText: HeaderText = { elemtype: "text", text: blockData?.meta?.title ?? "" };
|
|
||||||
return [titleText] as HeaderElem[];
|
|
||||||
});
|
|
||||||
this.blockBg = jotai.atom((get) => {
|
this.blockBg = jotai.atom((get) => {
|
||||||
const blockData = get(this.blockAtom);
|
const blockData = get(this.blockAtom);
|
||||||
const fullConfig = get(atoms.fullConfigAtom);
|
const fullConfig = get(atoms.fullConfigAtom);
|
||||||
|
4
frontend/types/gotypes.d.ts
vendored
4
frontend/types/gotypes.d.ts
vendored
@ -264,7 +264,6 @@ declare global {
|
|||||||
type MetaType = {
|
type MetaType = {
|
||||||
view?: string;
|
view?: string;
|
||||||
controller?: string;
|
controller?: string;
|
||||||
title?: string;
|
|
||||||
file?: string;
|
file?: string;
|
||||||
url?: string;
|
url?: string;
|
||||||
connection?: string;
|
connection?: string;
|
||||||
@ -279,6 +278,9 @@ declare global {
|
|||||||
"frame:*"?: boolean;
|
"frame:*"?: boolean;
|
||||||
"frame:bordercolor"?: string;
|
"frame:bordercolor"?: string;
|
||||||
"frame:bordercolor:focused"?: string;
|
"frame:bordercolor:focused"?: string;
|
||||||
|
"frame:title"?: string;
|
||||||
|
"frame:icon"?: string;
|
||||||
|
"frame:text"?: string;
|
||||||
cmd?: string;
|
cmd?: string;
|
||||||
"cmd:*"?: boolean;
|
"cmd:*"?: boolean;
|
||||||
"cmd:interactive"?: boolean;
|
"cmd:interactive"?: boolean;
|
||||||
|
@ -10,8 +10,6 @@ const (
|
|||||||
|
|
||||||
MetaKey_Controller = "controller"
|
MetaKey_Controller = "controller"
|
||||||
|
|
||||||
MetaKey_Title = "title"
|
|
||||||
|
|
||||||
MetaKey_File = "file"
|
MetaKey_File = "file"
|
||||||
|
|
||||||
MetaKey_Url = "url"
|
MetaKey_Url = "url"
|
||||||
@ -33,6 +31,9 @@ const (
|
|||||||
MetaKey_FrameClear = "frame:*"
|
MetaKey_FrameClear = "frame:*"
|
||||||
MetaKey_FrameBorderColor = "frame:bordercolor"
|
MetaKey_FrameBorderColor = "frame:bordercolor"
|
||||||
MetaKey_FrameBorderColor_Focused = "frame:bordercolor:focused"
|
MetaKey_FrameBorderColor_Focused = "frame:bordercolor:focused"
|
||||||
|
MetaKey_FrameTitle = "frame:title"
|
||||||
|
MetaKey_FrameIcon = "frame:icon"
|
||||||
|
MetaKey_FrameText = "frame:text"
|
||||||
|
|
||||||
MetaKey_Cmd = "cmd"
|
MetaKey_Cmd = "cmd"
|
||||||
MetaKey_CmdClear = "cmd:*"
|
MetaKey_CmdClear = "cmd:*"
|
||||||
|
@ -14,7 +14,6 @@ type MetaTSType struct {
|
|||||||
// shared
|
// shared
|
||||||
View string `json:"view,omitempty"`
|
View string `json:"view,omitempty"`
|
||||||
Controller string `json:"controller,omitempty"`
|
Controller string `json:"controller,omitempty"`
|
||||||
Title string `json:"title,omitempty"`
|
|
||||||
File string `json:"file,omitempty"`
|
File string `json:"file,omitempty"`
|
||||||
Url string `json:"url,omitempty"`
|
Url string `json:"url,omitempty"`
|
||||||
Connection string `json:"connection,omitempty"`
|
Connection string `json:"connection,omitempty"`
|
||||||
@ -32,6 +31,9 @@ type MetaTSType struct {
|
|||||||
FrameClear bool `json:"frame:*,omitempty"`
|
FrameClear bool `json:"frame:*,omitempty"`
|
||||||
FrameBorderColor string `json:"frame:bordercolor,omitempty"`
|
FrameBorderColor string `json:"frame:bordercolor,omitempty"`
|
||||||
FrameBorderColor_Focused string `json:"frame:bordercolor:focused,omitempty"`
|
FrameBorderColor_Focused string `json:"frame:bordercolor:focused,omitempty"`
|
||||||
|
FrameTitle string `json:"frame:title,omitempty"`
|
||||||
|
FrameIcon string `json:"frame:icon,omitempty"`
|
||||||
|
FrameText string `json:"frame:text,omitempty"`
|
||||||
|
|
||||||
Cmd string `json:"cmd,omitempty"`
|
Cmd string `json:"cmd,omitempty"`
|
||||||
CmdClear bool `json:"cmd:*,omitempty"`
|
CmdClear bool `json:"cmd:*,omitempty"`
|
||||||
|
Loading…
Reference in New Issue
Block a user