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 (
+
+ );
+ }
+}
+
@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};