Skip to content

Commit 739dad6

Browse files
authored
feat: Adding presentation url (#188)
feat: Adding presentation url
2 parents 911d1fa + fbe6b09 commit 739dad6

File tree

1 file changed

+118
-89
lines changed

1 file changed

+118
-89
lines changed

src/hooks/use-sessionize.tsx

Lines changed: 118 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,144 @@
1-
import { useEffect, useState } from "react";
1+
import { useEffect, useState } from 'react';
22

3-
const SESSIONIZE_ID = "ev751er0"; // TEST ID: jl4ktls0
3+
const SESSIONIZE_ID = 'ev751er0'; // TEST ID: jl4ktls0
44

55
export interface Speaker {
6-
id: string;
7-
name: string;
8-
firstName: string;
9-
lastName: string;
10-
fullName: string;
11-
bio: string;
12-
tagLine: string;
13-
profilePicture: string;
14-
isTopSpeaker: boolean;
15-
sessions: Session[];
6+
id: string;
7+
name: string;
8+
firstName: string;
9+
lastName: string;
10+
fullName: string;
11+
bio: string;
12+
tagLine: string;
13+
profilePicture: string;
14+
isTopSpeaker: boolean;
15+
sessions: Session[];
1616
}
1717

1818
export interface Session {
19-
id: string;
20-
name: string;
21-
title: string;
22-
description: string;
23-
startsAt: string;
24-
endsAt: string;
25-
isServiceSession: boolean;
26-
isPlenumSession: boolean;
27-
speakers: Speaker[];
28-
roomId: number;
29-
room: string;
19+
id: string;
20+
name: string;
21+
title: string;
22+
description: string;
23+
startsAt: string;
24+
endsAt: string;
25+
isServiceSession: boolean;
26+
isPlenumSession: boolean;
27+
speakers: Speaker[];
28+
roomId: number;
29+
room: string;
30+
questionAnswers: QuestionAnswer[];
31+
slideDeck: string;
32+
}
33+
34+
export interface QuestionAnswer {
35+
id: number;
36+
answer: string;
3037
}
3138

3239
export interface GridEntry {
33-
date: string;
34-
rooms: Room[];
35-
timeSlots: TimeSlot[];
40+
date: string;
41+
rooms: Room[];
42+
timeSlots: TimeSlot[];
3643
}
3744

3845
export interface Room {
39-
id: number;
40-
name: string;
41-
sessions: Session[];
42-
session: Session;
46+
id: number;
47+
name: string;
48+
sessions: Session[];
49+
session: Session;
4350
}
4451

4552
export interface TimeSlot {
46-
slotStart: string;
47-
rooms: Room[];
53+
slotStart: string;
54+
rooms: Room[];
55+
}
56+
57+
export interface SessionList {
58+
sessions: Session[];
4859
}
4960

5061
export const useSessionizeSpeakers = () => {
51-
const [speakers,setSpeakers] = useState<Speaker[]>([]);
62+
const [speakers, setSpeakers] = useState<Speaker[]>([]);
5263

53-
const fetchSpeakers = async () => {
54-
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`);
55-
const data = await response.json();
56-
setSpeakers(data);
57-
};
64+
const fetchSpeakers = async () => {
65+
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`);
66+
const data = await response.json();
67+
setSpeakers(data);
68+
};
5869

59-
useEffect(() => {
60-
fetchSpeakers();
61-
}, []);
70+
useEffect(() => {
71+
fetchSpeakers();
72+
}, []);
6273

63-
return {speakers};
74+
return { speakers };
6475
};
6576

6677
export const useSessionizeSchedule = () => {
67-
const [grid,setGrid] = useState<GridEntry[]>([]);
68-
const [speakers,setSpeakers] = useState<Speaker[]>([]);
69-
const [schedule,setSchedule] = useState<GridEntry[]>([]);
70-
71-
const fetchGrid = async () => {
72-
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Grid`);
73-
const data = await response.json();
74-
setGrid(data);
75-
}
76-
77-
const fetchSpeakers = async () => {
78-
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`);
79-
const data = await response.json();
80-
setSpeakers(data);
81-
};
82-
83-
useEffect(() => {
84-
fetchGrid();
85-
}, []);
86-
useEffect(() => {
87-
fetchSpeakers();
88-
}, []);
89-
useEffect(() => {
90-
if (grid.length === 0 || speakers.length === 0) return;
91-
const schedule = grid.map((entry) => {
92-
const timeSlots = entry.timeSlots.map((timeSlot) => {
93-
const rooms = timeSlot.rooms.map((room) => {
94-
const sessionSpeakers = room.session.speakers.map((speaker) => {
95-
return speakers.find((s) => s.id === speaker.id);
96-
});
97-
room.session.speakers = sessionSpeakers;
98-
return room;
99-
});
100-
return {
101-
...timeSlot,
102-
rooms,
103-
};
104-
});
105-
return {
106-
...entry,
107-
timeSlots,
108-
};
78+
const [grid, setGrid] = useState<GridEntry[]>([]);
79+
const [speakers, setSpeakers] = useState<Speaker[]>([]);
80+
const [schedule, setSchedule] = useState<GridEntry[]>([]);
81+
const [sessions, setSessions] = useState<SessionList[]>([]);
82+
83+
const fetchGrid = async () => {
84+
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Grid`);
85+
const data = await response.json();
86+
setGrid(data);
87+
};
88+
89+
const fetchSpeakers = async () => {
90+
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Speakers`);
91+
const data = await response.json();
92+
setSpeakers(data);
93+
};
94+
95+
const fetchSessions = async () => {
96+
const response = await fetch(`https://sessionize.com/api/v2/${SESSIONIZE_ID}/view/Sessions`);
97+
const data = await response.json();
98+
setSessions(data);
99+
};
100+
101+
useEffect(() => {
102+
fetchGrid();
103+
}, []);
104+
useEffect(() => {
105+
fetchSpeakers();
106+
}, []);
107+
useEffect(() => {
108+
fetchSessions();
109+
}, []);
110+
useEffect(() => {
111+
if (grid.length === 0 || speakers.length === 0 || sessions.length === 0) return;
112+
const schedule = grid.map((entry) => {
113+
const timeSlots = entry.timeSlots.map((timeSlot) => {
114+
const rooms = timeSlot.rooms.map((room) => {
115+
const sessionSpeakers = room.session.speakers.map((speaker) => {
116+
return speakers.find((s) => s.id === speaker.id);
117+
});
118+
room.session.speakers = sessionSpeakers;
119+
120+
const session = sessions[0].sessions.find((s) => room.session.id === s.id);
121+
if (session !== undefined) {
122+
const qa = session.questionAnswers.find((q) => q.id === 88726);
123+
if (qa !== undefined) {
124+
room.session.slideDeck = qa.answer;
125+
}
126+
}
127+
128+
return room;
109129
});
110-
setSchedule(schedule);
111-
}, [grid,speakers]);
112-
113-
114-
return {schedule};
130+
return {
131+
...timeSlot,
132+
rooms,
133+
};
134+
});
135+
return {
136+
...entry,
137+
timeSlots,
138+
};
139+
});
140+
setSchedule(schedule);
141+
}, [grid, speakers, sessions]);
142+
143+
return { schedule };
115144
};

0 commit comments

Comments
 (0)