"use client" import React, { useEffect, useState } from 'react'; import type { SelectDataType } from '@common/business_components/ui/search_input_select'; import { SelectBox } from '@common/business_components/ui/select'; /** * 검색 폼 왼쪽 컴포넌트 타입 * * @param isShowPart 구분 조회 여부 * @param children 자식 컴포넌트 * @param selectSidoData 시도 데이터 * @param selectSigunData 시군구 데이터 * @param selectRegionData 유역 데이터 * @param selectUnitWaterShedData 단위유역 데이터 * @param selectMiddleRegionData 중권역 데이터 * @param selectEnvPartData 환경청 데이터 * @param selectEnvPartSidoData 환경청 시도 데이터 * @param selectEnvPartSigunData 환경청 시군구 데이터 * @param setRtnPartValue 부분 값 변경 핸들러 */ type SearchFormLeftProps = { isShowPart?: boolean | undefined; children: React.ReactNode; selectSidoData?: SelectDataType[] | []; selectSigunData?: SelectDataType[] | []; selectRegionData?: SelectDataType[] | []; selectUnitWaterShedData?: SelectDataType[] | []; selectMiddleRegionData?: SelectDataType[] | []; selectEnvPartData?: EnvPartSelectDataType[] | []; selectEnvPartSidoData?: SelectDataType[] | []; selectEnvPartSigunData?: SelectDataType[] | []; setRtnPartValue?: (value: string) => void; setRtnSidoValue?: (value: string) => void; setRtnSigunValue?: (value: string) => void; setRtnRegionValue?: (value: string) => void; setRtnUnitWaterShedValue?: (value: string) => void; setRtnMiddleRegionValue?: (value: string) => void; setRtnEnvPartValue?: (value: string) => void; setRtnEnvPartSidoValue?: (value: string) => void; setRtnEnvPartSigunValue?: (value: string) => void; setRtnSidoText?: (value: string) => void; setRtnSigunText?: (value: string) => void; resetTrigger?: boolean; isAdmin?: boolean; } export type EnvPartSelectDataType = SelectDataType & { adstDliStrCd: string, } const selectPartData: SelectDataType[] = [ { text: "행정별", val: 'A' }, { text: "유역별", val: 'R' }, { text: "환경청별", val: 'G' }, ]; function MapSearchFormLeft({ isShowPart = false, children, selectSidoData = [], selectSigunData = [], selectRegionData = [], selectUnitWaterShedData = [], selectMiddleRegionData = [], selectEnvPartData = [], setRtnPartValue, setRtnSidoValue, setRtnSidoText, setRtnSigunValue, setRtnSigunText, setRtnRegionValue, setRtnUnitWaterShedValue, setRtnMiddleRegionValue, setRtnEnvPartValue, setRtnEnvPartSidoValue, setRtnEnvPartSigunValue, resetTrigger = false, isAdmin = false }: SearchFormLeftProps) { /******************선택된 데이터******************/ const [partValue, setPartValue] = useState('A'); //행정별 시도 시군구 const [sidoValue, setSidoValue] = useState('0'); const [sigunValue, setSigunValue] = useState('0'); const [sidoText, setSidoText] = useState(''); const [sigunText, setSigunText] = useState(''); //유역별 const [regionValue, setRegionValue] = useState('0'); const [unitWaterShedValue, setUnitWaterShedValue] = useState('0'); const [middleRegionValue, setMiddleRegionValue] = useState('0'); //환경청별 시도 시군구 const [envPartValue, setEnvPartValue] = useState('0'); // 환경청 const [filteredEnvPartSigunDataSelected, setFilteredEnvPartSigunDataSelected] = useState([]); /****************** 셀렉트 리스트 데이터. ******************/ // 조회된 조건에 맞는 시도 시군 유역 const [filteredSigunData, setFilteredSigunData] = useState([{ text: "전체", val: '0' }]); const [filteredUnitWaterShedData, setFilteredUnitWaterShedData] = useState([{ text: "전체", val: '0' }]); const [filteredMiddleRegionData, setFilteredMiddleRegionData] = useState([{ text: "전체", val: '0' }]); // 조회된 조건에 맞는 환경청 시도 시군 const [filteredEnvPartData, setFilteredEnvPartData] = useState([{ text: "전체", val: '0', adstDliStrCd: '' }]); const [filteredEnvPartSidoData, setFilteredEnvPartSidoData] = useState([{ text: "전체", val: '0', adstDliStrCd: '' }]); const [filteredEnvPartSigunData, setFilteredEnvPartSigunData] = useState([{ text: "전체", val: '0' }]); // 시군구 세팅 const initializeSigunData = (sidoCd: string) => { if (sidoCd === '0') { setSigunValue('0'); setFilteredSigunData([{ text: "전체", val: '0' }]); } else { const newFilteredData = [ { text: "전체", val: '0' }, ...selectSigunData.filter((item: SelectDataType) => item.val.substring(0, 2) === sidoCd) ]; setSigunValue('0'); setFilteredSigunData(newFilteredData); } } // 단위유역 세팅 const initializeUnitWaterShedData = (regionCd: string) => { if (regionCd === '0') { setUnitWaterShedValue('0'); setFilteredUnitWaterShedData([{ text: "전체", val: '0' }]); } else { const newFilteredData = [ { text: "전체", val: '0' }, ...selectUnitWaterShedData.filter((item: SelectDataType) => item.val.substring(0, 1) === regionCd) ]; setUnitWaterShedValue('0'); setFilteredUnitWaterShedData(newFilteredData); } } // 중권역 세팅 const initializeMiddleRegionData = (unitWaterShedCd: string) => { if (unitWaterShedCd === '0') { setMiddleRegionValue('0'); setFilteredMiddleRegionData([{ text: "전체", val: '0' }]); } else { const newFilteredData = [ { text: "전체", val: '0' }, ...selectMiddleRegionData.filter((item: SelectDataType) => item.val.substring(0, 2) === unitWaterShedCd) ]; setMiddleRegionValue('0'); setFilteredMiddleRegionData(newFilteredData); } } // 환경청 세팅 - 시도 const initializeCityDataByEnvPartSido = (envPartCd: string) => { const foundEnvPart = selectEnvPartData.find((item: EnvPartSelectDataType) => item.val === envPartCd); const cityArray = foundEnvPart?.adstDliStrCd.toString().split('|').join('').split(','); // 시군구 데이터 const envSigunData = selectSigunData.filter((item: SelectDataType) => cityArray?.includes(item.val)); // 환경청 시도 데이터 const sidoArray = [...new Set(envSigunData.map((item: SelectDataType) => item.val.substring(0, 2)))]; const envSidoData = selectSidoData.filter((item: SelectDataType) => sidoArray?.includes(item.val)); setFilteredEnvPartSigunDataSelected(envSigunData); setFilteredEnvPartSidoData([ { text: "전체", val: '0', adstDliStrCd: '' }, ...envSidoData.map((item: SelectDataType) => ({ text: item.text, val: item.val, adstDliStrCd: '' })) ]); } // 환경청 세팅 - 시군구 const initializeCityDataByEnvPartSigun = (sidoCd: string) => { const envSigunData = filteredEnvPartSigunDataSelected.filter((item: SelectDataType) => item.val.substring(0, 2) === sidoCd); setFilteredEnvPartSigunData([ { text: "전체", val: '0' }, ...envSigunData.map((item: SelectDataType) => ({ text: item.text, val: item.val })) ]); } const onSelectValue = (val: string, type: string) => { let selectedSido; let selectedSigun; let selectedEnvPartSido; let selectedEnvPartSigun; switch (type) { case 'part': setPartValue(val); if (setRtnPartValue) { setRtnPartValue(val); } // 구분 if (val == 'R') { initializeMiddleRegionData('0'); initializeUnitWaterShedData('0'); } else if (val == 'G') { setFilteredEnvPartData([ { text: "전체", val: '0', adstDliStrCd: '' }, ...selectEnvPartData.filter((item: EnvPartSelectDataType) => item.val !== null && item.adstDliStrCd !== '') ]); setEnvPartValue('0'); initializeCityDataByEnvPartSido('0'); } else { initializeSigunData('0'); onSelectValue(selectSigunData[0]?.val || '0', 'sigun'); } // 다른 selectbox 전체로 초기화 onSelectValue(selectSidoData[0]?.val || '0', 'sido'); onSelectValue(selectSigunData[0]?.val || '0', 'sigun'); break; case 'sido': setSidoValue(val); selectedSido = selectSidoData.find(item => item.val === val); setSidoText(selectedSido?.text || ''); if (setRtnSidoValue) { setRtnSidoValue(val); } if (setRtnSidoText) { setRtnSidoText(selectedSido?.text || ''); } initializeSigunData(val); onSelectValue(selectSigunData[0]?.val || '0', 'sigun'); break; case 'sigun': if (setRtnSigunValue) { setRtnSigunValue(val); } setSigunValue(val); selectedSigun = filteredSigunData.find(item => item.val === val); if (setRtnSigunText) { setRtnSigunText(selectedSigun?.text || ''); } setSigunText(selectedSigun?.text || ''); break; // 유역 세팅 case 'region': setRegionValue(val); if (setRtnRegionValue) { setRtnRegionValue(val); } initializeUnitWaterShedData(val); onSelectValue(selectUnitWaterShedData[0]?.val || '0', 'unitWaterShed'); break; case 'unitWaterShed': setUnitWaterShedValue(val); if (setRtnUnitWaterShedValue) { setRtnUnitWaterShedValue(val); } initializeMiddleRegionData(val); onSelectValue(selectMiddleRegionData[0]?.val || '0', 'middleRegion'); break; case 'middleRegion': setMiddleRegionValue(val); if (setRtnMiddleRegionValue) { setRtnMiddleRegionValue(val); } break; // 환경청 세팅 case 'envPart': setEnvPartValue(val); if (setRtnEnvPartValue) { setRtnEnvPartValue(val); } initializeCityDataByEnvPartSido(val); onSelectValue(filteredEnvPartSidoData[0]?.val || '0', 'envPartSido'); break; case 'envPartSido': setSidoValue(val); selectedEnvPartSido = filteredEnvPartSidoData.find(item => item.val === val); setSidoText(selectedEnvPartSido?.text || ''); if (setRtnEnvPartSidoValue) { setRtnEnvPartSidoValue(val); } initializeCityDataByEnvPartSigun(val); onSelectValue(filteredEnvPartSigunData[0]?.val || '0', 'envPartSigun'); break; case 'envPartSigun': setSigunValue(val); selectedEnvPartSigun = filteredEnvPartSigunData.find(item => item.val === val); setSigunText(selectedEnvPartSigun?.text || ''); if (setRtnEnvPartSigunValue) { setRtnEnvPartSigunValue(val); } break; } } // 리셋 함수 const resetAllValues = () => { setPartValue('A'); setSidoValue('0'); setSigunValue('0'); setRegionValue('0'); setUnitWaterShedValue('0'); setMiddleRegionValue('0'); setEnvPartValue('0'); setFilteredSigunData([{ text: "전체", val: '0' }]); setFilteredUnitWaterShedData([{ text: "전체", val: '0' }]); setFilteredMiddleRegionData([{ text: "전체", val: '0' }]); setFilteredEnvPartData([{ text: "전체", val: '0', adstDliStrCd: '' }]); setFilteredEnvPartSidoData([{ text: "전체", val: '0', adstDliStrCd: '' }]); setFilteredEnvPartSigunData([{ text: "전체", val: '0' }]); if (setRtnPartValue) setRtnPartValue('A'); if (setRtnSidoValue) setRtnSidoValue('0'); if (setRtnSigunValue) setRtnSigunValue('0'); if (setRtnRegionValue) setRtnRegionValue('0'); if (setRtnUnitWaterShedValue) setRtnUnitWaterShedValue('0'); if (setRtnMiddleRegionValue) setRtnMiddleRegionValue('0'); if (setRtnEnvPartValue) setRtnEnvPartValue('0'); if (setRtnEnvPartSidoValue) setRtnEnvPartSidoValue('0'); if (setRtnEnvPartSigunValue) setRtnEnvPartSigunValue('0'); }; // 리셋 트리거 변경 감지 useEffect(() => { if (resetTrigger) { resetAllValues(); // 리셋 후 트리거를 false로 설정 if (setRtnPartValue) { setRtnPartValue('0'); } } }, [resetTrigger]); return ( isShowPart ? (
onSelectValue(val.toString(), 'part')} value={partValue} selectClass={'w-32'} /> {partValue === 'R' ? ( <> onSelectValue(val.toString(), 'region')} value={regionValue} selectClass={'w-44'} /> onSelectValue(val.toString(), 'unitWaterShed')} value={unitWaterShedValue} selectClass={'w-44'} /> onSelectValue(val.toString(), 'middleRegion')} value={middleRegionValue} selectClass={'w-44'} /> ) : partValue === 'G' ? ( <> onSelectValue(val.toString(), 'envPart')} value={envPartValue} selectClass={'w-44'} /> onSelectValue(val.toString(), 'envPartSido')} value={sidoValue} selectClass={'w-44'} /> onSelectValue(val.toString(), 'envPartSigun')} value={sigunValue} selectClass={'w-44'} /> ) : ( <> onSelectValue(val.toString(), 'sido')} value={sidoValue} selectClass={'w-44'} /> onSelectValue(val.toString(), 'sigun')} value={sigunValue} selectClass={'w-44'} /> )}
) : (
{children}
) ) } export { MapSearchFormLeft };