diff --git a/src/hooks/use-sessionize.tsx b/src/hooks/use-sessionize.tsx index 649dee6..4a1d68e 100644 --- a/src/hooks/use-sessionize.tsx +++ b/src/hooks/use-sessionize.tsx @@ -1,115 +1,144 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; -const SESSIONIZE_ID = "ev751er0"; // TEST ID: jl4ktls0 +const SESSIONIZE_ID = 'ev751er0'; // TEST ID: jl4ktls0 export interface Speaker { - id: string; - name: string; - firstName: string; - lastName: string; - fullName: string; - bio: string; - tagLine: string; - profilePicture: string; - isTopSpeaker: boolean; - sessions: Session[]; + id: string; + name: string; + firstName: string; + lastName: string; + fullName: string; + bio: string; + tagLine: string; + profilePicture: string; + isTopSpeaker: boolean; + sessions: Session[]; } export interface Session { - id: string; - name: string; - title: string; - description: string; - startsAt: string; - endsAt: string; - isServiceSession: boolean; - isPlenumSession: boolean; - speakers: Speaker[]; - roomId: number; - room: string; + id: string; + name: string; + title: string; + description: string; + startsAt: string; + endsAt: string; + isServiceSession: boolean; + isPlenumSession: boolean; + speakers: Speaker[]; + roomId: number; + room: string; + questionAnswers: QuestionAnswer[]; + slideDeck: string; +} + +export interface QuestionAnswer { + id: number; + answer: string; } export interface GridEntry { - date: string; - rooms: Room[]; - timeSlots: TimeSlot[]; + date: string; + rooms: Room[]; + timeSlots: TimeSlot[]; } export interface Room { - id: number; - name: string; - sessions: Session[]; - session: Session; + id: number; + name: string; + sessions: Session[]; + session: Session; } export interface TimeSlot { - slotStart: string; - rooms: Room[]; + slotStart: string; + rooms: Room[]; +} + +export interface SessionList { + sessions: Session[]; } export const useSessionizeSpeakers = () => { - const [speakers,setSpeakers] = useState([]); + const [speakers, setSpeakers] = useState([]); - const fetchSpeakers = async () => { - const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`); - const data = await response.json(); - setSpeakers(data); - }; + const fetchSpeakers = async () => { + const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`); + const data = await response.json(); + setSpeakers(data); + }; - useEffect(() => { - fetchSpeakers(); - }, []); + useEffect(() => { + fetchSpeakers(); + }, []); - return {speakers}; + return { speakers }; }; export const useSessionizeSchedule = () => { - const [grid,setGrid] = useState([]); - const [speakers,setSpeakers] = useState([]); - const [schedule,setSchedule] = useState([]); - - const fetchGrid = async () => { - const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Grid`); - const data = await response.json(); - setGrid(data); - } - - const fetchSpeakers = async () => { - const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`); - const data = await response.json(); - setSpeakers(data); - }; - - useEffect(() => { - fetchGrid(); - }, []); - useEffect(() => { - fetchSpeakers(); - }, []); - useEffect(() => { - if (grid.length === 0 || speakers.length === 0) return; - const schedule = grid.map((entry) => { - const timeSlots = entry.timeSlots.map((timeSlot) => { - const rooms = timeSlot.rooms.map((room) => { - const sessionSpeakers = room.session.speakers.map((speaker) => { - return speakers.find((s) => s.id === speaker.id); - }); - room.session.speakers = sessionSpeakers; - return room; - }); - return { - ...timeSlot, - rooms, - }; - }); - return { - ...entry, - timeSlots, - }; + const [grid, setGrid] = useState([]); + const [speakers, setSpeakers] = useState([]); + const [schedule, setSchedule] = useState([]); + const [sessions, setSessions] = useState([]); + + const fetchGrid = async () => { + const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Grid`); + const data = await response.json(); + setGrid(data); + }; + + const fetchSpeakers = async () => { + const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`); + const data = await response.json(); + setSpeakers(data); + }; + + const fetchSessions = async () => { + const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Sessions`); + const data = await response.json(); + setSessions(data); + }; + + useEffect(() => { + fetchGrid(); + }, []); + useEffect(() => { + fetchSpeakers(); + }, []); + useEffect(() => { + fetchSessions(); + }, []); + useEffect(() => { + if (grid.length === 0 || speakers.length === 0 || sessions.length === 0) return; + const schedule = grid.map((entry) => { + const timeSlots = entry.timeSlots.map((timeSlot) => { + const rooms = timeSlot.rooms.map((room) => { + const sessionSpeakers = room.session.speakers.map((speaker) => { + return speakers.find((s) => s.id === speaker.id); + }); + room.session.speakers = sessionSpeakers; + + const session = sessions[0].sessions.find((s) => room.session.id === s.id); + if (session !== undefined) { + const qa = session.questionAnswers.find((q) => q.id === 88726); + if (qa !== undefined) { + room.session.slideDeck = qa.answer; + } + } + + return room; }); - setSchedule(schedule); - }, [grid,speakers]); - - - return {schedule}; + return { + ...timeSlot, + rooms, + }; + }); + return { + ...entry, + timeSlots, + }; + }); + setSchedule(schedule); + }, [grid, speakers, sessions]); + + return { schedule }; };