fix: mapSearchBar 주석 처리
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
import { getFetch } from "@/components/lib/api";
|
||||
|
||||
export type wrMapType = wrMapState & wrMapActions;
|
||||
|
||||
export type wrMapState = {
|
||||
wrMap: {
|
||||
buildingSearchRes: any[]
|
||||
} // 건물 검색 결과 데이터
|
||||
};
|
||||
|
||||
type wrMapActions = {
|
||||
buildingNmSearch: (
|
||||
flg: string,
|
||||
sigunCode: string,
|
||||
searchNm: string | undefined
|
||||
) => void;
|
||||
buildingNmSearchMultiple: (
|
||||
checkedLayers: string[],
|
||||
sigunCode: string,
|
||||
searchNm: string | undefined
|
||||
) => void; // 여러 레이어 동시 검색 함수 추가
|
||||
};
|
||||
|
||||
export const wrMapStateExport: wrMapState = {
|
||||
wrMap: {
|
||||
buildingSearchRes: []
|
||||
}
|
||||
};
|
||||
|
||||
// 레이어 타입과 플래그 매핑
|
||||
const LAYER_FLAG_MAP: { [key: string]: string } = {
|
||||
// '46': '???', // 하수처리시설
|
||||
// '47': '???', // 하수재이용시설
|
||||
'48': 'RNB', // 빗물이용시설
|
||||
'49': 'RST', // 중수도시설
|
||||
'50': 'HTB', // 온배수시설
|
||||
};
|
||||
|
||||
const findBdst = async (flg: string, sggCd: string, searchTxt: string | undefined) => {
|
||||
return await getFetch('wr', `/reuseFc/building/${flg}/${sggCd}` + (searchTxt ? `/${searchTxt}` : ''))
|
||||
}
|
||||
|
||||
export const wrMapActionsExport: (set: any) => wrMapActions = (
|
||||
set: any
|
||||
) => {
|
||||
return {
|
||||
buildingNmSearch: async (
|
||||
flg: string,
|
||||
sigunCode: string,
|
||||
searchNm: string | undefined
|
||||
) => {
|
||||
try {
|
||||
// if (!searchNm || searchNm.length < 2) {
|
||||
// set((state: wrMapState) => ({
|
||||
// ...state,
|
||||
// buildingSearchData: []
|
||||
// }));
|
||||
// return;
|
||||
// }
|
||||
console.log("건축물 코드, 시군구 코드, 검색어: ", flg, sigunCode, searchNm);
|
||||
|
||||
const response = await findBdst(flg, sigunCode, searchNm);
|
||||
console.log("response: ", response);
|
||||
|
||||
// API 응답을 SearchInputText 형식으로 변환
|
||||
const searchListFormatted = (response || []).map((building: any) => ({
|
||||
searchNm: building.bdstNm,
|
||||
searchPk: String(building.bdstInfoPk),
|
||||
dmdCoNm: building.bdstNm,
|
||||
layerType: flg,
|
||||
...building
|
||||
}));
|
||||
|
||||
// findBdst와 유사한 API 호출
|
||||
// findBdst(flg, sigunCode || "", searchNm).then(() => {
|
||||
// console.log("건물 검색 API 호출: ", sigunCode, searchNm, flg);
|
||||
// // bdst.bdstBase를 SearchInputText 형식으로 변환
|
||||
// const searchListFormatted = (state.bdst.bdstBase || []).map((building: any) => ({
|
||||
// searchNm: building.bdstNm,
|
||||
// searchPk: String(building.bdstInfoPk),
|
||||
// dmdCoNm: building.bdstNm,
|
||||
// layerType: flg,
|
||||
// ...building
|
||||
// }));
|
||||
|
||||
// set((state: any) => ({
|
||||
// ...state,
|
||||
// wrMap: {
|
||||
// ...state.wrMap,
|
||||
// buildingSearchData: searchListFormatted
|
||||
// }
|
||||
// }));
|
||||
// });
|
||||
set((state: wrMapState) => ({
|
||||
...state,
|
||||
wrMap: {
|
||||
...state.wrMap,
|
||||
buildingSearchRes: searchListFormatted
|
||||
}
|
||||
}));
|
||||
} catch (error) {
|
||||
console.error("건물 검색 중 오류:", error);
|
||||
}
|
||||
},
|
||||
|
||||
buildingNmSearchMultiple: async (
|
||||
checkedLayers: string[],
|
||||
sigunCode: string,
|
||||
searchNm: string | undefined
|
||||
) => {
|
||||
try {
|
||||
if (!searchNm || searchNm.length < 2) {
|
||||
set((state: any) => ({
|
||||
...state.wrMap,
|
||||
buildingSearchData: []
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
// 체크된 레이어들에 대해 병렬로 API 호출
|
||||
const searchPromises = checkedLayers
|
||||
.filter(layer => LAYER_FLAG_MAP[layer]) // 매핑된 레이어만 필터링
|
||||
.map(layer => {
|
||||
const flg = LAYER_FLAG_MAP[layer];
|
||||
|
||||
return findBdst(flg, sigunCode, searchNm)
|
||||
.then(response => {
|
||||
console.log(`레이어 ${layer}(${flg}) API 응답:`, response);
|
||||
|
||||
const searchListFormatted = (state.bdst.bdstBase || []).map((building: any) => ({
|
||||
searchNm: building.bdstNm,
|
||||
searchPk: String(building.bdstInfoPk),
|
||||
dmdCoNm: building.bdstNm,
|
||||
layerType: flg,
|
||||
...building
|
||||
}));
|
||||
|
||||
return {
|
||||
layerType: layer,
|
||||
flg: flg,
|
||||
data: bdstNames
|
||||
};
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(`레이어 ${layer}(${flg}) 검색 중 오류:`, error);
|
||||
return { layerType: layer, flg: flg, data: [] };
|
||||
});
|
||||
});
|
||||
|
||||
const results = await Promise.all(searchPromises);
|
||||
console.log("다중 레이어 검색 결과:", results);
|
||||
|
||||
// 모든 결과를 하나의 배열로 합치기
|
||||
const allSearchResults = results.reduce((acc, result) => {
|
||||
const formatted = result.data.map((building: any) => ({
|
||||
searchNm: building.bdstNm,
|
||||
searchPk: String(building.bdstInfoPk),
|
||||
dmdCoNm: building.bdstNm,
|
||||
layerType: result.layerType,
|
||||
flg: result.flg,
|
||||
...building.originalData
|
||||
}));
|
||||
return [...acc, ...formatted];
|
||||
}, [] as any[]);
|
||||
|
||||
console.log("최종 합쳐진 검색 결과:", {
|
||||
totalCount: allSearchResults.length,
|
||||
sampleData: allSearchResults.slice(0, 3)
|
||||
});
|
||||
|
||||
set((state: any) => ({
|
||||
...state.wrMap,
|
||||
buildingSearchData: allSearchResults
|
||||
}));
|
||||
|
||||
} catch (error) {
|
||||
console.error("다중 레이어 검색 중 오류:", error);
|
||||
set((state: any) => ({
|
||||
...state,
|
||||
buildingSearchData: []
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user