mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 11:51:14 -05:00
Reverted to commit 0091584677
This commit is contained in:
@@ -24,24 +24,18 @@ import { VersionIndicator } from '@/components/versioning/VersionIndicator';
|
||||
import { EntityVersionHistory } from '@/components/versioning/EntityVersionHistory';
|
||||
import { useDocumentTitle } from '@/hooks/useDocumentTitle';
|
||||
import { useOpenGraph } from '@/hooks/useOpenGraph';
|
||||
import { useRideModelDetail } from '@/hooks/rideModels/useRideModelDetail';
|
||||
import { useModelRides } from '@/hooks/rideModels/useModelRides';
|
||||
import { useModelStatistics } from '@/hooks/rideModels/useModelStatistics';
|
||||
|
||||
export default function RideModelDetail() {
|
||||
const { manufacturerSlug, modelSlug } = useParams<{ manufacturerSlug: string; modelSlug: string }>();
|
||||
const navigate = useNavigate();
|
||||
const { user } = useAuth();
|
||||
const { requireAuth } = useAuthModal();
|
||||
const [model, setModel] = useState<RideModel | null>(null);
|
||||
const [manufacturer, setManufacturer] = useState<Company | null>(null);
|
||||
const [rides, setRides] = useState<Ride[]>([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [isEditModalOpen, setIsEditModalOpen] = useState(false);
|
||||
|
||||
// Use custom hooks for data fetching
|
||||
const { data: modelData, isLoading: loading } = useRideModelDetail(manufacturerSlug, modelSlug);
|
||||
const model = modelData?.model;
|
||||
const manufacturer = modelData?.manufacturer;
|
||||
const { data: rides = [] } = useModelRides(model?.id);
|
||||
const { data: statistics = { rideCount: 0, photoCount: 0 } } = useModelStatistics(model?.id);
|
||||
|
||||
// Update document title when model changes
|
||||
useDocumentTitle(model?.name || 'Ride Model Details');
|
||||
|
||||
@@ -54,10 +48,78 @@ export default function RideModelDetail() {
|
||||
type: 'website',
|
||||
enabled: !!model
|
||||
});
|
||||
const [statistics, setStatistics] = useState({ rideCount: 0, photoCount: 0 });
|
||||
|
||||
// Fetch technical specifications from relational table
|
||||
const { data: technicalSpecs } = useTechnicalSpecifications('ride_model', model?.id);
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
try {
|
||||
// Fetch manufacturer
|
||||
const { data: manufacturerData, error: manufacturerError } = await supabase
|
||||
.from('companies')
|
||||
.select('*')
|
||||
.eq('slug', manufacturerSlug)
|
||||
.eq('company_type', 'manufacturer')
|
||||
.maybeSingle();
|
||||
|
||||
if (manufacturerError) throw manufacturerError;
|
||||
setManufacturer(manufacturerData);
|
||||
|
||||
if (manufacturerData) {
|
||||
// Fetch ride model
|
||||
const { data: modelData, error: modelError } = await supabase
|
||||
.from('ride_models')
|
||||
.select('*')
|
||||
.eq('slug', modelSlug)
|
||||
.eq('manufacturer_id', manufacturerData.id)
|
||||
.maybeSingle();
|
||||
|
||||
if (modelError) throw modelError;
|
||||
setModel(modelData as RideModel);
|
||||
|
||||
if (modelData) {
|
||||
// Fetch rides using this model with proper joins
|
||||
const { data: ridesData, error: ridesError } = await supabase
|
||||
.from('rides')
|
||||
.select(`
|
||||
*,
|
||||
park:parks!inner(name, slug, location:locations(*)),
|
||||
manufacturer:companies!rides_manufacturer_id_fkey(*),
|
||||
ride_model:ride_models(id, name, slug, manufacturer_id, category)
|
||||
`)
|
||||
.eq('ride_model_id', modelData.id)
|
||||
.order('name');
|
||||
|
||||
if (ridesError) throw ridesError;
|
||||
setRides(ridesData as Ride[] || []);
|
||||
|
||||
// Fetch statistics
|
||||
const { count: photoCount } = await supabase
|
||||
.from('photos')
|
||||
.select('*', { count: 'exact', head: true })
|
||||
.eq('entity_type', 'ride_model')
|
||||
.eq('entity_id', modelData.id);
|
||||
|
||||
setStatistics({
|
||||
rideCount: ridesData?.length || 0,
|
||||
photoCount: photoCount || 0
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching data:', error);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [manufacturerSlug, modelSlug]);
|
||||
|
||||
useEffect(() => {
|
||||
if (manufacturerSlug && modelSlug) {
|
||||
fetchData();
|
||||
}
|
||||
}, [manufacturerSlug, modelSlug, fetchData]);
|
||||
|
||||
const handleEditSubmit = async (data: any) => {
|
||||
try {
|
||||
if (!user || !model) return;
|
||||
@@ -76,6 +138,7 @@ export default function RideModelDetail() {
|
||||
});
|
||||
|
||||
setIsEditModalOpen(false);
|
||||
fetchData();
|
||||
} catch (error) {
|
||||
const errorMsg = getErrorMessage(error);
|
||||
toast({
|
||||
|
||||
Reference in New Issue
Block a user