36 lines
906 B
TypeScript
36 lines
906 B
TypeScript
"use client";
|
|
|
|
import { useState, useEffect, useCallback } from "react";
|
|
|
|
// Generic data type for follow_ups
|
|
type Follow_up = Record<string, unknown>;
|
|
|
|
/**
|
|
* Fetch and manage follow_ups data.
|
|
*/
|
|
export function useFollow_ups() {
|
|
const [data, setData] = useState<Follow_up[]>([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
const fetchData = useCallback(async () => {
|
|
try {
|
|
setLoading(true);
|
|
setError(null);
|
|
const res = await fetch(`/api/follow_ups`);
|
|
const json = await res.json();
|
|
setData(Array.isArray(json) ? json : json?.data || []);
|
|
} catch (e) {
|
|
setError(e instanceof Error ? e.message : "Failed to load data");
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
fetchData();
|
|
}, [fetchData]);
|
|
|
|
return { data, loading, error, refetch: fetchData };
|
|
}
|