mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 04:31:13 -05:00
feat: Implement custom view tracking
This commit is contained in:
@@ -18,6 +18,7 @@ import { toast } from '@/hooks/use-toast';
|
||||
import { submitCompanyUpdate } from '@/lib/companyHelpers';
|
||||
import { VersionIndicator } from '@/components/versioning/VersionIndicator';
|
||||
import { EntityHistoryTabs } from '@/components/history/EntityHistoryTabs';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
|
||||
export default function DesignerDetail() {
|
||||
const { slug } = useParams<{ slug: string }>();
|
||||
@@ -37,6 +38,13 @@ export default function DesignerDetail() {
|
||||
}
|
||||
}, [slug]);
|
||||
|
||||
// Track page view when designer is loaded
|
||||
useEffect(() => {
|
||||
if (designer?.id) {
|
||||
trackPageView('company', designer.id);
|
||||
}
|
||||
}, [designer?.id]);
|
||||
|
||||
const fetchDesignerData = async () => {
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { Header } from '@/components/layout/Header';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
@@ -38,6 +39,13 @@ export default function ManufacturerDetail() {
|
||||
}
|
||||
}, [slug]);
|
||||
|
||||
// Track page view when manufacturer is loaded
|
||||
useEffect(() => {
|
||||
if (manufacturer?.id) {
|
||||
trackPageView('company', manufacturer.id);
|
||||
}
|
||||
}, [manufacturer?.id]);
|
||||
|
||||
const fetchManufacturerData = async () => {
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { Header } from '@/components/layout/Header';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
@@ -41,6 +42,13 @@ export default function OperatorDetail() {
|
||||
}
|
||||
}, [slug]);
|
||||
|
||||
// Track page view when operator is loaded
|
||||
useEffect(() => {
|
||||
if (operator?.id) {
|
||||
trackPageView('company', operator.id);
|
||||
}
|
||||
}, [operator?.id]);
|
||||
|
||||
const fetchOperatorData = async () => {
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
|
||||
@@ -2,6 +2,7 @@ import { useState, useEffect } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { Header } from '@/components/layout/Header';
|
||||
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
@@ -45,6 +46,13 @@ export default function ParkDetail() {
|
||||
fetchParkData();
|
||||
}
|
||||
}, [slug]);
|
||||
|
||||
// Track page view when park is loaded
|
||||
useEffect(() => {
|
||||
if (park?.id) {
|
||||
trackPageView('park', park.id);
|
||||
}
|
||||
}, [park?.id]);
|
||||
const fetchParkData = async () => {
|
||||
try {
|
||||
// Fetch park details
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { Header } from '@/components/layout/Header';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
@@ -41,6 +42,13 @@ export default function PropertyOwnerDetail() {
|
||||
}
|
||||
}, [slug]);
|
||||
|
||||
// Track page view when property owner is loaded
|
||||
useEffect(() => {
|
||||
if (owner?.id) {
|
||||
trackPageView('company', owner.id);
|
||||
}
|
||||
}, [owner?.id]);
|
||||
|
||||
const fetchOwnerData = async () => {
|
||||
try {
|
||||
const { data, error } = await supabase
|
||||
|
||||
@@ -2,6 +2,7 @@ import { useState, useEffect } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { Header } from '@/components/layout/Header';
|
||||
import { getBannerUrls } from '@/lib/cloudflareImageUtils';
|
||||
import { trackPageView } from '@/lib/viewTracking';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
@@ -50,14 +51,14 @@ import { EntityHistoryTabs } from '@/components/history/EntityHistoryTabs';
|
||||
export default function RideDetail() {
|
||||
const { parkSlug, rideSlug } = useParams<{ parkSlug: string; rideSlug: string }>();
|
||||
const navigate = useNavigate();
|
||||
const { user } = useAuth();
|
||||
const { isModerator } = useUserRole();
|
||||
const [ride, setRide] = useState<Ride | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [activeTab, setActiveTab] = useState("overview");
|
||||
const [isEditModalOpen, setIsEditModalOpen] = useState(false);
|
||||
const [photoCount, setPhotoCount] = useState<number>(0);
|
||||
const [statsLoading, setStatsLoading] = useState(true);
|
||||
const { user } = useAuth();
|
||||
const { isModerator } = useUserRole();
|
||||
|
||||
useEffect(() => {
|
||||
if (parkSlug && rideSlug) {
|
||||
@@ -65,6 +66,13 @@ export default function RideDetail() {
|
||||
}
|
||||
}, [parkSlug, rideSlug]);
|
||||
|
||||
// Track page view when ride is loaded
|
||||
useEffect(() => {
|
||||
if (ride?.id) {
|
||||
trackPageView('ride', ride.id);
|
||||
}
|
||||
}, [ride?.id]);
|
||||
|
||||
const fetchRideData = async () => {
|
||||
try {
|
||||
// First get park to find park_id
|
||||
|
||||
Reference in New Issue
Block a user