From d1f32dbf252d77647ff1f9375e2c8e74509b3544 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 12:36:38 +0000 Subject: [PATCH] Refactor: Replace emojis with Lucide React icons --- src/components/homepage/ContentTabs.tsx | 20 +++++----- src/components/homepage/FeaturedParks.tsx | 15 +++++--- src/components/layout/Header.tsx | 14 ++++--- src/components/parks/ParkCard.tsx | 18 ++++----- src/components/parks/ParkGrid.tsx | 4 +- src/components/parks/ParkListView.tsx | 18 ++++----- src/components/search/AutocompleteSearch.tsx | 12 +++--- src/components/search/SearchResults.tsx | 22 +++++------ src/pages/Manufacturers.tsx | 18 ++++----- src/pages/ParkDetail.tsx | 40 +++++++++++--------- src/pages/Parks.tsx | 5 ++- src/pages/RideDetail.tsx | 28 ++++++++------ src/pages/Rides.tsx | 24 ++++++------ src/pages/Search.tsx | 16 ++++---- 14 files changed, 136 insertions(+), 118 deletions(-) diff --git a/src/components/homepage/ContentTabs.tsx b/src/components/homepage/ContentTabs.tsx index 3be4a9a7..f3be7137 100644 --- a/src/components/homepage/ContentTabs.tsx +++ b/src/components/homepage/ContentTabs.tsx @@ -4,7 +4,7 @@ import { ParkCard } from '@/components/parks/ParkCard'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; -import { Star, TrendingUp, Plus, MapPin, Clock, Zap } from 'lucide-react'; +import { Star, TrendingUp, Plus, MapPin, Clock, Zap, FerrisWheel, Waves, Theater, Train } from 'lucide-react'; import { MeasurementDisplay } from '@/components/ui/measurement-display'; import { Park, Ride } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; @@ -81,13 +81,13 @@ export function ContentTabs() { const getRideIcon = (category: string) => { switch (category) { - case 'roller_coaster': return '🎢'; - case 'water_ride': return '🌊'; - case 'dark_ride': return '🎭'; - case 'flat_ride': return '🎡'; - case 'kiddie_ride': return '🎠'; - case 'transportation': return '🚂'; - default: return '🎢'; + case 'roller_coaster': return ; + case 'water_ride': return ; + case 'dark_ride': return ; + case 'flat_ride': return ; + case 'kiddie_ride': return ; + case 'transportation': return ; + default: return ; } }; @@ -120,7 +120,7 @@ export function ContentTabs() { className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" /> ) : ( -
+
{getRideIcon(ride.category)}
)} @@ -143,7 +143,7 @@ export function ContentTabs() {

{ride.name}

- {getRideIcon(ride.category)} + {getRideIcon(ride.category)}
{ride.park?.name && ( diff --git a/src/components/homepage/FeaturedParks.tsx b/src/components/homepage/FeaturedParks.tsx index 75dae7c0..1da17ec5 100644 --- a/src/components/homepage/FeaturedParks.tsx +++ b/src/components/homepage/FeaturedParks.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import { Star, TrendingUp, Award } from 'lucide-react'; +import { Star, TrendingUp, Award, Castle, FerrisWheel, Waves, Tent } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -53,10 +53,10 @@ export function FeaturedParks() {
{/* Gradient Background */}
-
- {park.park_type === 'theme_park' ? '🏰' : - park.park_type === 'amusement_park' ? '🎢' : - park.park_type === 'water_park' ? '🏊' : '🎪'} +
+ {park.park_type === 'theme_park' ? : + park.park_type === 'amusement_park' ? : + park.park_type === 'water_park' ? : }
@@ -88,7 +88,10 @@ export function FeaturedParks() {
{park.ride_count} rides - {park.coaster_count} 🎢 +
+ {park.coaster_count} + +
{park.review_count} reviews diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index 4527ecf7..2c85d224 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Search, Menu, Zap, MapPin, Star, ChevronDown, Building, Users, Crown, Palette, Shield } from 'lucide-react'; +import { Search, Menu, Zap, MapPin, Star, ChevronDown, Building, Users, Crown, Palette, Shield, FerrisWheel, Factory } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'; @@ -40,10 +40,12 @@ export function Header() { Parks navigate('/rides')} className="hover:!bg-blue-100 hover:!text-blue-900 dark:hover:bg-blue-900/20 dark:hover:text-blue-100"> - 🎢 Rides + + Rides navigate('/manufacturers')} className="hover:!bg-blue-100 hover:!text-blue-900 dark:hover:bg-blue-900/20 dark:hover:text-blue-100"> - 🏭 Manufacturers + + Manufacturers navigate('/operators')} className="hover:!bg-blue-100 hover:!text-blue-900 dark:hover:bg-blue-900/20 dark:hover:text-blue-100"> @@ -96,10 +98,12 @@ export function Header() { Parks
{park.coaster_count} - 🎢 +
diff --git a/src/components/parks/ParkGrid.tsx b/src/components/parks/ParkGrid.tsx index e37eda2d..6e445104 100644 --- a/src/components/parks/ParkGrid.tsx +++ b/src/components/parks/ParkGrid.tsx @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import { Search, Filter, MapPin, SlidersHorizontal } from 'lucide-react'; +import { Search, Filter, MapPin, SlidersHorizontal, FerrisWheel } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; @@ -240,7 +240,7 @@ export function ParkGrid() { {/* Parks Grid */} {filteredParks.length === 0 ? (
-
🎢
+

No parks found

Try adjusting your search terms or filters diff --git a/src/components/parks/ParkListView.tsx b/src/components/parks/ParkListView.tsx index 58539bd1..bcdd965a 100644 --- a/src/components/parks/ParkListView.tsx +++ b/src/components/parks/ParkListView.tsx @@ -1,4 +1,4 @@ -import { MapPin, Star, Users, Calendar, ExternalLink } from 'lucide-react'; +import { MapPin, Star, Users, Calendar, ExternalLink, Castle, FerrisWheel, Waves, Tent } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -21,11 +21,11 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) { const getParkTypeIcon = (type: string) => { switch (type) { - case 'theme_park': return '🏰'; - case 'amusement_park': return '🎢'; - case 'water_park': return '🏊'; - case 'family_entertainment': return '🎪'; - default: return '🎡'; + case 'theme_park': return ; + case 'amusement_park': return ; + case 'water_park': return ; + case 'family_entertainment': return ; + default: return ; } }; @@ -55,7 +55,7 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) { /> ) : (

- + {getParkTypeIcon(park.park_type)}
@@ -79,7 +79,7 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) {

{park.name}

- {getParkTypeIcon(park.park_type)} + {getParkTypeIcon(park.park_type)}
{park.location && ( @@ -132,7 +132,7 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) {
{park.coaster_count || 0} - 🎢 +
{park.review_count > 0 && (
diff --git a/src/components/search/AutocompleteSearch.tsx b/src/components/search/AutocompleteSearch.tsx index d2139615..726d83e2 100644 --- a/src/components/search/AutocompleteSearch.tsx +++ b/src/components/search/AutocompleteSearch.tsx @@ -1,5 +1,5 @@ import { useRef, useEffect, useState } from 'react'; -import { Search, X, Clock, Zap } from 'lucide-react'; +import { Search, X, Clock, Zap, Castle, FerrisWheel, Factory } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; @@ -161,13 +161,13 @@ export function AutocompleteSearch({ const getResultIcon = (result: SearchResult) => { switch (result.type) { case 'park': - return '🏰'; + return ; case 'ride': - return '🎢'; + return ; case 'company': - return '🏭'; + return ; default: - return '🔍'; + return ; } }; @@ -260,7 +260,7 @@ export function AutocompleteSearch({ ) : ( <> -
{getResultIcon(item as SearchResult)}
+
{getResultIcon(item as SearchResult)}
{item.title} diff --git a/src/components/search/SearchResults.tsx b/src/components/search/SearchResults.tsx index 1fe6fe52..1ca0b64a 100644 --- a/src/components/search/SearchResults.tsx +++ b/src/components/search/SearchResults.tsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; -import { MapPin, Star, Search as SearchIcon } from 'lucide-react'; +import { MapPin, Star, Search as SearchIcon, Castle, FerrisWheel, Waves, Theater, Factory } from 'lucide-react'; import { Park, Ride, Company } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; import { useNavigate } from 'react-router-dom'; @@ -95,21 +95,21 @@ export function SearchResults({ query, onClose }: SearchResultsProps) { case 'park': const park = result.data as Park; switch (park.park_type) { - case 'theme_park': return '🏰'; - case 'amusement_park': return '🎢'; - case 'water_park': return '🏊'; - default: return '🎡'; + case 'theme_park': return ; + case 'amusement_park': return ; + case 'water_park': return ; + default: return ; } case 'ride': const ride = result.data as Ride; switch (ride.category) { - case 'roller_coaster': return '🎢'; - case 'water_ride': return '🌊'; - case 'dark_ride': return '🎭'; - default: return '🎡'; + case 'roller_coaster': return ; + case 'water_ride': return ; + case 'dark_ride': return ; + default: return ; } case 'company': - return '🏭'; + return ; } }; @@ -189,7 +189,7 @@ export function SearchResults({ query, onClose }: SearchResultsProps) { >
-
{getResultIcon(result)}
+
{getResultIcon(result)}

diff --git a/src/pages/Manufacturers.tsx b/src/pages/Manufacturers.tsx index 6b20e69b..24b68e87 100644 --- a/src/pages/Manufacturers.tsx +++ b/src/pages/Manufacturers.tsx @@ -5,7 +5,7 @@ import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Badge } from '@/components/ui/badge'; -import { Search, Filter, SlidersHorizontal, Globe, MapPin } from 'lucide-react'; +import { Search, Filter, SlidersHorizontal, Globe, MapPin, Factory, FerrisWheel, Ruler, Hammer, Building2 } from 'lucide-react'; import { Company } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; import { useNavigate } from 'react-router-dom'; @@ -59,11 +59,11 @@ export default function Manufacturers() { const getCompanyIcon = (type: string) => { switch (type) { - case 'manufacturer': return '🏭'; - case 'operator': return '🎡'; - case 'designer': return '📐'; - case 'contractor': return '🔨'; - default: return '🏢'; + case 'manufacturer': return ; + case 'operator': return ; + case 'designer': return ; + case 'contractor': return ; + default: return ; } }; @@ -107,7 +107,7 @@ export default function Manufacturers() { {/* Page Header */}
-
🏭
+

Manufacturers & Companies

@@ -172,7 +172,7 @@ export default function Manufacturers() {

- {getCompanyIcon(company.company_type)} + {getCompanyIcon(company.company_type)} {formatCompanyType(company.company_type)} @@ -238,7 +238,7 @@ export default function Manufacturers() {
) : (
-
🏭
+

No companies found

Try adjusting your search criteria or filters diff --git a/src/pages/ParkDetail.tsx b/src/pages/ParkDetail.tsx index 1bcc6cba..fb2def6d 100644 --- a/src/pages/ParkDetail.tsx +++ b/src/pages/ParkDetail.tsx @@ -16,7 +16,13 @@ import { ArrowLeft, Users, Zap, - Camera + Camera, + Castle, + FerrisWheel, + Waves, + Tent, + Theater, + Train } from 'lucide-react'; import { ReviewsSection } from '@/components/reviews/ReviewsSection'; import { MeasurementDisplay } from '@/components/ui/measurement-display'; @@ -80,11 +86,11 @@ export default function ParkDetail() { const getParkTypeIcon = (type: string) => { switch (type) { - case 'theme_park': return '🏰'; - case 'amusement_park': return '🎢'; - case 'water_park': return '🏊'; - case 'family_entertainment': return '🎪'; - default: return '🎡'; + case 'theme_park': return ; + case 'amusement_park': return ; + case 'water_park': return ; + case 'family_entertainment': return ; + default: return ; } }; @@ -96,13 +102,13 @@ export default function ParkDetail() { const getRideIcon = (category: string) => { switch (category) { - case 'roller_coaster': return '🎢'; - case 'water_ride': return '🌊'; - case 'dark_ride': return '🎭'; - case 'flat_ride': return '🎡'; - case 'kiddie_ride': return '🎠'; - case 'transportation': return '🚂'; - default: return '🎢'; + case 'roller_coaster': return ; + case 'water_ride': return ; + case 'dark_ride': return ; + case 'flat_ride': return ; + case 'kiddie_ride': return ; + case 'transportation': return ; + default: return ; } }; @@ -167,7 +173,7 @@ export default function ParkDetail() { /> ) : (

-
+
{getParkTypeIcon(park.park_type)}
@@ -235,7 +241,7 @@ export default function ParkDetail() { -
{getParkTypeIcon(park.park_type)}
+
{getParkTypeIcon(park.park_type)}
{formatParkType(park.park_type)}
@@ -280,7 +286,7 @@ export default function ParkDetail() { className="flex items-center gap-3 p-3 border rounded-lg hover:bg-muted/50 cursor-pointer transition-colors" onClick={() => navigate(`/parks/${park.slug}/rides/${ride.slug}`)} > -
{getRideIcon(ride.category)}
+
{getRideIcon(ride.category)}

{ride.name}

@@ -388,7 +394,7 @@ export default function ParkDetail() { >

-
{getRideIcon(ride.category)}
+
{getRideIcon(ride.category)}

{ride.name}

diff --git a/src/pages/Parks.tsx b/src/pages/Parks.tsx index 53163937..1a6cdb22 100644 --- a/src/pages/Parks.tsx +++ b/src/pages/Parks.tsx @@ -14,7 +14,8 @@ import { Search, ChevronDown, Sliders, - X + X, + FerrisWheel } from 'lucide-react'; import { Park } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; @@ -364,7 +365,7 @@ export default function Parks() {

) : (
-
🎢
+

No parks found

Try adjusting your search terms or filters diff --git a/src/pages/RideDetail.tsx b/src/pages/RideDetail.tsx index ce479877..290e59dd 100644 --- a/src/pages/RideDetail.tsx +++ b/src/pages/RideDetail.tsx @@ -19,7 +19,11 @@ import { Camera, Heart, RotateCcw, - AlertTriangle + AlertTriangle, + FerrisWheel, + Waves, + Theater, + Train } from 'lucide-react'; import { ReviewsSection } from '@/components/reviews/ReviewsSection'; import { MeasurementDisplay } from '@/components/ui/measurement-display'; @@ -82,13 +86,13 @@ export default function RideDetail() { const getRideIcon = (category: string) => { switch (category) { - case 'roller_coaster': return '🎢'; - case 'water_ride': return '🌊'; - case 'dark_ride': return '🎭'; - case 'flat_ride': return '🎡'; - case 'kiddie_ride': return '🎠'; - case 'transportation': return '🚂'; - default: return '🎢'; + case 'roller_coaster': return ; + case 'water_ride': return ; + case 'dark_ride': return ; + case 'flat_ride': return ; + case 'kiddie_ride': return ; + case 'transportation': return ; + default: return ; } }; @@ -159,7 +163,7 @@ export default function RideDetail() { /> ) : (

-
+
{getRideIcon(ride.category)}
@@ -273,7 +277,7 @@ export default function RideDetail() { {ride.drop_height_meters && ( -
⬇️
+
@@ -285,7 +289,7 @@ export default function RideDetail() { {ride.max_g_force && ( -
+
{ride.max_g_force}g
max G-force
@@ -352,7 +356,7 @@ export default function RideDetail() {
-
{getRideIcon(ride.category)}
+
{getRideIcon(ride.category)}
Category
diff --git a/src/pages/Rides.tsx b/src/pages/Rides.tsx index 1dc35ef1..624598b6 100644 --- a/src/pages/Rides.tsx +++ b/src/pages/Rides.tsx @@ -4,7 +4,7 @@ import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Badge } from '@/components/ui/badge'; -import { Filter, SlidersHorizontal, Zap, Clock, Star } from 'lucide-react'; +import { Filter, SlidersHorizontal, Zap, Clock, Star, FerrisWheel, Waves, Theater, Train } from 'lucide-react'; import { AutocompleteSearch } from '@/components/search/AutocompleteSearch'; import { MeasurementDisplay } from '@/components/ui/measurement-display'; import { Ride } from '@/types/database'; @@ -77,13 +77,13 @@ export default function Rides() { const getRideIcon = (category: string) => { switch (category) { - case 'roller_coaster': return '🎢'; - case 'water_ride': return '🌊'; - case 'dark_ride': return '🎭'; - case 'flat_ride': return '🎡'; - case 'kiddie_ride': return '🎠'; - case 'transportation': return '🚂'; - default: return '🎢'; + case 'roller_coaster': return ; + case 'water_ride': return ; + case 'dark_ride': return ; + case 'flat_ride': return ; + case 'kiddie_ride': return ; + case 'transportation': return ; + default: return ; } }; @@ -146,7 +146,7 @@ export default function Rides() { {/* Page Header */}
-
🎢
+

Rides & Attractions

@@ -233,7 +233,7 @@ export default function Rides() { className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" /> ) : ( -

+
{getRideIcon(ride.category)}
)} @@ -256,7 +256,7 @@ export default function Rides() {

{ride.name}

- {getRideIcon(ride.category)} + {getRideIcon(ride.category)}
{ride.park?.name && ( @@ -327,7 +327,7 @@ export default function Rides() {
) : (
-
🎢
+

No rides found

Try adjusting your search criteria or filters diff --git a/src/pages/Search.tsx b/src/pages/Search.tsx index af9b1cb6..65e740cd 100644 --- a/src/pages/Search.tsx +++ b/src/pages/Search.tsx @@ -5,7 +5,7 @@ import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { Search, MapPin, Zap, Star } from 'lucide-react'; +import { Search, MapPin, Zap, Star, Castle, FerrisWheel, Factory } from 'lucide-react'; import { AutocompleteSearch } from '@/components/search/AutocompleteSearch'; import { useSearch, SearchResult } from '@/hooks/useSearch'; @@ -59,10 +59,10 @@ export default function SearchPage() { const getTypeIcon = (type: string) => { switch (type) { - case 'park': return '🏰'; - case 'ride': return '🎢'; - case 'company': return '🏭'; - default: return '🔍'; + case 'park': return ; + case 'ride': return ; + case 'company': return ; + default: return ; } }; @@ -151,7 +151,7 @@ export default function SearchPage() { >

-
{getTypeIcon(result.type)}
+
{getTypeIcon(result.type)}

@@ -198,7 +198,7 @@ export default function SearchPage() { {/* No Results */} {!loading && query && filteredResults.length === 0 && (
-
🔍
+

No results found

Try searching for something else or adjust your search terms @@ -220,7 +220,7 @@ export default function SearchPage() { {/* Initial State */} {!query && (

-
🔍
+

Start your search

Search for theme parks, rides, or companies to get started