MCPcopy Create free account
hub / github.com/cosscom/coss / AppCommand

Function AppCommand

apps/examples/calcom/components/app/app-command.tsx:258–745  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

256 CommandCreateHandle();
257
258export function AppCommand(): React.ReactElement {
259 const [open, setOpen] = React.useState(false);
260 const [aiState, setAIState] = React.useState<AIState>(initialAIState);
261 const [searchQuery, setSearchQuery] = React.useState("");
262 const aiInputRef = React.useRef<HTMLInputElement>(null);
263 const searchInputRef = React.useRef<HTMLInputElement>(null);
264 const abortControllerRef = React.useRef<AbortController | null>(null);
265 const commandResetKeyRef = React.useRef(0);
266
267 // Cleanup on unmount
268 React.useEffect((): (() => void) => {
269 return (): void => {
270 abortControllerRef.current?.abort();
271 };
272 }, []);
273
274 const resetAIState = React.useCallback(() => {
275 abortControllerRef.current?.abort();
276 setAIState(initialAIState);
277 }, []);
278
279 const handleItemClick = React.useCallback(() => {
280 setOpen(false);
281 }, []);
282
283 const handleBackToSearch = React.useCallback(() => {
284 resetAIState();
285 setSearchQuery("");
286 // Force Command remount to reset Autocomplete's internal query state
287 commandResetKeyRef.current += 1;
288 // Focus search input after state updates
289 searchInputRef.current?.focus();
290 }, [resetAIState]);
291
292 const handleGenerateAI = React.useCallback(
293 async (queryOverride?: string) => {
294 const query = queryOverride || aiState.query;
295 if (!query.trim()) return;
296
297 // Abort any ongoing request
298 abortControllerRef.current?.abort();
299 const controller = new AbortController();
300 abortControllerRef.current = controller;
301
302 setAIState((prev) => ({
303 ...prev,
304 error: null,
305 isGenerating: true,
306 query: "",
307 referenceLinks: [],
308 response: "",
309 submittedQuery: query,
310 }));
311
312 try {
313 // Simulate AI response - in production, this would call an API
314 await new Promise<void>((resolve, reject) => {
315 const timeout = setTimeout(resolve, 1500);

Callers

nothing calls this directly

Calls 1

markdownToSafeHTMLFunction · 0.90

Tested by

no test coverage detected