MCPcopy Create free account
hub / github.com/Botloader/botloader / useFetchData

Function useFetchData

frontend/src/components/FetchData.tsx:42–117  ·  view source on GitHub ↗
(
    loader: () => Promise<T | undefined>,
    debugName?: string,
)

Source from the content-addressed store, hash-verified

40// This Component/Context provider loads a remote resource returning the current load state with
41// methods to update and reload the resource
42export function useFetchData<T, U extends ResolvedApiResult<T> = ResolvedApiResult<T>>(
43 loader: () => Promise<T | undefined>,
44 debugName?: string,
45): FetchDataHook<U> {
46
47 let [result, setResult] = useState<{ state: "loading" | "loaded" | "waiting", value: U | null, error: Error | null }>({
48 state: "loading",
49 value: null,
50 error: null
51 });
52
53 const load = useCallback(async () => {
54 setResult({ state: "loading", value: null, error: null });
55
56 try {
57 let resp = await loader();
58 if (isErrorResponse(resp)) {
59 setResult({
60 state: "loaded",
61 value: null,
62 error: new Error(`Operation failed: ${resp.resp_code}: ${resp.response?.description} ${resp.response?.code}`)
63 });
64 } else {
65 if (resp === undefined) {
66 setResult({
67 state: "waiting",
68 value: resp as U,
69 error: null,
70 })
71 } else {
72 setResult({
73 state: "loaded",
74 value: resp as U,
75 error: null,
76 })
77 }
78 }
79 } catch (error) {
80 setResult({
81 state: "loaded",
82 value: null,
83 error: error as Error,
84 })
85 }
86 }, [loader]);
87
88 useEffect(() => {
89 console.log("called reload: ", debugName);
90 load();
91 }, [load, debugName]);
92
93 return {
94 reload: load,
95 value: result.value,
96 error: result.error,
97 loading: result.state === "loading",
98 waiting: result.state === "waiting",
99 setData: (val) => {

Callers 2

FetchDataGuardedFunction · 0.85
FetchDataFunction · 0.85

Calls 2

isErrorResponseFunction · 0.85
logMethod · 0.80

Tested by

no test coverage detected