ref(connectable tab) reconnect context menu & hotkey

This commit is contained in:
Clem Fern
2023-05-12 19:09:33 +02:00
parent 901181f681
commit 1e6f6af5ed
5 changed files with 46 additions and 37 deletions

View File

@@ -1,5 +1,9 @@
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'
import { Injector, Component } from '@angular/core'
import { first } from 'rxjs'
import { BaseTerminalProfile } from './interfaces'
import { BaseTerminalTabComponent } from './baseTerminalTab.component'
@@ -13,9 +17,37 @@ export abstract class ConnectableTerminalTabComponent<P extends BaseTerminalProf
constructor (protected injector: Injector) {
super(injector)
this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {
if (this.hasFocus && hotkey === 'reconnect-tab') {
this.reconnect()
}
})
}
abstract initializeSession (): Promise<void>
/**
* Initialize Connectable Session.
* Set reconnectOffered to false
*/
async initializeSession (): Promise<void> {
this.reconnectOffered = false
}
/**
* Offering reconnection to the user if it hasn't been done yet.
* Set reconnectOffered to true
*/
offerReconnection () {
if (!this.reconnectOffered) {
this.reconnectOffered = true
this.write(this.translate.instant(_('Press any key to reconnect')) + '\r\n')
this.input$.pipe(first()).subscribe(() => {
if (!this.session?.open && this.reconnectOffered) {
this.reconnect()
}
})
}
}
async reconnect (): Promise<void> {
this.session?.destroy()

View File

@@ -4,6 +4,7 @@ import { BaseTerminalTabComponent } from './api/baseTerminalTab.component'
import { isReconnectable } from './api/interfaces'
import { TerminalContextMenuItemProvider } from './api/contextMenuProvider'
import { MultifocusService } from './services/multifocus.service'
import { ConnectableTerminalTabComponent } from './api/connectableTerminalTab.component'
/** @hidden */
@Injectable()
@@ -97,7 +98,7 @@ export class ReconnectContextMenu extends TabContextMenuItemProvider {
) { super() }
async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {
if (isReconnectable(tab)) {
if (isReconnectable(tab) || tab instanceof ConnectableTerminalTabComponent) {
return [
{
label: this.translate.instant('Reconnect'),