import React, { useEffect, useRef } from "react";
import { Text } from "ink";
import { useTerminalTheme } from "../hooks/useTerminalTheme";
import { runOrgCommand } from "../../commands/cf.command";
import { InteractionCancelledError } from "../../core/interaction/interaction-service";
import type { InkInteractionService } from "../services/ink-interaction-service";
import type { TInteractionContext } from "../../core/interaction/interaction-service";
/**
* Native migration of `smdg cf org` (the CF target switcher, favorites, and
* region management menus). Same `runOrgCommand` business logic the
* traditional command calls, fed by an InkInteractionService instead of
* PlainCliInteractionService — every select/input/confirm/multiSelect
* touchpoint renders via (mounted alongside this screen by
* SmdgTerminalApp), every notify() call lands in the shell's permanent
* scrollback. No `prompts` library involved at all, so the confirm-prompt
* crash on an unrecognized keypress (arrow key, paste, etc.) cannot occur.
*/
export function CfOrgScreen(props: { service: InkInteractionService; onDone: (success: boolean) => void }) {
const theme = useTerminalTheme();
const startedRef = useRef(false);
useEffect(() => {
if (startedRef.current) return;
startedRef.current = true;
const ctx: TInteractionContext = { interaction: props.service, signal: props.service.signal };
void (async () => {
try {
await runOrgCommand({}, ctx);
props.onDone(true);
} catch (error) {
if (!(error instanceof InteractionCancelledError) && !props.service.signal.aborted) {
props.service.notify({ level: "error", message: error instanceof Error ? error.message : String(error) });
}
props.onDone(false);
}
})();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
Cloud Foundry
);
}