Files
buzz/desktop/src/app/useTerminalContext.ts
npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta 407db04792 feat(desktop): mount terminal sessions in app shell
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@buzz.block.builderlab.xyz>
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@buzz.block.builderlab.xyz>
2026-08-01 22:21:52 -04:00

57 lines
1.4 KiB
TypeScript

import * as React from "react";
import type { Channel } from "@/shared/api/types";
import { safeNpub } from "@/shared/lib/nostrUtils";
type TerminalContext = {
channelId: string | null;
channelName: string | null;
threadId: string | null;
npub: string | null;
relayUrl: string | null;
};
type TerminalContextResult = {
activeChannel: Channel | null;
terminalContext: TerminalContext;
};
export function useTerminalContext({
channelId,
channels,
locationSearch,
pubkey,
relayUrl,
}: {
channelId: string | null;
channels: Channel[];
locationSearch: unknown;
pubkey?: string;
relayUrl?: string;
}): TerminalContextResult {
return React.useMemo(() => {
const search = locationSearch as {
thread?: unknown;
threadRootId?: unknown;
};
const threadId = search.threadRootId ?? search.thread;
const activeChannel = channelId
? (channels.find((candidate) => candidate.id === channelId) ?? null)
: null;
return {
activeChannel,
terminalContext: {
channelId,
channelName: activeChannel?.name ?? null,
threadId:
channelId && typeof threadId === "string" && threadId.length > 0
? threadId
: null,
npub: pubkey ? safeNpub(pubkey) : null,
relayUrl: relayUrl ?? null,
},
};
}, [channelId, channels, locationSearch, pubkey, relayUrl]);
}