Files
paseo/packages/app/src/utils/terminal-list.ts
T

29 lines
1015 B
TypeScript

import type { CreateTerminalResponse, ListTerminalsResponse } from "@server/shared/messages";
type TerminalListEntry = ListTerminalsResponse["payload"]["terminals"][number];
type CreatedTerminal = NonNullable<CreateTerminalResponse["payload"]["terminal"]>;
function toTerminalListEntry(input: { terminal: CreatedTerminal }): TerminalListEntry {
return {
id: input.terminal.id,
name: input.terminal.name,
...(input.terminal.title ? { title: input.terminal.title } : {}),
};
}
export function upsertTerminalListEntry(input: {
terminals: TerminalListEntry[];
terminal: CreatedTerminal;
}): TerminalListEntry[] {
const createdTerminal = toTerminalListEntry({ terminal: input.terminal });
const existingIndex = input.terminals.findIndex((terminal) => terminal.id === createdTerminal.id);
if (existingIndex < 0) {
return [...input.terminals, createdTerminal];
}
const nextTerminals = [...input.terminals];
nextTerminals[existingIndex] = createdTerminal;
return nextTerminals;
}