mirror of
https://github.com/urbit/shrub.git
synced 2024-12-19 16:51:42 +03:00
fe1ece47d8
On subscribe, track the subcription ID in the Session state. On deletion, unsubscribe using the same ID.
36 lines
824 B
TypeScript
36 lines
824 B
TypeScript
import { Terminal } from 'xterm';
|
|
import { FitAddon } from 'xterm-addon-fit';
|
|
import create from 'zustand';
|
|
import produce from 'immer';
|
|
|
|
export type Session = {
|
|
term: Terminal,
|
|
fit: FitAddon,
|
|
hasBell: boolean,
|
|
subscriptionId: number | null,
|
|
} | null;
|
|
export type Sessions = { [id: string]: Session; }
|
|
|
|
export interface TermState {
|
|
sessions: Sessions,
|
|
names: string[],
|
|
selected: string,
|
|
slogstream: null | EventSource,
|
|
theme: 'auto' | 'light' | 'dark',
|
|
//TODO: figure out the type
|
|
set: any,
|
|
}
|
|
|
|
const useTermState = create<TermState>((set, get) => ({
|
|
sessions: {} as Sessions,
|
|
names: [''],
|
|
selected: '', // empty string is default session
|
|
slogstream: null,
|
|
theme: 'auto',
|
|
set: (f: (draft: TermState) => void) => {
|
|
set(produce(f));
|
|
}
|
|
} as TermState));
|
|
|
|
export default useTermState;
|