diff --git a/src/App.tsx b/src/App.tsx index 0d67d57..8c7962a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,12 +11,15 @@ import React from "react"; import PrivacyPolicy from "@/pages/PrivacyPolicy.tsx"; import Footer from "@/components/Footer.tsx"; import SpeakerInfo from "@/components/SpeakerInfo.tsx"; -import {AppProvider} from "@/context/AppContext.tsx"; +import {AppProvider, useAppContext} from "@/context/AppContext.tsx"; import TicketsPage from "@/pages/TicketsPage.tsx"; import CodeOfConductSpeakers from "@/pages/CodeOfConductSpeakers.tsx"; import Agenda from "@/pages/Agenda.tsx"; import MediaKit from "@/pages/MediaKit.tsx"; import SessionPage from "@/pages/SessionPage.tsx"; +import {AppStatus} from "@/types/types.ts"; +import Loading from "@/pages/Loading.tsx"; +import ErrorPage from "@/pages/ErrorPage.tsx"; const queryClient = new QueryClient(); diff --git a/src/components/Photo.tsx b/src/components/Photo.tsx index fdb1ceb..42c0786 100644 --- a/src/components/Photo.tsx +++ b/src/components/Photo.tsx @@ -1,5 +1,5 @@ import {ZoomIn} from "lucide-react"; -import React from "react"; +import React, {useState} from "react"; import {IImage} from "@/types/types.ts"; export interface PhotoProps { @@ -9,6 +9,8 @@ export interface PhotoProps { } const Photo: React.FC = ({image, setSelectedImage, index}) => { + const [loaded, setLoaded] = useState(false); + const openLightbox = (index: number) => { setSelectedImage(index); document.body.style.overflow = 'hidden'; @@ -27,7 +29,8 @@ const Photo: React.FC = ({image, setSelectedImage, index}) => { alt={image.alt} decoding="async" loading="lazy" - className="w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110 hover-scale" + className={`w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110 hover-scale ${loaded ? "blur-0" : "blur-xl bg-gray-200"}`} + onLoad={() => setLoaded(true)} /> {/* Overlay */}
diff --git a/src/components/Speaker.tsx b/src/components/Speaker.tsx index cc5d511..c762bd8 100644 --- a/src/components/Speaker.tsx +++ b/src/components/Speaker.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, {useState} from "react"; import {ISpeaker} from "@/types/speakers.ts"; import {Card} from "@/components/ui/card.tsx"; import SocialMedia from "@/components/SocialMedia.tsx"; @@ -10,6 +10,7 @@ interface SpeakerProps { const Speaker: React.FC = ({speaker}) => { const navigate = useNavigate(); + const [loaded, setLoaded] = useState(false); const handleClick = (speaker: ISpeaker) => { navigate(`/speaker/${speaker.id}`, {state: {speaker}}); @@ -17,7 +18,12 @@ const Speaker: React.FC = ({speaker}) => { return (
- {speaker.fullName} + {speaker.fullName} setLoaded(true)} + />

{`${speaker.firstName.split(" ")[0]} ${speaker.lastName.split(" ")[0]}`}

{speaker.tagLine}

diff --git a/src/components/agenda/AgendaContent.tsx b/src/components/agenda/AgendaContent.tsx index 696e05b..ce4cc26 100644 --- a/src/components/agenda/AgendaContent.tsx +++ b/src/components/agenda/AgendaContent.tsx @@ -18,7 +18,7 @@ const AgendaContent = () => { if (agenda.length === 0) return (<>) if (!displayAll && savedSessions.size === 0) { - return ( + return (