Skip to content

Commit 2a5b36f

Browse files
committed
feat(talks): Add links to slide urls
1 parent 110b0c7 commit 2a5b36f

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

src/content.js

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
const talks = require("./talks");
1+
const schedules = require("./schedules");
2+
const talks = resolveSlideUrls(require("./talks"), schedules);
23
const people = resolveSocialLinks(require("./people"));
34
const enums = require("./enums");
45

@@ -44,7 +45,7 @@ module.exports = {
4445
silverSponsors,
4546
bronzeSponsors,
4647
presentations,
47-
schedules: require("./schedules"),
48+
schedules,
4849
speakers: associate(speakers, [
4950
{
5051
field: "keynotes",
@@ -135,3 +136,49 @@ function resolveSocialLinks(data) {
135136
social: resolve(o.social, o),
136137
}));
137138
}
139+
140+
function resolveSlideUrls(talks, schedules) {
141+
const talksArray = Object.values(talks);
142+
const sessions = resolveSessions(schedules).filter(s => talksArray.indexOf(s) >= 0);
143+
144+
return Object.keys(talks).map((slug) => {
145+
const talk = talks[slug];
146+
const index = sessions.findIndex(t => t === talk);
147+
148+
return {
149+
urls: {
150+
slides: resolveSlideUrl(index + 1, slug)
151+
},
152+
...talk
153+
}
154+
});
155+
}
156+
157+
function resolveSessions(schedules) {
158+
return flatten(schedules.map(({ intervals }) => {
159+
return flatten(intervals.map(({ sessions }) => sessions));
160+
}));
161+
}
162+
163+
// https://gist.github.com/Integralist/749153aa53fea7168e7e
164+
function flatten(list) {
165+
return list.reduce(
166+
(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
167+
);
168+
};
169+
170+
function resolveSlideUrl(index, slug) {
171+
return `http://slides.react-finland.fi/2018/${leftFill({ amount: 2, character: 0, input: index })}-${slug}.pdf`
172+
}
173+
174+
function leftFill({ amount, character, input }) {
175+
const realAmount = amount - (input.toString()).length;
176+
177+
if (realAmount < 1) {
178+
return input;
179+
}
180+
181+
const characters = new Array(realAmount).fill(character).join('');
182+
183+
return characters + input;
184+
}

src/talks/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
module.exports = Object.values(require('require-dir')());
1+
module.exports = require('require-dir')();
22

src/type-defs.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ module.exports = `
3131
speakers: [Contact],
3232
tickets: [Ticket],
3333
keywords: [String],
34-
location: Contact
34+
location: Contact,
35+
urls: SessionUrls
36+
}
37+
38+
type SessionUrls {
39+
slides: String,
40+
video: String
3541
}
3642
3743
type Page {

tests.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,20 @@ assert.equal(
6060
).title
6161
);
6262

63+
assert.equal(
64+
content.presentations.find(
65+
o => o.title === "Declarative state and side effects"
66+
).urls.slides,
67+
'http://slides.react-finland.fi/2018/02-christian-alfoni.pdf'
68+
);
69+
70+
assert.equal(
71+
content.keynotes.find(
72+
o => o.title === "How React changed everything"
73+
).urls.slides,
74+
'http://slides.react-finland.fi/2018/13-ken-wheeler.pdf'
75+
);
76+
6377
assert.equal(
6478
content.speakers.find(o => o.name === "Christian Alfoni").presentations[0]
6579
.title,

0 commit comments

Comments
 (0)