useFlowLedger.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. "use client";
  2. import { useCallback, useEffect, useMemo, useState } from "react";
  3. import { getFlowLedger } from "@/lib/api/client";
  4. import type { FlowLedgerApiResponse } from "@/lib/api/types";
  5. import { buildFlowLedger } from "@/lib/flow-ledger/build";
  6. import type { FlowLedger } from "@/lib/flow-ledger/types";
  7. export function useFlowLedger(runId: string) {
  8. const [input, setInput] = useState<FlowLedgerApiResponse | null>(null);
  9. const [loading, setLoading] = useState(true);
  10. const [error, setError] = useState<string | null>(null);
  11. const load = useCallback(async () => {
  12. setLoading(true);
  13. setError(null);
  14. try {
  15. setInput(await getFlowLedger(runId, new URLSearchParams(window.location.search).get("debug") === "1"));
  16. } catch (err) {
  17. setError(err instanceof Error ? err.message : String(err));
  18. } finally {
  19. setLoading(false);
  20. }
  21. }, [runId]);
  22. useEffect(() => {
  23. void load();
  24. }, [load]);
  25. const ledger: FlowLedger | null = useMemo(() => (input ? buildFlowLedger(input) : null), [input]);
  26. return { input, ledger, loading, error, reload: load };
  27. }