diff --git a/app/components/TheHome.server.vue b/app/components/TheHome.server.vue index e93056f8..e6530416 100644 --- a/app/components/TheHome.server.vue +++ b/app/components/TheHome.server.vue @@ -22,29 +22,63 @@ const links = [ }, ] -const { data: upcomingConferences } = await useFetch('/api/upcoming-conferences') +const [{ data: currentLocation }, { data: upcomingConferences }, { data: streams }, { data: articles }, { data: talks }] = await Promise.all([ + useFetch('/api/current-location'), + useFetch('/api/upcoming-conferences'), + useFetch('/api/streams', { + transform: streams => + streams.slice(0, 5).map(stream => ({ + title: stream.title, + thumbnail: stream.thumbnail_url + .replace('%{width}', '1200') + .replace('%{height}', '630'), + source: 'Twitch', + link: stream.url, + date: stream.created_at, + type: 'video', + video: stream.url, + })), + }), + useAsyncData(async () => { + const result = await queryCollection('blog').select('title', 'date', 'path').all() + return result + .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) + .slice(0, 4) + }), + useAsyncData( + () => + ((import.meta.server || import.meta.dev) as true) + && import('../data/talks.json').then(r => r.default as any as Talk[]), + { + transform: talks => { + const groupedTalks: Record = {} + for (const talk of talks) { + const slug = talk.group || talk.slug + if (groupedTalks[slug]) { + groupedTalks[slug]!.push(talk) + } + else { + groupedTalks[slug] = [talk] + } + } -const { data: streams } = await useFetch('/api/streams', { - transform: streams => - streams.slice(0, 5).map(stream => ({ - title: stream.title, - thumbnail: stream.thumbnail_url - .replace('%{width}', '1200') - .replace('%{height}', '630'), - source: 'Twitch', - link: stream.url, - date: stream.created_at, - type: 'video', - video: stream.url, - })), -}) + for (const group in groupedTalks) { + groupedTalks[group]!.sort( + (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(), + ) + } -const { data: articles } = await useAsyncData(async () => { - const result = await queryCollection('blog').select('title', 'date', 'path').all() - return result - .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) - .slice(0, 4) -}) + const groups = Object.entries(groupedTalks).sort( + ([_s1, [a]], [_s2, [b]]) => { + return new Date(b.date).getTime() - new Date(a.date).getTime() + }, + ) + + return groups.slice(0, 4).map(([_slug, [firstTalk]]) => firstTalk) + }, + }, + ), +]) interface Talk { slug: string @@ -60,40 +94,6 @@ interface Talk { repo?: string demo?: string } - -const { data: talks } = await useAsyncData( - () => - ((import.meta.server || import.meta.dev) as true) - && import('../data/talks.json').then(r => r.default as any as Talk[]), - { - transform: talks => { - const groupedTalks: Record = {} - for (const talk of talks) { - const slug = talk.group || talk.slug - if (groupedTalks[slug]) { - groupedTalks[slug]!.push(talk) - } - else { - groupedTalks[slug] = [talk] - } - } - - for (const group in groupedTalks) { - groupedTalks[group]!.sort( - (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(), - ) - } - - const groups = Object.entries(groupedTalks).sort( - ([_s1, [a]], [_s2, [b]]) => { - return new Date(b.date).getTime() - new Date(a.date).getTime() - }, - ) - - return groups.slice(0, 4).map(([_slug, [firstTalk]]) => firstTalk) - }, - }, -)