● Zion Boggan
repos/Darwin/face/src/hooks/useAsk.ts
zionboggan.com ↗
42 lines · typescript
History for this file →
1
"use client";
2
 
3
import { useState, useCallback } from "react";
4
import { ask } from "@/lib/mock-gateway";
5
import type { AskResponse } from "@/lib/types";
6
 
7
interface UseAskReturn {
8
  data: AskResponse | null;
9
  loading: boolean;
10
  error: string | null;
11
  submit: (query: string) => Promise<void>;
12
  reset: () => void;
13
}
14
 
15
export function useAsk(): UseAskReturn {
16
  const [data, setData] = useState<AskResponse | null>(null);
17
  const [loading, setLoading] = useState(false);
18
  const [error, setError] = useState<string | null>(null);
19
 
20
  const submit = useCallback(async (query: string) => {
21
    if (!query.trim()) return;
22
    setLoading(true);
23
    setError(null);
24
    setData(null);
25
    try {
26
      const result = await ask(query.trim());
27
      setData(result);
28
    } catch (err) {
29
      setError(err instanceof Error ? err.message : "Unknown error");
30
    } finally {
31
      setLoading(false);
32
    }
33
  }, []);
34
 
35
  const reset = useCallback(() => {
36
    setData(null);
37
    setError(null);
38
    setLoading(false);
39
  }, []);
40
 
41
  return { data, loading, error, submit, reset };
42
}