diff --git a/apps/web/src/app/university/SearchResultsContent.tsx b/apps/web/src/app/university/SearchResultsContent.tsx index 877c229a..81415e86 100644 --- a/apps/web/src/app/university/SearchResultsContent.tsx +++ b/apps/web/src/app/university/SearchResultsContent.tsx @@ -11,6 +11,7 @@ import { import CloudSpinnerPage from "@/components/ui/CloudSpinnerPage"; import FloatingUpBtn from "@/components/ui/FloatingUpBtn"; import UniversityCards from "@/components/university/UniversityCards"; +import { COUNTRY_CODE_MAP } from "@/constants/university"; import { type CountryCode, type LanguageTestType, RegionEnumExtend } from "@/types/university"; import RegionFilter from "./RegionFilter"; import SearchBar from "./SearchBar"; @@ -32,9 +33,12 @@ const SearchResultsContent = () => { const countries = searchParams.getAll("countryCode"); // URL에서 전달된 국가 목록을 기본으로 사용 - const filteredCountries = countries as CountryCode[]; + const filteredCountries = countries.filter((country): country is CountryCode => + Object.hasOwn(COUNTRY_CODE_MAP, country), + ); + const hasFilterParams = Boolean(lang) || filteredCountries.length > 0; - if (!lang || !countries) { + if (!hasFilterParams) { return { isTextSearch: true, searchText: text, diff --git a/apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx b/apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx index 80050f0a..0b533495 100644 --- a/apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx +++ b/apps/web/src/app/university/[homeUniversity]/search/_ui/SearchPageContent.tsx @@ -54,13 +54,14 @@ const SearchPageContent = ({ homeUniversitySlug }: SearchPageContentProps) => { // 필터 검색 const onSubmit: SubmitHandler = (data) => { const queryParams = new URLSearchParams(); + const availableCountryCodeSet = new Set(availableCountries.map(([code]) => code as CountryCode)); if (data.languageTestType) { queryParams.append("languageTestType", data.languageTestType); } [data.country1, data.country2, data.country3].forEach((code) => { - if (code) { + if (code && availableCountryCodeSet.has(code)) { queryParams.append("countryCode", code); } }); diff --git a/apps/web/src/app/university/list/[homeUniversityName]/SearchResultsContent.tsx b/apps/web/src/app/university/list/[homeUniversityName]/SearchResultsContent.tsx index 8bba124d..537c6b66 100644 --- a/apps/web/src/app/university/list/[homeUniversityName]/SearchResultsContent.tsx +++ b/apps/web/src/app/university/list/[homeUniversityName]/SearchResultsContent.tsx @@ -11,6 +11,7 @@ import { import CloudSpinnerPage from "@/components/ui/CloudSpinnerPage"; import FloatingUpBtn from "@/components/ui/FloatingUpBtn"; import UniversityCards from "@/components/university/UniversityCards"; +import { COUNTRY_CODE_MAP } from "@/constants/university"; import { type CountryCode, type HomeUniversityName, type LanguageTestType, RegionEnumExtend } from "@/types/university"; import RegionFilter from "../../RegionFilter"; import SearchBar from "../../SearchBar"; @@ -36,9 +37,12 @@ const SearchResultsContentInner = ({ homeUniversityName }: SearchResultsContentI const countries = searchParams.getAll("countryCode"); // URL에서 전달된 국가 목록을 기본으로 사용 - const filteredCountries = countries as CountryCode[]; + const filteredCountries = countries.filter((country): country is CountryCode => + Object.hasOwn(COUNTRY_CODE_MAP, country), + ); + const hasFilterParams = Boolean(lang) || filteredCountries.length > 0; - if (!lang || !countries) { + if (!hasFilterParams) { return { isTextSearch: true, searchText: text, diff --git a/apps/web/src/app/university/search/PageContent.tsx b/apps/web/src/app/university/search/PageContent.tsx index b6e8966a..25dd7acf 100644 --- a/apps/web/src/app/university/search/PageContent.tsx +++ b/apps/web/src/app/university/search/PageContent.tsx @@ -48,6 +48,7 @@ const SchoolSearchForm = ({ homeUniversitySlug }: SchoolSearchFormProps) => { const onSubmit: SubmitHandler = (data) => { const queryParams = new URLSearchParams(); + const availableCountryCodeSet = new Set(availableCountries.map(([code]) => code as CountryCode)); if (data.searchText) { queryParams.append("searchText", data.searchText); @@ -57,11 +58,15 @@ const SchoolSearchForm = ({ homeUniversitySlug }: SchoolSearchFormProps) => { } [data.country1, data.country2, data.country3].forEach((code) => { - if (code) { + if (code && availableCountryCodeSet.has(code)) { queryParams.append("countryCode", code); } }); + if (data.regions && data.regions.length > 0) { + data.regions.forEach((region) => queryParams.append("region", region)); + } + const queryString = queryParams.toString(); router.push(`/university/${homeUniversitySlug}?${queryString}`); }; diff --git a/apps/web/src/constants/university.ts b/apps/web/src/constants/university.ts index d5248acd..5a89afe3 100644 --- a/apps/web/src/constants/university.ts +++ b/apps/web/src/constants/university.ts @@ -7,7 +7,7 @@ import { type TestScoreInfo, } from "@/types/university"; -export const REGIONS_SEARCH = ["유럽권", "미주권", "아시아권"] as const; +export const REGIONS_SEARCH = ["유럽권", "미주권", "아시아권", "중국권"] as const; export const REGIONS_KO = ["유럽권", "미주권", "아시아권", "중국권"];