ERP-node/frontend/hooks/useReportList.ts

66 lines
1.6 KiB
TypeScript
Raw Normal View History

import { useState, useEffect } from "react";
2025-10-01 11:41:03 +09:00
import { ReportMaster, GetReportsParams } from "@/types/report";
import { reportApi } from "@/lib/api/reportApi";
import { useToast } from "@/hooks/use-toast";
export function useReportList() {
const [reports, setReports] = useState<ReportMaster[]>([]);
const [total, setTotal] = useState(0);
const [page, setPage] = useState(1);
const [limit] = useState(20);
const [isLoading, setIsLoading] = useState(false);
const [searchText, setSearchText] = useState("");
const { toast } = useToast();
const fetchReports = async () => {
2025-10-01 11:41:03 +09:00
setIsLoading(true);
try {
const params: GetReportsParams = {
page,
limit,
searchText,
useYn: "Y",
sortBy: "created_at",
sortOrder: "DESC",
};
const response = await reportApi.getReports(params);
if (response.success && response.data) {
setReports(response.data.items);
setTotal(response.data.total);
}
} catch (error: any) {
console.error("리포트 목록 조회 에러:", error);
2025-10-01 11:41:03 +09:00
toast({
title: "오류",
description: error.message || "리포트 목록을 불러오는데 실패했습니다.",
variant: "destructive",
});
} finally {
setIsLoading(false);
}
};
2025-10-01 11:41:03 +09:00
useEffect(() => {
fetchReports();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [page, searchText]);
2025-10-01 11:41:03 +09:00
const handleSearch = (text: string) => {
2025-10-01 11:41:03 +09:00
setSearchText(text);
setPage(1);
};
2025-10-01 11:41:03 +09:00
return {
reports,
total,
page,
limit,
isLoading,
refetch: fetchReports,
setPage,
handleSearch,
};
}