diff --git a/src/linecomps.tsx b/src/linecomps.tsx index c6195425..c32eb261 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -28,10 +28,6 @@ function isBlank(s : string) : boolean { return (s == null || s == ""); } -function getLineId(line : LineType) : string { - return sprintf("%s-%s", line.screenid, line.lineid); -} - function makeFullRemoteRef(ownerName : string, remoteRef : string, name : string) : string { if (isBlank(ownerName) && isBlank(name)) { return remoteRef; @@ -205,10 +201,10 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT this.checkCmdText(); } - // FIXME scrollIntoView() { - let lineElem = document.getElementById("line-" + getLineId(this.props.line)); - lineElem.scrollIntoView({block: "end"}); + if (this.lineRef.current != null) { + this.lineRef.current.scrollIntoView({block: "end"}); + } } @boundMethod @@ -369,11 +365,6 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT })(); } - getLineDomId() : string { - let {line} = this.props; - return "line-" + getLineId(line); - } - isCollapsed() : boolean { let {renderMode, overrideCollapsed} = this.props; return (renderMode == "collapsed" && !overrideCollapsed.get()); @@ -424,7 +415,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT {"collapsed": isCollapsed}, ); return ( -
+
); @@ -481,7 +472,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT let cmd = screen.getCmd(line); if (cmd == null) { return ( -
+
[cmd not found '{line.cmdid}']
); @@ -520,7 +511,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT } let rendererType = getRendererType(line); return ( -
@@ -666,6 +657,7 @@ class LineText extends React.Component<{screen : LineContainerModel, line : Line class TerminalRenderer extends React.Component<{screen : LineContainerModel, line : LineType, width : number, staticRender : boolean, visible : OV, onHeightChange : () => void, collapsed : boolean}, {}> { termLoaded : mobx.IObservableValue = mobx.observable.box(false, {name: "linecmd-term-loaded"}); elemRef : React.RefObject = React.createRef(); + termRef : React.RefObject = React.createRef(); constructor(props) { super(props); @@ -731,10 +723,9 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin if (cmd == null) { return; } - let termId = "term-" + getLineId(line); - let termElem = document.getElementById(termId); + let termElem = this.termRef.current; if (termElem == null) { - console.log("cannot load terminal, no term elem found", termId); + console.log("cannot load terminal, no term elem found", line); return; } screen.loadTerminalRenderer(termElem, line, cmd, this.props.width); @@ -746,8 +737,7 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin screen.unloadRenderer(line.cmdid); if (!unmount) { mobx.action(() => this.termLoaded.set(false))(); - let termId = "term-" + getLineId(line); - let termElem = document.getElementById(termId); + let termElem = this.termRef.current; if (termElem != null) { termElem.replaceChildren(); } @@ -781,7 +771,7 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin
-
+
...
diff --git a/src/model.ts b/src/model.ts index 35f1af8f..ba5aa608 100644 --- a/src/model.ts +++ b/src/model.ts @@ -3202,10 +3202,16 @@ class CommandRunner { } switchSession(session : string) { + mobx.action(() => { + GlobalModel.activeMainView.set("session"); + })(); GlobalModel.submitCommand("session", null, [session], {"nohist": "1"}, false); } switchScreen(screen : string) { + mobx.action(() => { + GlobalModel.activeMainView.set("session"); + })(); GlobalModel.submitCommand("screen", null, [screen], {"nohist": "1"}, false); }