Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 17 additions & 14 deletions apps/web/app/components/TeamPageSection.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
<script setup lang="ts">
import { team as teamData, volunteers } from '~/utils/constants'
// import type { StaffInfo } from '@vuejs-jp/model'
// import { useFetch, useRuntimeConfig } from '#imports'
import type { StaffCategory, StaffInfo } from '@vuejs-jp/model'
import { useRuntimeConfig } from '#imports'

// type Staffs = Record<'allStaffs', StaffInfo>
type Staffs = Record<StaffCategory, StaffInfo>

// const config = useRuntimeConfig()
const props = defineProps<{
data: Staffs
}>()

// const { data, error } = await useFetch('/api/staffs')
// if (error.value) {
// console.error(error.value)
// }
// const { allStaffs } = data.value as Staffs
// const team = config.public.staffDatasource === 'supabase' ? allStaffs.list : teamData
const team = teamData
const config = useRuntimeConfig()

const coreTeam = config.public.staffDatasource === 'supabase' ? props.data.coreStaffs.list : teamData
const volunteerTeam = config.public.staffDatasource === 'supabase'
? props.data.volunteerStaffs.list.map((staff) => staff.name)
: volunteers
// const team = teamData
</script>

<template>
Expand All @@ -28,7 +30,7 @@ const team = teamData
</div>

<div class="team-members-container">
<div v-for="member in team" :key="member.name" class="team-member-wrapper">
<div v-for="member in coreTeam" :key="member.name" class="team-member-wrapper">
<template v-if="member.x_id !== ''">
<a :href="`https://x.com/${member.x_id}`" target="_blank" :aria-label="member.name">
<VFAvatar :src="member.image_url" :alt="member.name" />
Expand All @@ -39,7 +41,8 @@ const team = teamData
target="_blank"
:href="`https://x.com/${member.x_id}`"
color="vue-blue"
>{{ member.name }}
>
{{ member.x_id ?? member.github_id }}
</VFTextLink>
</div>
</template>
Expand All @@ -59,7 +62,7 @@ const team = teamData
</VFTitle>

<div class="volunteer-members-container">
<VFCreditList :list="volunteers" />
<VFCreditList :list="volunteerTeam" />
</div>
</article>
</section>
Expand Down
7 changes: 6 additions & 1 deletion apps/web/app/pages/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,16 @@ const { data: sponsors, error: error2, refresh: refreshSponsor } = await useFetc
if (error2.value) {
console.error(error2.value)
}
const { data: staffs, error: error3, refresh: refreshStaff } = await useFetch('/api/staffs')
if (error3.value) {
console.error(error3.value)
}

onMounted(function () {
window.addEventListener('popstate', async function (event) {
await refreshSpeaker()
await refreshSponsor()
await refreshStaff()
await reloadNuxtApp()
})
})
Expand All @@ -52,5 +57,5 @@ useHead({
<SponsorPageSection :data="sponsors" />
<CooperationPartnerSection />
<FormPageSection />
<TeamPageSection />
<TeamPageSection :data="staffs" />
</template>
21 changes: 16 additions & 5 deletions apps/web/app/server/api/jobs.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,25 @@ export default defineEventHandler(async (event) => {
type: 'job',
title: 'job',
list: jobs
.filter((j: Job) => {
if (process.env.NODE_ENV === 'production') return j.is_open === true
return j
.filter(job => {
if (process.env.NODE_ENV === 'production') return job.is_open === true
return job
})
.sort((a: Job, b: Job) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
return 1
})
.concat(
jobs
.filter((job: Job) => {
if (process.env.NODE_ENV === 'production') return job.is_open === true
return job
})
.filter(s => s.display_order === null)
.sort((a: Job, b: Job) => {
return a.created_at < b.created_at ? -1 : 1
}),
),
}

return { allJobs }
Expand Down
60 changes: 42 additions & 18 deletions apps/web/app/server/api/speakers.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,42 +27,66 @@ export default defineEventHandler(async (event) => {
type: 'session',
title: 'Session',
list: speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'session' && speaker.is_open === true
return speaker.session_type === 'session'
})
.filter(speaker => speaker.session_type === 'session' && speaker.display_order !== null)
.sort((a: Speaker, b: Speaker) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
return 1
})
.concat(
speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'session' && speaker.is_open === true
return speaker.session_type === 'session'
})
.filter(s => s.display_order === null)
.sort((a: Speaker, b: Speaker) => {
return a.created_at < b.created_at ? -1 : 1
}),
),
}

