- 전체 인라인 SVG를 Google Material Symbols Rounded로 교체 - Icon 컴포넌트 추가, cuisine-icons 매핑 리팩토링 - Tasteby 핀 로고 이미지 적용 (라이트/다크 버전) - 테이블링/캐치테이블 이름 유사도 체크 및 리셋 API 추가 - 어드민 페이지 리셋 버튼 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
/**
|
|
* Cuisine type → Material Symbols icon name mapping.
|
|
* Works with "대분류|소분류" format (e.g. "한식|국밥/해장국").
|
|
*/
|
|
|
|
const CUISINE_ICON_MAP: Record<string, string> = {
|
|
"한식": "rice_bowl",
|
|
"일식": "set_meal",
|
|
"중식": "ramen_dining",
|
|
"양식": "dinner_dining",
|
|
"아시아": "ramen_dining",
|
|
"기타": "flatware",
|
|
};
|
|
|
|
// Sub-category overrides for more specific icons
|
|
const SUB_ICON_RULES: { keyword: string; icon: string }[] = [
|
|
{ keyword: "회/횟집", icon: "set_meal" },
|
|
{ keyword: "해산물", icon: "set_meal" },
|
|
{ keyword: "삼겹살/돼지구이", icon: "kebab_dining" },
|
|
{ keyword: "소고기/한우구이", icon: "kebab_dining" },
|
|
{ keyword: "곱창/막창", icon: "kebab_dining" },
|
|
{ keyword: "닭/오리구이", icon: "takeout_dining" },
|
|
{ keyword: "스테이크", icon: "kebab_dining" },
|
|
{ keyword: "햄버거", icon: "lunch_dining" },
|
|
{ keyword: "피자", icon: "local_pizza" },
|
|
{ keyword: "카페/디저트", icon: "coffee" },
|
|
{ keyword: "베이커리", icon: "bakery_dining" },
|
|
{ keyword: "치킨", icon: "takeout_dining" },
|
|
{ keyword: "주점/포차", icon: "local_bar" },
|
|
{ keyword: "이자카야", icon: "sake" },
|
|
{ keyword: "라멘", icon: "ramen_dining" },
|
|
{ keyword: "국밥/해장국", icon: "soup_kitchen" },
|
|
{ keyword: "분식", icon: "ramen_dining" },
|
|
];
|
|
|
|
const DEFAULT_ICON = "flatware";
|
|
|
|
export function getCuisineIcon(cuisineType: string | null | undefined): string {
|
|
if (!cuisineType) return DEFAULT_ICON;
|
|
|
|
// Check sub-category first
|
|
for (const rule of SUB_ICON_RULES) {
|
|
if (cuisineType.includes(rule.keyword)) return rule.icon;
|
|
}
|
|
|
|
// Fall back to main category (prefix before |)
|
|
const main = cuisineType.split("|")[0];
|
|
return CUISINE_ICON_MAP[main] || DEFAULT_ICON;
|
|
}
|