fix(admin lists): 검색 조건 변경 시 자동 갱신 (실시간 필터링)
Deploy momo-erp / deploy (push) Successful in 1m58s

내 출고 이력처럼 검색 조건 변경 즉시 리스트 갱신 — 조회 버튼 불필요.
useEffect 의존성을 빈 배열 → [load] (load 의 deps 에 검색 조건 포함)
패턴으로 통일.

- admin/orders: status/dateFrom/dateTo/keyword 변경 시 즉시
- admin/payments: dateFrom/dateTo/keyword/payFilter
- admin/inventory: whFilter/keyword (load 를 useCallback 으로 wrap)

기타 페이지(invoices/inbounds/procurements/proc-payments/einvoices) 는
이미 [load] 패턴으로 자동 갱신 적용된 상태.
This commit is contained in:
chpark
2026-05-15 02:40:47 +09:00
parent 0e041676b7
commit d36d256f27
3 changed files with 8 additions and 7 deletions
+5 -4
View File
@@ -1,6 +1,6 @@
"use client";
import { useEffect, useMemo, useState } from "react";
import { useEffect, useMemo, useState, useCallback } from "react";
import { Plus, Search, Trash2, History, ArrowRightLeft, Package, LayoutGrid, Columns3 } from "lucide-react";
import { useRouter } from "next/navigation";
import Swal from "sweetalert2";
@@ -58,13 +58,13 @@ export default function InventoryPage() {
return { items: itemList, warehouses: allWhs, cell };
}, [list, whs]);
const load = async () => {
const load = useCallback(async () => {
const res = await fetch("/api/m/inventory/list", {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ whObjid: whFilter || undefined, keyword: keyword || undefined }),
});
setList((await res.json()).RESULTLIST ?? []);
};
}, [whFilter, keyword]);
const loadMeta = async () => {
const w = await (await fetch("/api/m/warehouses/list", { method: "POST" })).json();
setWhs(w.RESULTLIST ?? []);
@@ -72,7 +72,8 @@ export default function InventoryPage() {
setItems(i.RESULTLIST ?? []);
};
useEffect(() => { loadMeta(); load(); }, []); // eslint-disable-line
useEffect(() => { loadMeta(); }, []);
useEffect(() => { load(); }, [load]);
const addLine = () => {
if (!pickItem) return;
+1 -1
View File
@@ -115,7 +115,7 @@ export default function AdminOrdersPage() {
// 최초 로드만 자동, 검색 조건 변경은 [조회] 버튼으로
// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => { load(); }, []);
useEffect(() => { load(); }, [load]);
const reloadDetail = useCallback(async () => {
if (!activeId) { setDetail(null); return; }
+2 -2
View File
@@ -49,8 +49,8 @@ export default function PaymentsPage() {
}
}, [dateFrom, dateTo, keyword, payFilter]);
// 최초 1회만 자동 로드. 검색 조건 변경은 [조회] 버튼으로
useEffect(() => { load(); }, []); // eslint-disable-line
// 검색 조건 변경 시 즉시 갱신
useEffect(() => { load(); }, [load]);
const onPay = async (o: Order) => {
const remain = Number(o.TOTAL_AMOUNT) - Number(o.PAID_AMOUNT || 0);