summaryrefslogtreecommitdiff
path: root/lib/compliance/table/compliance-survey-templates-table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compliance/table/compliance-survey-templates-table.tsx')
-rw-r--r--lib/compliance/table/compliance-survey-templates-table.tsx77
1 files changed, 34 insertions, 43 deletions
diff --git a/lib/compliance/table/compliance-survey-templates-table.tsx b/lib/compliance/table/compliance-survey-templates-table.tsx
index c2e441ec..185474cc 100644
--- a/lib/compliance/table/compliance-survey-templates-table.tsx
+++ b/lib/compliance/table/compliance-survey-templates-table.tsx
@@ -1,6 +1,7 @@
"use client";
import * as React from "react";
+import { useQueryState } from "nuqs";
import { useDataTable } from "@/hooks/use-data-table";
import { DataTable } from "@/components/data-table/data-table";
import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar";
@@ -8,33 +9,56 @@ import type {
DataTableAdvancedFilterField,
DataTableRowAction,
DataTableFilterField,
+ Filter,
} from "@/types/table"
import { getColumns } from "./compliance-survey-templates-columns";
import { ComplianceTemplateEditSheet } from "./compliance-template-edit-sheet";
import { DeleteComplianceTemplatesDialog } from "./delete-compliance-templates-dialog";
import { ComplianceSurveyTemplatesToolbarActions } from "./compliance-survey-templates-toolbar";
import { complianceSurveyTemplates } from "@/db/schema/compliance";
-import { getComplianceSurveyTemplatesWithSorting } from "../services";
+import { getFiltersStateParser } from "@/lib/parsers";
interface ComplianceSurveyTemplatesTableProps {
promises?: Promise<[{ data: typeof complianceSurveyTemplates.$inferSelect[]; pageCount: number }] >;
}
export function ComplianceSurveyTemplatesTable({ promises }: ComplianceSurveyTemplatesTableProps) {
- // 페이지네이션 모드 데이터
+ // 서버에서 받은 데이터 사용
const paginationData = promises ? React.use(promises) : null;
- const initialData = paginationData ? paginationData[0].data : [];
- const pageCount = paginationData ? paginationData[0].pageCount : 0;
-
+ const [{ data, pageCount }] = paginationData
+ ? paginationData
+ : [{ data: [], pageCount: 0 }];
const [rowAction, setRowAction] = React.useState<DataTableRowAction<typeof complianceSurveyTemplates.$inferSelect> | null>(null);
- const [data, setData] = React.useState(initialData);
- const [currentSorting, setCurrentSorting] = React.useState<{ id: string; desc: boolean }[]>([]);
- // 초기 데이터가 변경되면 data 상태 업데이트
+ // 기본 필터 설정 (isActive = true)
+ const defaultFilter: Filter<typeof complianceSurveyTemplates.$inferSelect>[] = React.useMemo(() => [
+ {
+ id: "isActive",
+ operator: "eq" as const,
+ value: "true",
+ type: "select" as const,
+ rowId: "default-isActive-filter",
+ }
+ ], []);
+
+ // URL에서 필터 읽기
+ const [filters, setFilters] = useQueryState(
+ "filters",
+ getFiltersStateParser<typeof complianceSurveyTemplates.$inferSelect>().withDefault([]).withOptions({
+ clearOnDefault: true,
+ shallow: false,
+ })
+ );
+
+ // 초기 마운트 시 필터가 없으면 기본 필터 설정
+ const hasInitialized = React.useRef(false);
React.useEffect(() => {
- setData(initialData);
- }, [initialData]);
+ if (!hasInitialized.current && filters.length === 0) {
+ hasInitialized.current = true;
+ setFilters(defaultFilter);
+ }
+ }, [filters.length, setFilters, defaultFilter]);
// 컬럼 설정 - 외부 파일에서 가져옴
const columns = React.useMemo(
@@ -84,39 +108,6 @@ export function ComplianceSurveyTemplatesTable({ promises }: ComplianceSurveyTem
clearOnDefault: true,
})
- // 정렬 상태 변경 감지
- React.useEffect(() => {
- const newSorting = table.getState().sorting;
- if (JSON.stringify(newSorting) !== JSON.stringify(currentSorting)) {
- setCurrentSorting(newSorting);
- }
- }, [table.getState().sorting, currentSorting]);
-
- // 정렬이 변경될 때 데이터 다시 로드
- React.useEffect(() => {
- const loadData = async () => {
- try {
- console.log("🔄 정렬 변경으로 데이터 다시 로드:", currentSorting);
-
- // 정렬 상태가 있으면 정렬된 데이터 가져오기
- if (currentSorting && currentSorting.length > 0) {
- const result = await getComplianceSurveyTemplatesWithSorting(currentSorting);
- setData(result.data);
- } else {
- // 기본 정렬로 데이터 가져오기
- const result = await getComplianceSurveyTemplatesWithSorting();
- setData(result.data);
- }
- } catch (error) {
- console.error("데이터 로드 오류:", error);
- }
- };
-
- if (currentSorting.length > 0) {
- loadData();
- }
- }, [currentSorting]);
-
return (
<>
<DataTable table={table}>