diff --git a/apps/st/src/components/statistics/verification/generalVerification/FomulaDialog.tsx b/apps/st/src/components/statistics/verification/generalVerification/FomulaDialog.tsx index a559008d0..b2873d155 100644 --- a/apps/st/src/components/statistics/verification/generalVerification/FomulaDialog.tsx +++ b/apps/st/src/components/statistics/verification/generalVerification/FomulaDialog.tsx @@ -10,6 +10,7 @@ import { DialogClose, Textarea, Skeleton, + Input, } from "@common/components"; import { CodeSelect } from "@/entities/code"; @@ -41,6 +42,9 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo const [showCommonColumns, setShowCommonColumns] = useState(true); const [showTargetColumns, setShowTargetColumns] = useState(true); const [showRefColumns, setShowRefColumns] = useState(true); + const [commonColumnSearchValue, setCommonColumnSearchValue] = useState(''); + const [targetColumnSearchValue, setTargetColumnSearchValue] = useState(''); + const [refColumnSearchValue, setRefColumnSearchValue] = useState(''); /** 참조 통계 - 다이얼로그 내부에서만 사용. 열 때마다 해당 행(data)의 저장값으로 초기화, 저장 시에만 부모에 반영 예정 */ const [refStatsCdLocal, setRefStatsCdLocal] = useState(''); /** 수식 = 토큰 배열. 한글명 중복 시 출처(공통/대상/참조)별 engColNm 보존 */ @@ -207,7 +211,7 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo refStatsCd: data.refStatsCd, }); } - + if (response?.status === 'success') { setColumnInfo(response.data); @@ -359,10 +363,57 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo setFormulaSaveError(null); setSelectedColumnInfo(null); setRefStatsCdLocal(''); + setCommonColumnSearchValue(''); + setTargetColumnSearchValue(''); + setRefColumnSearchValue(''); } onOpenChange?.(nextOpen); }; + const handleSearchColumn = (value: string, type: string) => { + if (type === 'common') { + setCommonColumnSearchValue(value); + } else if (type === 'target') { + setTargetColumnSearchValue(value); + } else { + setRefColumnSearchValue(value); + } + }; + + const normalizeSearch = (v: string) => v.replace(/\s+/g, "").toLowerCase(); + + const commonSearch = normalizeSearch(commonColumnSearchValue); + const commonColumns = columnInfo?.commonColumnInfo ?? []; + const filteredCommonColumns = + commonSearch.length > 0 + ? commonColumns.filter((c) => { + const korn = normalizeSearch(c.kornColNm ?? ''); + const eng = normalizeSearch(c.engColNm ?? ''); + return korn.includes(commonSearch) || eng.includes(commonSearch); + }) + : commonColumns; + + const targetSearch = normalizeSearch(targetColumnSearchValue); + const targetColumns = columnInfo?.targetColumnInfo?.colList ?? []; + const filteredTargetColumns = + targetSearch.length > 0 + ? targetColumns.filter((t) => { + const korn = normalizeSearch(t.kornColNm ?? ''); + const eng = normalizeSearch(t.engColNm ?? ''); + return korn.includes(targetSearch) || eng.includes(targetSearch); + }) + : targetColumns; + + const refSearch = normalizeSearch(refColumnSearchValue); + const filterdRefColumns = + refSearch.length > 0 + ? refColList.filter((r) => { + const korn = normalizeSearch(r.kornColNm ?? ''); + const eng = normalizeSearch(r.engColNm ?? ''); + return korn.includes(refSearch) || eng.includes(refSearch); + }) + : refColList; + return ( @@ -446,21 +497,30 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo {showCommonColumns ? "접기" : "펼치기"} + {showCommonColumns && +
+ handleSearchColumn(e.target.value, 'common')} + placeholder="검색어를 입력하세요." + /> +
} {showCommonColumns ? (
{columnInfo?.commonColumnInfo?.length && columnInfo.commonColumnInfo.length > 0 ? - columnInfo.commonColumnInfo.map((c) => ( - - )) + filteredCommonColumns.map((c) => ( + + )) : } @@ -479,20 +539,30 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo {showTargetColumns ? "접기" : "펼치기"}
+ {showTargetColumns && +
+ handleSearchColumn(e.target.value, 'target')} + placeholder="검색어를 입력하세요." + /> +
+ } {showTargetColumns ? (
{columnInfo?.targetColumnInfo?.colList.length && columnInfo.targetColumnInfo.colList.length > 0 ? - columnInfo.targetColumnInfo.colList.map((t) => ( - - )) + filteredTargetColumns.map((t) => ( + + )) : } @@ -529,10 +599,20 @@ const FomulaDialog = ({ open, onOpenChange, data, trgtStatsCd, trgtStatsNm, onCo {refStatsChangeNotice}

)} + {(refStatsCdLocal && showRefColumns) && +
+ handleSearchColumn(e.target.value, 'ref')} + placeholder="검색어를 입력하세요." + /> +
+ } {showRefColumns ? (
- {(refColList?.length ?? 0) > 0 ? - refColList.map((r) => ( + {(filterdRefColumns?.length ?? 0) > 0 ? + filterdRefColumns.map((r) => (