Skip to content
This repository was archived by the owner on Jul 30, 2025. It is now read-only.

Commit a568528

Browse files
committed
fix: JS console may contain xtermjs error messages when sidecar is minimized
Fixes #5454
1 parent 5daa930 commit a568528

File tree

6 files changed

+35
-12
lines changed

6 files changed

+35
-12
lines changed

packages/core/src/core/events.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ eventChannelUnsafe.setMaxListeners(100)
3636

3737
export default eventChannelUnsafe
3838

39+
export type TabLayoutChangeEvent = { isSidecarNowHidden: boolean }
40+
type TabLayoutChangeHandler = (evt: TabLayoutChangeEvent) => void
41+
3942
class EventBusBase {
4043
protected readonly eventBus: EventEmitter
4144

@@ -59,8 +62,8 @@ class WriteEventBus extends EventBusBase {
5962
this.eventBus.emit('/tab/switch/split', tab)
6063
}
6164

62-
public emitTabLayoutChange(tabUUID: string): void {
63-
setTimeout(() => this.eventBus.emit(`/tab/layout/change/${tabUUID}`))
65+
public emitTabLayoutChange(tabUUID: string, evt: TabLayoutChangeEvent = { isSidecarNowHidden: false }): void {
66+
setTimeout(() => this.eventBus.emit(`/tab/layout/change/${tabUUID}`, evt))
6467
}
6568

6669
private emitCommandEvent(which: 'start' | 'complete', event: CommandStartEvent | CommandCompleteEvent) {
@@ -158,11 +161,11 @@ class ReadEventBus extends WriteEventBus {
158161
this.eventBus.off('/tab/switch/split', listener)
159162
}
160163

161-
public onTabLayoutChange(tabUUID: string, listener: () => void): void {
164+
public onTabLayoutChange(tabUUID: string, listener: TabLayoutChangeHandler): void {
162165
this.eventBus.on(`/tab/layout/change/${tabUUID}`, listener)
163166
}
164167

165-
public offTabLayoutChange(tabUUID: string, listener: () => void): void {
168+
public offTabLayoutChange(tabUUID: string, listener: TabLayoutChangeHandler): void {
166169
this.eventBus.off(`/tab/layout/change/${tabUUID}`, listener)
167170
}
168171

packages/core/src/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,13 @@ export { isUsageError, UsageError, UsageModel, UsageRow } from './core/usage-err
7171
export { isMessageWithUsageModel, isMessageWithCode } from './core/usage-error'
7272

7373
// eventChannelUnsafe
74-
export { default as eventChannelUnsafe, wireToTabEvents, wireToStandardEvents, eventBus } from './core/events'
74+
export {
75+
default as eventChannelUnsafe,
76+
wireToTabEvents,
77+
wireToStandardEvents,
78+
eventBus,
79+
TabLayoutChangeEvent
80+
} from './core/events'
7581

7682
// i18n
7783
export { fromMap as i18nFromMap, default as i18n } from './util/i18n'

plugins/plugin-client-common/src/components/Client/TabContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ export default class TabContent extends React.PureComponent<Props, State> {
250250

251251
private onWillChangeSize(desiredWidth: Width) {
252252
this.setState(curState => {
253-
eventBus.emitTabLayoutChange(curState.tab.uuid)
253+
eventBus.emitTabLayoutChange(curState.tab.uuid, { isSidecarNowHidden: desiredWidth === Width.Closed })
254254

255255
const sidecarWidth = desiredWidth
256256

plugins/plugin-client-common/src/components/Content/Editor/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
ToolbarText,
2828
ToolbarProps,
2929
MultiModalResponse,
30+
TabLayoutChangeEvent,
3031
eventChannelUnsafe,
3132
eventBus,
3233
i18n
@@ -293,8 +294,10 @@ export default class Editor extends React.PureComponent<Props, State> {
293294
eventChannelUnsafe.on('/zoom', onZoom)
294295
cleaners.push(() => eventChannelUnsafe.off('/zoom', onZoom))
295296

296-
const onTabLayoutChange = () => {
297-
editor.layout()
297+
const onTabLayoutChange = (evt: TabLayoutChangeEvent) => {
298+
if (!evt.isSidecarNowHidden) {
299+
editor.layout()
300+
}
298301
}
299302
eventBus.onTabLayoutChange(props.tabUUID, onTabLayoutChange)
300303
cleaners.push(() => eventBus.offTabLayoutChange(props.tabUUID, onTabLayoutChange))

plugins/plugin-kubectl/src/lib/view/modes/ExecIntoPod.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
ToolbarText,
2626
i18n,
2727
getPrimaryTabId,
28+
TabLayoutChangeEvent,
2829
eventBus,
2930
eventChannelUnsafe
3031
} from '@kui-shell/core'
@@ -141,12 +142,13 @@ export class Terminal<S extends TerminalState = TerminalState> extends Container
141142
eventChannelUnsafe.on(focusOffEvent, xoff)
142143
this.cleaners.push(() => eventChannelUnsafe.off(focusOffEvent, xoff))
143144

144-
const resizeListener = this.onResize.bind(this)
145+
const resizeListener = this.onWindowResize.bind(this)
145146
window.addEventListener('resize', resizeListener)
146147
this.cleaners.push(() => window.removeEventListener('resize', resizeListener))
147148

148-
eventBus.onTabLayoutChange(uuid, resizeListener)
149-
this.cleaners.push(() => eventBus.offTabLayoutChange(uuid, resizeListener))
149+
const layoutListener = this.onTabLayoutChange.bind(this)
150+
eventBus.onTabLayoutChange(uuid, layoutListener)
151+
this.cleaners.push(() => eventBus.offTabLayoutChange(uuid, layoutListener))
150152
}
151153

152154
/** Which container should we focus on by default? */
@@ -233,12 +235,18 @@ export class Terminal<S extends TerminalState = TerminalState> extends Container
233235
}
234236
}
235237

236-
private onResize() {
238+
private onWindowResize() {
237239
if (this.state.xterm) {
238240
this.state.doResize()
239241
}
240242
}
241243

244+
private onTabLayoutChange(evt: TabLayoutChangeEvent) {
245+
if (this.state.xterm && !evt.isSidecarNowHidden) {
246+
this.state.doResize()
247+
}
248+
}
249+
242250
/** When we are going away, make sure to abort the streaming job. */
243251
public componentWillUnmount() {
244252
this._unmounted = true

plugins/plugin-kubectl/src/lib/view/modes/logs.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ export class Logs extends Terminal<State> {
9898

9999
if (!msgAndType) {
100100
return
101+
} else if (!msgAndType[status]) {
102+
console.error(`Unknown streaming status: ${status}`)
103+
return
101104
}
102105

103106
const msg1 = msgAndType[status].message

0 commit comments

Comments
 (0)