- Add seedCategories mutation (idempotent) and getBySlug query - Add ad queries: list, getByCategory, getById, search, getByHandyman - Home screen: search bar, CategoryGrid, recent ads list with real-time Convex queries and search-by-keyword - Explore screen: category filter via search param, filtered ad list, full category grid when unfiltered - AdCard component: title, category badge, location, rating stars, price range, navigation to ad detail - CategoryGrid component: 3-column emoji grid linking to filtered explore - Add CATEGORY_EMOJI map and getCategoryName() helper in constants All UI text in Macedonian. TypeScript clean, Convex functions deployed.
35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
export const CATEGORIES = [
|
|
{ slug: "majstor-za-se", name: "Мајстор за сѐ", icon: "construct-outline", sortOrder: 0 },
|
|
{ slug: "vodoinstalater", name: "Водоинсталатер", icon: "water-outline", sortOrder: 1 },
|
|
{ slug: "elektrichar", name: "Електричар", icon: "flash-outline", sortOrder: 2 },
|
|
{ slug: "teskar", name: "Тескар", icon: "hammer-outline", sortOrder: 3 },
|
|
{ slug: "farbar", name: "Фарбар", icon: "brush-outline", sortOrder: 4 },
|
|
{ slug: "keramichar", name: "Керамичар", icon: "grid-outline", sortOrder: 5 },
|
|
{ slug: "zidar", name: "Зидар", icon: "business-outline", sortOrder: 6 },
|
|
{ slug: "gradezhnik", name: "Градежник", icon: "build-outline", sortOrder: 7 },
|
|
{ slug: "stolar", name: "Столар", icon: "cube-outline", sortOrder: 8 },
|
|
{ slug: "moler", name: "Молер", icon: "color-palette-outline", sortOrder: 9 },
|
|
{ slug: "klima-montazher", name: "Клима монтажер", icon: "snow-outline", sortOrder: 10 },
|
|
{ slug: "drugo", name: "Друго", icon: "ellipsis-horizontal-outline", sortOrder: 11 },
|
|
] as const;
|
|
|
|
export type CategorySlug = (typeof CATEGORIES)[number]["slug"];
|
|
|
|
export const CATEGORY_EMOJI: Record<string, string> = {
|
|
"majstor-za-se": "🔧",
|
|
"vodoinstalater": "🚿",
|
|
"elektrichar": "⚡",
|
|
"teskar": "🔨",
|
|
"farbar": "🖌️",
|
|
"keramichar": "🧱",
|
|
"zidar": "🏗️",
|
|
"gradezhnik": "🏢",
|
|
"stolar": "🪵",
|
|
"moler": "🎨",
|
|
"klima-montazher": "❄️",
|
|
"drugo": "📋",
|
|
};
|
|
|
|
export function getCategoryName(slug: string): string {
|
|
return CATEGORIES.find((c) => c.slug === slug)?.name ?? slug;
|
|
} |