내 출고 이력처럼 검색 조건 변경 즉시 리스트 갱신 — 조회 버튼 불필요. 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:
@@ -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;
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user