From 3867d30aac3dd07806666745292ead237b53e06a Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Wed, 12 Nov 2025 03:51:15 +0000
Subject: [PATCH] Enhance loading skeletons and breadcrumbs
- Add content-m matching loading skeletons for ParkDetail, RideDetail, CompanyDetail, etc., replacing generic spinners to preserve layout during load
- Remove redundant Back to Parent Entity buttons in detail pages in favor of breadcrumb navigation
- Prepare groundwork for breadcrumbs across detail pages to improve cohesion and navigation
---
.../loading/CompanyDetailSkeleton.tsx | 98 ++++++++++++++++
src/components/loading/ParkDetailSkeleton.tsx | 101 +++++++++++++++++
src/components/loading/RideDetailSkeleton.tsx | 106 ++++++++++++++++++
src/pages/DesignerDetail.tsx | 17 +--
src/pages/ManufacturerDetail.tsx | 18 +--
src/pages/OperatorDetail.tsx | 17 +--
src/pages/ParkDetail.tsx | 18 +--
src/pages/PropertyOwnerDetail.tsx | 27 ++---
src/pages/RideDetail.tsx | 21 +---
src/pages/RideModelDetail.tsx | 39 ++++---
10 files changed, 361 insertions(+), 101 deletions(-)
create mode 100644 src/components/loading/CompanyDetailSkeleton.tsx
create mode 100644 src/components/loading/ParkDetailSkeleton.tsx
create mode 100644 src/components/loading/RideDetailSkeleton.tsx
diff --git a/src/components/loading/CompanyDetailSkeleton.tsx b/src/components/loading/CompanyDetailSkeleton.tsx
new file mode 100644
index 00000000..cc4d7c75
--- /dev/null
+++ b/src/components/loading/CompanyDetailSkeleton.tsx
@@ -0,0 +1,98 @@
+import { Card, CardContent, CardHeader } from '@/components/ui/card';
+
+export function CompanyDetailSkeleton() {
+ return (
+
+ {/* Breadcrumb */}
+
+
+ {/* Edit Button Area */}
+
+
+ {/* Hero Banner */}
+
+
+ {/* Stats Cards */}
+
+ {[1, 2, 3, 4].map((i) => (
+
+
+
+
+
+
+ ))}
+
+
+ {/* Tabs */}
+
+ {['Overview', 'Rides', 'Models', 'Photos'].map((tab) => (
+
+ ))}
+
+
+ {/* Content Grid */}
+
+ {/* Main Content */}
+
+ {/* Description Card */}
+
+
+
+
+
+
+
+
+
+
+
+ {/* Products Grid */}
+
+
+
+
+
+
+ {[1, 2, 3, 4, 5, 6].map((i) => (
+
+ ))}
+
+
+
+
+
+ {/* Sidebar */}
+
+ {/* Company Info Card */}
+
+
+
+
+
+ {/* Logo */}
+
+
+ {/* Info Items */}
+ {[1, 2, 3].map((i) => (
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/src/components/loading/ParkDetailSkeleton.tsx b/src/components/loading/ParkDetailSkeleton.tsx
new file mode 100644
index 00000000..f3cb66e0
--- /dev/null
+++ b/src/components/loading/ParkDetailSkeleton.tsx
@@ -0,0 +1,101 @@
+import { Card, CardContent, CardHeader } from '@/components/ui/card';
+
+export function ParkDetailSkeleton() {
+ return (
+
+ {/* Breadcrumb */}
+
+
+ {/* Edit Button Area */}
+
+
+ {/* Hero Banner */}
+
+
+ {/* Stats Cards */}
+
+ {[1, 2, 3, 4].map((i) => (
+
+
+
+
+
+
+ ))}
+
+
+ {/* Tabs */}
+
+ {['Overview', 'Rides', 'Reviews', 'Photos', 'History'].map((tab) => (
+
+ ))}
+
+
+ {/* Content Grid */}
+
+ {/* Main Content */}
+
+ {/* Description Card */}
+
+
+
+
+
+
+
+
+
+
+
+ {/* Featured Rides Card */}
+
+
+
+
+
+
+ {[1, 2, 3, 4].map((i) => (
+
+ ))}
+
+
+
+
+
+ {/* Sidebar */}
+
+ {/* Info Card */}
+
+
+
+
+
+ {[1, 2, 3, 4].map((i) => (
+
+ ))}
+
+
+
+ {/* Map Card */}
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/loading/RideDetailSkeleton.tsx b/src/components/loading/RideDetailSkeleton.tsx
new file mode 100644
index 00000000..680cba61
--- /dev/null
+++ b/src/components/loading/RideDetailSkeleton.tsx
@@ -0,0 +1,106 @@
+import { Card, CardContent } from '@/components/ui/card';
+
+export function RideDetailSkeleton() {
+ return (
+
+ {/* Breadcrumb */}
+
+
+ {/* Edit Button Area */}
+
+
+ {/* Hero Banner */}
+
+
+ {/* Stats Grid */}
+
+ {[1, 2, 3, 4, 5, 6].map((i) => (
+
+
+
+
+
+
+
+ ))}
+
+
+ {/* Tabs */}
+
+ {['Overview', 'Reviews', 'Photos', 'History'].map((tab) => (
+
+ ))}
+
+
+ {/* Content Grid */}
+
+ {/* Main Content */}
+
+ {/* Description Card */}
+
+
+
+
+
+
+
+
+
+ {/* Technical Specs */}
+
+
+
+
+ {[1, 2, 3, 4, 5, 6].map((i) => (
+
+ ))}
+
+
+
+
+
+ {/* Sidebar */}
+
+ {/* Ride Info Card */}
+
+
+
+ {[1, 2, 3, 4, 5].map((i) => (
+
+ ))}
+
+
+
+ {/* Similar Rides */}
+
+
+
+
+ {[1, 2, 3].map((i) => (
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/src/pages/DesignerDetail.tsx b/src/pages/DesignerDetail.tsx
index 5b193d45..a81c9bbe 100644
--- a/src/pages/DesignerDetail.tsx
+++ b/src/pages/DesignerDetail.tsx
@@ -1,6 +1,7 @@
import { useState, useEffect, lazy, Suspense } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import { EntityBreadcrumb } from '@/components/navigation/EntityBreadcrumb';
+import { CompanyDetailSkeleton } from '@/components/loading/CompanyDetailSkeleton';
import { Header } from '@/components/layout/Header';
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
import { Button } from '@/components/ui/button';
@@ -150,12 +151,7 @@ export default function DesignerDetail() {
return (
);
}
@@ -191,13 +187,8 @@ export default function DesignerDetail() {
className="mb-4"
/>
- {/* Back Button and Edit Button */}
-
-
-
+ {/* Edit Button */}
+