diff --git a/src/main.tsx b/src/main.tsx index 0b02843d..868c7366 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -9,6 +9,7 @@ import dayjs from "dayjs"; import {If, For, When, Otherwise, Choose} from "tsx-control-statements/components"; import cn from "classnames"; import type {SessionDataType, LineType, CmdDataType, RemoteType, RemoteStateType, RemoteInstanceType, RemotePtrType, HistoryItem, HistoryQueryOpts, RemoteEditType, FeStateType, ContextMenuOpts, BookmarkType, RenderModeType} from "./types"; +import type * as T from "./types"; import localizedFormat from 'dayjs/plugin/localizedFormat'; import {GlobalModel, GlobalCommandRunner, Session, Cmd, Window, Screen, ScreenWindow, riToRPtr, windowWidthToCols, windowHeightToRows, termHeightFromRows, termWidthFromCols} from "./model"; import {isModKeyPress} from "./util"; @@ -2488,6 +2489,41 @@ class LoadingSpinner extends React.Component<{}, {}> { } } +@mobxReact.observer +class AlertModal extends React.Component<{}, {}> { + closeModal() : void { + mobx.action(() => { + GlobalModel.alertMessage.set(null); + })(); + } + + render() { + let message = GlobalModel.alertMessage.get(); + if (message == null) { + return null; + } + let title = message.title ?? "Alert"; + return ( +
+
+
+
+

{title}

+ +
+
+

{message.message}

+
+
+ +
+
+ +
+ ); + } +} + @mobxReact.observer class Main extends React.Component<{}, {}> { constructor(props : any) { @@ -2533,6 +2569,7 @@ class Main extends React.Component<{}, {}> { +
); } diff --git a/src/model.ts b/src/model.ts index 40e58663..77413de9 100644 --- a/src/model.ts +++ b/src/model.ts @@ -5,7 +5,7 @@ import {debounce} from "throttle-debounce"; import {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeSimpleData, boundInt, isModKeyPress} from "./util"; import {TermWrap} from "./term"; import {v4 as uuidv4} from "uuid"; -import type {SessionDataType, WindowDataType, LineType, RemoteType, HistoryItem, RemoteInstanceType, RemotePtrType, CmdDataType, FeCmdPacketType, TermOptsType, RemoteStateType, ScreenDataType, ScreenWindowType, ScreenOptsType, LayoutType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, UIContextType, HistoryInfoType, HistoryQueryOpts, FeInputPacketType, TermWinSize, RemoteInputPacketType, FeStateType, ContextMenuOpts, RendererContext, RendererModel, PtyDataType, BookmarkType, ClientDataType, HistoryViewDataType} from "./types"; +import type {SessionDataType, WindowDataType, LineType, RemoteType, HistoryItem, RemoteInstanceType, RemotePtrType, CmdDataType, FeCmdPacketType, TermOptsType, RemoteStateType, ScreenDataType, ScreenWindowType, ScreenOptsType, LayoutType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, UIContextType, HistoryInfoType, HistoryQueryOpts, FeInputPacketType, TermWinSize, RemoteInputPacketType, FeStateType, ContextMenuOpts, RendererContext, RendererModel, PtyDataType, BookmarkType, ClientDataType, HistoryViewDataType, AlertMessageType} from "./types"; import {WSControl} from "./ws"; import {ImageRendererModel} from "./imagerenderer"; import {measureText, getMonoFontSize} from "./textmeasure"; @@ -1834,7 +1834,7 @@ class HistoryViewModel { setTimeout(this.clearActiveDelete, 2000); return; } - console.log("DELETE!"); + GlobalModel.showAlert({message: "DELETE!"}); } @boundMethod @@ -2127,6 +2127,7 @@ class Model { isDev : boolean; activeMainView : OV<"session" | "history" | "bookmarks"> = mobx.observable.box("session", {name: "activeMainView"}); termFontSize : CV; + alertMessage : OV = mobx.observable.box(null, {name: "alertMessage"}); inputModel : InputModel; bookmarksModel : BookmarksModel; @@ -2174,6 +2175,12 @@ class Model { setTimeout(() => this.getClientData(), 10); } + showAlert(alertMessage : AlertMessageType) : void { + mobx.action(() => { + this.alertMessage.set(alertMessage); + })(); + } + getBaseHostPort() : string { if (this.isDev) { return DevServerEndpoint; diff --git a/src/types.ts b/src/types.ts index 143470c0..33338def 100644 --- a/src/types.ts +++ b/src/types.ts @@ -420,6 +420,11 @@ type PlaybookEntryType = { remove : boolean, }; +type AlertMessageType = { + title : string, + message : string, +}; + type RenderModeType = "normal" | "collapsed"; -export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, WindowDataType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDataType, ScreenDataType, ScreenOptsType, ScreenWindowType, LayoutType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, RemotePtrType, UIContextType, HistoryInfoType, HistoryQueryOpts, WatchScreenPacketType, TermWinSize, FeInputPacketType, RemoteInputPacketType, RemoteEditType, FeStateType, ContextMenuOpts, RendererContext, WindowSize, RendererModel, PtyDataType, BookmarkType, ClientDataType, PlaybookType, PlaybookEntryType, HistoryViewDataType, RenderModeType}; +export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, WindowDataType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDataType, ScreenDataType, ScreenOptsType, ScreenWindowType, LayoutType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, RemotePtrType, UIContextType, HistoryInfoType, HistoryQueryOpts, WatchScreenPacketType, TermWinSize, FeInputPacketType, RemoteInputPacketType, RemoteEditType, FeStateType, ContextMenuOpts, RendererContext, WindowSize, RendererModel, PtyDataType, BookmarkType, ClientDataType, PlaybookType, PlaybookEntryType, HistoryViewDataType, RenderModeType, AlertMessageType};