diff --git a/apps/web/app/components/TeamPageSection.vue b/apps/web/app/components/TeamPageSection.vue index 58988bf6..20cc4771 100644 --- a/apps/web/app/components/TeamPageSection.vue +++ b/apps/web/app/components/TeamPageSection.vue @@ -1,19 +1,21 @@ diff --git a/apps/web/app/server/api/jobs.get.ts b/apps/web/app/server/api/jobs.get.ts index 9293aa27..1b3ea365 100644 --- a/apps/web/app/server/api/jobs.get.ts +++ b/apps/web/app/server/api/jobs.get.ts @@ -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 } diff --git a/apps/web/app/server/api/speakers.get.ts b/apps/web/app/server/api/speakers.get.ts index 2b727588..5046334c 100644 --- a/apps/web/app/server/api/speakers.get.ts +++ b/apps/web/app/server/api/speakers.get.ts @@ -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 = { diff --git a/apps/web/app/server/api/sponsors.get.ts b/apps/web/app/server/api/sponsors.get.ts index ecf19350..4f44f523 100644 --- a/apps/web/app/server/api/sponsors.get.ts +++ b/apps/web/app/server/api/sponsors.get.ts @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } @@ -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 }), } diff --git a/apps/web/app/server/api/staffs.get.ts b/apps/web/app/server/api/staffs.get.ts index 3328976d..1620fb6e 100644 --- a/apps/web/app/server/api/staffs.get.ts +++ b/apps/web/app/server/api/staffs.get.ts @@ -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 = { @@ -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 }), } diff --git a/apps/web/app/utils/constants.ts b/apps/web/app/utils/constants.ts index 16df6cf4..269b9871 100644 --- a/apps/web/app/utils/constants.ts +++ b/apps/web/app/utils/constants.ts @@ -1,3 +1,5 @@ +import type { TeamData } from '@vuejs-jp/model' + export const conferenceTitle = 'Vue Fes Japan 2024' export const ogDescription = @@ -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', diff --git a/packages/model/lib/staff.ts b/packages/model/lib/staff.ts index 93e7e3ce..feccd0dd 100644 --- a/packages/model/lib/staff.ts +++ b/packages/model/lib/staff.ts @@ -2,13 +2,9 @@ export type StaffCategory = | 'coreStaffs' | 'volunteerStaffs' -export type Staff = { +export type Staff = TeamData & { id?: string - name: string detail_page_id: string - image_url: string - x_id?: string - github_id?: string is_open: boolean display_order?: number is_volunteer: boolean @@ -16,6 +12,13 @@ export type Staff = { updated_at: string } +export type TeamData = { + name: string + image_url: string + x_id?: string + github_id?: string +} + export type StaffInfo = { type: 'core-staff' | 'volunteer-staff' title: string