const lightningTalkSpeakers: SpeakerInfo = {
type: 'lightning-talk',
title: 'Lightning talk',
list: speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'lightning-talk' && speaker.is_open === true
return speaker.session_type === 'lightning-talk'
})
.filter(speaker => speaker.session_type === 'lightning-talk' && speaker.display_order !== null)
.sort((a: Speaker, b: Speaker) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
return 1
})
.concat(
speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'lightning-talk' && speaker.is_open === true
return speaker.session_type === 'lightning-talk'
})
.filter(s => s.display_order === null)
.sort((a: Speaker, b: Speaker) => {
return a.created_at < b.created_at ? -1 : 1
}),
),
}

const sponsorSessionSpeakers: SpeakerInfo = {
type: 'sponsor-session',
title: 'Sponsor session',
list: speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'sponsor-session' && speaker.is_open === true
return speaker.session_type === 'sponsor-session'
})
.filter(speaker => speaker.session_type === 'sponsor-session' && speaker.display_order !== null)
.sort((a: Speaker, b: Speaker) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
return 1
})
.concat(
speakers
.filter((speaker: Speaker) => {
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'sponsor-session' && speaker.is_open === true
return speaker.session_type === 'sponsor-session'
})
.filter(s => s.display_order === null)
.sort((a: Speaker, b: Speaker) => {
return a.created_at < b.created_at ? -1 : 1
}),
),
}

const panelEventPanelers: PanelerInfo = {
Expand Down
15 changes: 0 additions & 15 deletions apps/web/app/server/api/sponsors.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('platinum')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -43,7 +42,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('gold')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -57,7 +55,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('silver')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -71,7 +68,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('bronze')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -85,7 +81,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('special-naming-rights')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -99,7 +94,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('naming-rights')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -113,7 +107,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('special-lunch')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -127,7 +120,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('lunch')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -141,7 +133,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('after-party')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -155,7 +146,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('name-card')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -169,7 +159,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('simultaneous-interpretation')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -183,7 +172,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('childcare')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -197,7 +185,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('handson')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -211,7 +198,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('media')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand All @@ -225,7 +211,6 @@ export default defineEventHandler(async (event) => {
return s['tag'].includes('tool')
})
.sort((a: Sponsor, b: Sponsor) => {
if (b.display_order && a.display_order) return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}
Expand Down
27 changes: 16 additions & 11 deletions apps/web/app/server/api/staffs.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,22 @@ export default defineEventHandler(async (event) => {
if (process.env.NODE_ENV === 'production') return staff.is_open === true && staff.is_volunteer === false
return staff.is_volunteer === false
})
.filter(staff => staff.display_order !== null)
.sort((a: Staff, b: Staff) => {
if (a.display_order) return -1
if (b.display_order) return 1
if (!a.display_order) return a.name < b.name ? -1 : 1
if (!b.display_order) return a.name < b.name ? -1 : 1
return a.display_order - b.display_order
}),
if (b.display_order && a.display_order) return a.display_order - b.display_order
return 1
})
.concat(
staffs
.filter((staff: Staff) => {
if (process.env.NODE_ENV === 'production') return staff.is_open === true && staff.is_volunteer === false
return staff.is_volunteer === false
})
.filter(staff => staff.display_order === null)
.sort((a: Staff, b: Staff) => {
return a.created_at < b.created_at ? -1 : 1
}),
),
}

const volunteerStaffs: StaffInfo = {
Expand All @@ -36,11 +45,7 @@ export default defineEventHandler(async (event) => {
return staff.is_volunteer === true
})
.sort((a: Staff, b: Staff) => {
if (a.display_order) return -1
if (b.display_order) return 1
if (!a.display_order) return a.name < b.name ? -1 : 1
if (!b.display_order) return a.name < b.name ? -1 : 1
return a.display_order - b.display_order
return a.created_at < b.created_at ? -1 : 1
}),
}

Expand Down
4 changes: 3 additions & 1 deletion apps/web/app/utils/constants.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { TeamData } from '@vuejs-jp/model'

export const conferenceTitle = 'Vue Fes Japan 2024'

export const ogDescription =
Expand Down Expand Up @@ -82,7 +84,7 @@ export const personalSponsors = [
'Haruki Tetone',
]

export const team = [
export const team: TeamData[] = [
{
name: 'kazu_pon',
image_url: 'team/kazu_pon.jpg',
Expand Down
Loading