From badb6821631dc0902630f33cd334ac3faa8d8599 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 3 Apr 2025 18:39:54 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=ED=8F=BC=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entities/posting/ui/posting-dialog.tsx | 119 ++++++++++-------- 1 file changed, 69 insertions(+), 50 deletions(-) diff --git a/apps/cs/src/entities/posting/ui/posting-dialog.tsx b/apps/cs/src/entities/posting/ui/posting-dialog.tsx index c28448b50..ed0e25fe4 100644 --- a/apps/cs/src/entities/posting/ui/posting-dialog.tsx +++ b/apps/cs/src/entities/posting/ui/posting-dialog.tsx @@ -24,15 +24,15 @@ import type { PageableList } from "@/shared/model"; import { ENDPOINT } from "@/shared/config"; import { type PostingType } from "../model/posting-interface"; -type PostingTarget = { +interface PostingTarget { pstgTrgtNm: string; pstgTrgtNo: number; -}; +} -type PostingDialogProps = { +interface PostingDialogProps { postingType: PostingType; postingTargets: PostingTarget[]; -}; +} const POSTING_TYPE_LABEL = { POPUP: "팝업", @@ -42,6 +42,9 @@ const POSTING_TYPE_LABEL = { function PostingDialog({ postingType, postingTargets }: PostingDialogProps) { const [selectedRows, setSelectedRows] = useState([]); + const [rememberSelectValues, setRememberSelectValues] = useState< + Record + >({}); const { data: siteList } = useQuery>({ queryKey: [ENDPOINT.CMS_SERVICE.SITES], @@ -54,13 +57,49 @@ function PostingDialog({ postingType, postingTargets }: PostingDialogProps) { name: "pstg", }); - const handleSelectAll = () => { - if (selectedRows.length === (siteList?.content.length ?? 0)) { - initialize(); - } else { - setSelectedRows(siteList?.content.map((_, i) => i) ?? []); - handleAllSelectRow(); - } + const isAllSelected = + siteList && selectedRows.length === siteList.content.length; + + const initialize = () => { + setSelectedRows([]); + replace([]); + }; + + const handleOpenChange = (open: boolean) => { + if (open) return true; + initialize(); + }; + + const handleAppendFields = (i: number) => { + const siteId = siteList?.content[i]?.siteId ?? ""; + const newFields = postingTargets.map((target) => ({ + siteId, + pstgTypeCd: postingType, + pstgTrgtNo: target.pstgTrgtNo, + pstgBgngDt: "", + pstgEndDt: "", + pstgPrdSeCd: rememberSelectValues[siteId] ?? "", + delYn: "N", + mode: "C", + })); + append(newFields); + }; + + const handleUpdateFields = + (siteId: string) => (obj: Record) => { + const updatedFields = fields.map((field) => + "siteId" in field && field.siteId === siteId + ? { ...field, ...obj } + : field, + ); + replace(updatedFields); + }; + + const handleRemoveFields = (siteId: string) => { + const filteredFields = fields.filter( + (field) => "siteId" in field && field.siteId !== siteId, + ); + replace(filteredFields); }; const handleSelectRow = (i: number) => { @@ -72,7 +111,6 @@ function PostingDialog({ postingType, postingTargets }: PostingDialogProps) { if (isSelected) { const siteId = siteList?.content[i]?.siteId; if (!siteId) return; - handleRemoveFields(siteId); return; } @@ -80,48 +118,26 @@ function PostingDialog({ postingType, postingTargets }: PostingDialogProps) { handleAppendFields(i); }; - const handleAllSelectRow = () => { - replace([]); - siteList?.content.forEach((_, i) => { - handleAppendFields(i); - }); - }; - - const handleAppendFields = (i: number) => { - for (const target of postingTargets) { - append({ - siteId: siteList?.content[i]?.siteId ?? "", - pstgTypeCd: postingType, - pstgTrgtNo: target.pstgTrgtNo, - pstgBgngDt: "", - pstgEndDt: "", - pstgPrdSeCd: "", - delYn: "N", - mode: "C", - }); + const handleSelectAll = () => { + if (selectedRows.length === (siteList?.content.length ?? 0)) { + initialize(); + } else { + setSelectedRows(siteList?.content.map((_, i) => i) ?? []); + replace([]); + siteList?.content.forEach((_, i) => handleAppendFields(i)); } }; - const handleRemoveFields = (siteId: string) => { - const filteredFields = fields.filter( - (field) => "siteId" in field && field.siteId !== siteId, - ); - replace(filteredFields); + const handleSelectValueChange = (siteId: string) => (value: string) => { + setRememberSelectValues((prev) => ({ + ...prev, + [siteId]: value, + })); + handleUpdateFields(siteId)({ + pstgPrdSeCd: value, + }); }; - const handleOpenChange = (open: boolean) => { - if (open) return true; - initialize(); - }; - - const initialize = () => { - setSelectedRows([]); - replace([]); - }; - - const isAllSelected = - siteList && selectedRows.length === siteList.content.length; - return ( @@ -176,7 +192,10 @@ function PostingDialog({ postingType, postingTargets }: PostingDialogProps) { {site.siteNm} - + ))}