diff --git a/src/main.tsx b/src/main.tsx index ed82e991..24b03a58 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -8,7 +8,7 @@ import dayjs from 'dayjs' import {If, For, When, Otherwise, Choose} from "tsx-control-statements/components"; import cn from "classnames" import {TermWrap} from "./term"; -import type {SessionDataType, LineType, CmdDataType, RemoteType} from "./types"; +import type {SessionDataType, LineType, CmdDataType, RemoteType, RemoteStateType, RemoteInstanceType} from "./types"; import localizedFormat from 'dayjs/plugin/localizedFormat'; import {GlobalModel, GlobalInput, Session, Cmd, Window, Screen, ScreenWindow} from "./model"; @@ -641,7 +641,7 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { e.preventDefault(); console.log("handle context menu!", screenId); let model = GlobalModel; - model.contextScreen(screenId); + model.contextScreen(e, screenId); } render() { diff --git a/src/model.ts b/src/model.ts index 2e34e277..c6826348 100644 --- a/src/model.ts +++ b/src/model.ts @@ -4,7 +4,7 @@ import {boundMethod} from "autobind-decorator"; import {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeSimpleData} from "./util"; import {TermWrap} from "./term"; import {v4 as uuidv4} from "uuid"; -import type {SessionDataType, WindowDataType, LineType, RemoteType, HistoryItem, RemoteInstanceType, CmdDataType, FeCmdPacketType, TermOptsType, RemoteStateType, ScreenDataType, ScreenWindowType, ScreenOptsType, LayoutType, PtyDataUpdateType, SessionUpdateType, WindowUpdateType, UpdateMessage, LineCmdUpdateType} from "./types"; +import type {SessionDataType, WindowDataType, LineType, RemoteType, HistoryItem, RemoteInstanceType, CmdDataType, FeCmdPacketType, TermOptsType, RemoteStateType, ScreenDataType, ScreenWindowType, ScreenOptsType, LayoutType, PtyDataUpdateType, SessionUpdateType, WindowUpdateType, UpdateMessage, LineCmdUpdateType, InfoType, CmdLineUpdateType} from "./types"; import {WSControl} from "./ws"; var GlobalUser = "sawka"; @@ -30,7 +30,7 @@ type ElectronApi = { onICmd : (callback : (mods : KeyModsType) => void) => void, onBracketCmd : (callback : (event : any, arg : {relative : number}, mods : KeyModsType) => void) => void, onDigitCmd : (callback : (event : any, arg : {digit : number}, mods : KeyModsType) => void) => void, - contextScreen : (screenId : string) => void, + contextScreen : (screenOpts : {screenId : string}, position : {x : number, y : number}) => void, }; function getApi() : ElectronApi { @@ -296,7 +296,7 @@ class Window { if (load) { this.loaded.set(true); } - genMergeSimpleData(this.lines, win.lines, (l) => String(l.lineid), (l) => l.lineid); + genMergeSimpleData(this.lines, win.lines, (l : LineType) => String(l.lineid), (l : LineType) => l.lineid); this.history = win.history || []; let cmds = win.cmds || []; for (let i=0; i = mobx.observable.box(0, {name: "history-index"}); modHistory : mobx.IObservableArray = mobx.observable.array([""], {name: "mod-history"}); @@ -730,11 +717,12 @@ class Model { this.updateWindow(winMsg.window, false); } if ("info" in update) { - let info = update.info; + let info : InfoType = update.info; this.flashInfoMsg(info, info.timeoutms); } if ("cmdline" in update) { - this.inputModel.updateCmdLine(update.cmdline); + let cmdline : CmdLineUpdateType = update.cmdline; + this.inputModel.updateCmdLine(cmdline); } console.log("run-update>", interactive, update); } diff --git a/src/types.ts b/src/types.ts index 8b3b5480..38e7496c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -7,6 +7,7 @@ type SessionDataType = { activescreenid : string, sessionidx : number, screens : ScreenDataType[], + remotes : RemoteInstanceType[], // for updates remove? : boolean, @@ -22,6 +23,7 @@ type LineType = { linetype : string, text : string, cmdid : string, + remove? : boolean, }; type ScreenOptsType = { @@ -175,18 +177,38 @@ type PtyDataUpdateType = { type SessionUpdateType = { sessions : SessionDataType[], + activesessionid? : string, }; type LineCmdUpdateType = { line : LineType, cmd : CmdDataType, remove : boolean, -} +}; -type UpdateMessage = PtyDataUpdateType | SessionUpdateType | LineCmdUpdateType; +type CmdLineUpdateType = { + insertchars : string, + insertpos : number, +}; + +type InfoUpdateType = { + cmdline : CmdLineUpdateType, + info : InfoType, +}; + +type UpdateMessage = PtyDataUpdateType | SessionUpdateType | LineCmdUpdateType | InfoUpdateType; type WindowUpdateType = { window: WindowDataType, } -export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, WindowDataType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDonePacketType, CmdDataType, ScreenDataType, ScreenOptsType, ScreenWindowType, LayoutType, PtyDataUpdateType, SessionUpdateType, WindowUpdateType, UpdateMessage, LineCmdUpdateType}; +type InfoType = { + infotitle? : string, + infomsg? : string, + infoerror? : string, + infocomps? : string[], + infocompsmore? : boolean, + timeoutms? : number, +}; + +export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, WindowDataType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDonePacketType, CmdDataType, ScreenDataType, ScreenOptsType, ScreenWindowType, LayoutType, PtyDataUpdateType, SessionUpdateType, WindowUpdateType, UpdateMessage, LineCmdUpdateType, InfoType, CmdLineUpdateType}; diff --git a/src/util.ts b/src/util.ts index b2d3db23..b32a3c71 100644 --- a/src/util.ts +++ b/src/util.ts @@ -62,7 +62,7 @@ interface ISimpleDataType { remove? : boolean; } -function genMergeSimpleData(objs : mobx.IObservableArray, dataArr : T, idFn : (obj : T) => string, sortIdxFn : (obj : T) => number) { +function genMergeSimpleData(objs : mobx.IObservableArray, dataArr : T[], idFn : (obj : T) => string, sortIdxFn : (obj : T) => number) { if (dataArr == null || dataArr.length == 0) { return; }