Skip to content

Commit 1384c74

Browse files
authored
Merge pull request #346 from vuejs-jp/enhance/filter-query-etc
Enhance/filter query etc
2 parents 744df41 + 9d8eef6 commit 1384c74

File tree

8 files changed

+108
-70
lines changed

8 files changed

+108
-70
lines changed

apps/web/app/components/TeamPageSection.vue

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
<script setup lang="ts">
22
import { team as teamData, volunteers } from '~/utils/constants'
3-
// import type { StaffInfo } from '@vuejs-jp/model'
4-
// import { useFetch, useRuntimeConfig } from '#imports'
3+
import type { StaffCategory, StaffInfo } from '@vuejs-jp/model'
4+
import { useRuntimeConfig } from '#imports'
55
6-
// type Staffs = Record<'allStaffs', StaffInfo>
6+
type Staffs = Record<StaffCategory, StaffInfo>
77
8-
// const config = useRuntimeConfig()
8+
const props = defineProps<{
9+
data: Staffs
10+
}>()
911
10-
// const { data, error } = await useFetch('/api/staffs')
11-
// if (error.value) {
12-
// console.error(error.value)
13-
// }
14-
// const { allStaffs } = data.value as Staffs
15-
// const team = config.public.staffDatasource === 'supabase' ? allStaffs.list : teamData
16-
const team = teamData
12+
const config = useRuntimeConfig()
13+
14+
const coreTeam = config.public.staffDatasource === 'supabase' ? props.data.coreStaffs.list : teamData
15+
const volunteerTeam = config.public.staffDatasource === 'supabase'
16+
? props.data.volunteerStaffs.list.map((staff) => staff.name)
17+
: volunteers
18+
// const team = teamData
1719
</script>
1820

1921
<template>
@@ -28,7 +30,7 @@ const team = teamData
2830
</div>
2931

3032
<div class="team-members-container">
31-
<div v-for="member in team" :key="member.name" class="team-member-wrapper">
33+
<div v-for="member in coreTeam" :key="member.name" class="team-member-wrapper">
3234
<template v-if="member.x_id !== ''">
3335
<a :href="`https://x.com/${member.x_id}`" target="_blank" :aria-label="member.name">
3436
<VFAvatar :src="member.image_url" :alt="member.name" />
@@ -39,7 +41,8 @@ const team = teamData
3941
target="_blank"
4042
:href="`https://x.com/${member.x_id}`"
4143
color="vue-blue"
42-
>{{ member.name }}
44+
>
45+
{{ member.x_id ?? member.github_id }}
4346
</VFTextLink>
4447
</div>
4548
</template>
@@ -59,7 +62,7 @@ const team = teamData
5962
</VFTitle>
6063

6164
<div class="volunteer-members-container">
62-
<VFCreditList :list="volunteers" />
65+
<VFCreditList :list="volunteerTeam" />
6366
</div>
6467
</article>
6568
</section>

apps/web/app/pages/index.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,16 @@ const { data: sponsors, error: error2, refresh: refreshSponsor } = await useFetc
2121
if (error2.value) {
2222
console.error(error2.value)
2323
}
24+
const { data: staffs, error: error3, refresh: refreshStaff } = await useFetch('/api/staffs')
25+
if (error3.value) {
26+
console.error(error3.value)
27+
}
2428
2529
onMounted(function () {
2630
window.addEventListener('popstate', async function (event) {
2731
await refreshSpeaker()
2832
await refreshSponsor()
33+
await refreshStaff()
2934
await reloadNuxtApp()
3035
})
3136
})
@@ -52,5 +57,5 @@ useHead({
5257
<SponsorPageSection :data="sponsors" />
5358
<CooperationPartnerSection />
5459
<FormPageSection />
55-
<TeamPageSection />
60+
<TeamPageSection :data="staffs" />
5661
</template>

apps/web/app/server/api/jobs.get.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,25 @@ export default defineEventHandler(async (event) => {
1414
type: 'job',
1515
title: 'job',
1616
list: jobs
17-
.filter((j: Job) => {
18-
if (process.env.NODE_ENV === 'production') return j.is_open === true
19-
return j
17+
.filter(job => {
18+
if (process.env.NODE_ENV === 'production') return job.is_open === true
19+
return job
2020
})
2121
.sort((a: Job, b: Job) => {
2222
if (b.display_order && a.display_order) return a.display_order - b.display_order
23-
return a.created_at < b.created_at ? -1 : 1
24-
}),
23+
return 1
24+
})
25+
.concat(
26+
jobs
27+
.filter((job: Job) => {
28+
if (process.env.NODE_ENV === 'production') return job.is_open === true
29+
return job
30+
})
31+
.filter(s => s.display_order === null)
32+
.sort((a: Job, b: Job) => {
33+
return a.created_at < b.created_at ? -1 : 1
34+
}),
35+
),
2536
}
2637

2738
return { allJobs }

apps/web/app/server/api/speakers.get.ts

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,42 +27,66 @@ export default defineEventHandler(async (event) => {
2727
type: 'session',
2828
title: 'Session',
2929
list: speakers
30-
.filter((speaker: Speaker) => {
31-
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'session' && speaker.is_open === true
32-
return speaker.session_type === 'session'
33-
})
30+
.filter(speaker => speaker.session_type === 'session' && speaker.display_order !== null)
3431
.sort((a: Speaker, b: Speaker) => {
3532
if (b.display_order && a.display_order) return a.display_order - b.display_order
36-
return a.created_at < b.created_at ? -1 : 1
37-
}),
33+
return 1
34+
})
35+
.concat(
36+
speakers
37+
.filter((speaker: Speaker) => {
38+
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'session' && speaker.is_open === true
39+
return speaker.session_type === 'session'
40+
})
41+
.filter(s => s.display_order === null)
42+
.sort((a: Speaker, b: Speaker) => {
43+
return a.created_at < b.created_at ? -1 : 1
44+
}),
45+
),
3846
}
3947

4048
const lightningTalkSpeakers: SpeakerInfo = {
4149
type: 'lightning-talk',
4250
title: 'Lightning talk',
4351
list: speakers
44-
.filter((speaker: Speaker) => {
45-
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'lightning-talk' && speaker.is_open === true
46-
return speaker.session_type === 'lightning-talk'
47-
})
52+
.filter(speaker => speaker.session_type === 'lightning-talk' && speaker.display_order !== null)
4853
.sort((a: Speaker, b: Speaker) => {
4954
if (b.display_order && a.display_order) return a.display_order - b.display_order
50-
return a.created_at < b.created_at ? -1 : 1
51-
}),
55+
return 1
56+
})
57+
.concat(
58+
speakers
59+
.filter((speaker: Speaker) => {
60+
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'lightning-talk' && speaker.is_open === true
61+
return speaker.session_type === 'lightning-talk'
62+
})
63+
.filter(s => s.display_order === null)
64+
.sort((a: Speaker, b: Speaker) => {
65+
return a.created_at < b.created_at ? -1 : 1
66+
}),
67+
),
5268
}
5369

5470
const sponsorSessionSpeakers: SpeakerInfo = {
5571
type: 'sponsor-session',
5672
title: 'Sponsor session',
5773
list: speakers
58-
.filter((speaker: Speaker) => {
59-
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'sponsor-session' && speaker.is_open === true
60-
return speaker.session_type === 'sponsor-session'
61-
})
74+
.filter(speaker => speaker.session_type === 'sponsor-session' && speaker.display_order !== null)
6275
.sort((a: Speaker, b: Speaker) => {
6376
if (b.display_order && a.display_order) return a.display_order - b.display_order
64-
return a.created_at < b.created_at ? -1 : 1
65-
}),
77+
return 1
78+
})
79+
.concat(
80+
speakers
81+
.filter((speaker: Speaker) => {
82+
if (process.env.NODE_ENV === 'production') return speaker.session_type === 'sponsor-session' && speaker.is_open === true
83+
return speaker.session_type === 'sponsor-session'
84+
})
85+
.filter(s => s.display_order === null)
86+
.sort((a: Speaker, b: Speaker) => {
87+
return a.created_at < b.created_at ? -1 : 1
88+
}),
89+
),
6690
}
6791

6892
const panelEventPanelers: PanelerInfo = {

apps/web/app/server/api/sponsors.get.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export default defineEventHandler(async (event) => {
2929
return s['tag'].includes('platinum')
3030
})
3131
.sort((a: Sponsor, b: Sponsor) => {
32-
if (b.display_order && a.display_order) return a.display_order - b.display_order
3332
return a.created_at < b.created_at ? -1 : 1
3433
}),
3534
}
@@ -43,7 +42,6 @@ export default defineEventHandler(async (event) => {
4342
return s['tag'].includes('gold')
4443
})
4544
.sort((a: Sponsor, b: Sponsor) => {
46-
if (b.display_order && a.display_order) return a.display_order - b.display_order
4745
return a.created_at < b.created_at ? -1 : 1
4846
}),
4947
}
@@ -57,7 +55,6 @@ export default defineEventHandler(async (event) => {
5755
return s['tag'].includes('silver')
5856
})
5957
.sort((a: Sponsor, b: Sponsor) => {
60-
if (b.display_order && a.display_order) return a.display_order - b.display_order
6158
return a.created_at < b.created_at ? -1 : 1
6259
}),
6360
}
@@ -71,7 +68,6 @@ export default defineEventHandler(async (event) => {
7168
return s['tag'].includes('bronze')
7269
})
7370
.sort((a: Sponsor, b: Sponsor) => {
74-
if (b.display_order && a.display_order) return a.display_order - b.display_order
7571
return a.created_at < b.created_at ? -1 : 1
7672
}),
7773
}
@@ -85,7 +81,6 @@ export default defineEventHandler(async (event) => {
8581
return s['tag'].includes('special-naming-rights')
8682
})
8783
.sort((a: Sponsor, b: Sponsor) => {
88-
if (b.display_order && a.display_order) return a.display_order - b.display_order
8984
return a.created_at < b.created_at ? -1 : 1
9085
}),
9186
}
@@ -99,7 +94,6 @@ export default defineEventHandler(async (event) => {
9994
return s['tag'].includes('naming-rights')
10095
})
10196
.sort((a: Sponsor, b: Sponsor) => {
102-
if (b.display_order && a.display_order) return a.display_order - b.display_order
10397
return a.created_at < b.created_at ? -1 : 1
10498
}),
10599
}
@@ -113,7 +107,6 @@ export default defineEventHandler(async (event) => {
113107
return s['tag'].includes('special-lunch')
114108
})
115109
.sort((a: Sponsor, b: Sponsor) => {
116-
if (b.display_order && a.display_order) return a.display_order - b.display_order
117110
return a.created_at < b.created_at ? -1 : 1
118111
}),
119112
}
@@ -127,7 +120,6 @@ export default defineEventHandler(async (event) => {
127120
return s['tag'].includes('lunch')
128121
})
129122
.sort((a: Sponsor, b: Sponsor) => {
130-
if (b.display_order && a.display_order) return a.display_order - b.display_order
131123
return a.created_at < b.created_at ? -1 : 1
132124
}),
133125
}
@@ -141,7 +133,6 @@ export default defineEventHandler(async (event) => {
141133
return s['tag'].includes('after-party')
142134
})
143135
.sort((a: Sponsor, b: Sponsor) => {
144-
if (b.display_order && a.display_order) return a.display_order - b.display_order
145136
return a.created_at < b.created_at ? -1 : 1
146137
}),
147138
}
@@ -155,7 +146,6 @@ export default defineEventHandler(async (event) => {
155146
return s['tag'].includes('name-card')
156147
})
157148
.sort((a: Sponsor, b: Sponsor) => {
158-
if (b.display_order && a.display_order) return a.display_order - b.display_order
159149
return a.created_at < b.created_at ? -1 : 1
160150
}),
161151
}
@@ -169,7 +159,6 @@ export default defineEventHandler(async (event) => {
169159
return s['tag'].includes('simultaneous-interpretation')
170160
})
171161
.sort((a: Sponsor, b: Sponsor) => {
172-
if (b.display_order && a.display_order) return a.display_order - b.display_order
173162
return a.created_at < b.created_at ? -1 : 1
174163
}),
175164
}
@@ -183,7 +172,6 @@ export default defineEventHandler(async (event) => {
183172
return s['tag'].includes('childcare')
184173
})
185174
.sort((a: Sponsor, b: Sponsor) => {
186-
if (b.display_order && a.display_order) return a.display_order - b.display_order
187175
return a.created_at < b.created_at ? -1 : 1
188176
}),
189177
}
@@ -197,7 +185,6 @@ export default defineEventHandler(async (event) => {
197185
return s['tag'].includes('handson')
198186
})
199187
.sort((a: Sponsor, b: Sponsor) => {
200-
if (b.display_order && a.display_order) return a.display_order - b.display_order
201188
return a.created_at < b.created_at ? -1 : 1
202189
}),
203190
}
@@ -211,7 +198,6 @@ export default defineEventHandler(async (event) => {
211198
return s['tag'].includes('media')
212199
})
213200
.sort((a: Sponsor, b: Sponsor) => {
214-
if (b.display_order && a.display_order) return a.display_order - b.display_order
215201
return a.created_at < b.created_at ? -1 : 1
216202
}),
217203
}
@@ -225,7 +211,6 @@ export default defineEventHandler(async (event) => {
225211
return s['tag'].includes('tool')
226212
})
227213
.sort((a: Sponsor, b: Sponsor) => {
228-
if (b.display_order && a.display_order) return a.display_order - b.display_order
229214
return a.created_at < b.created_at ? -1 : 1
230215
}),
231216
}

apps/web/app/server/api/staffs.get.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,22 @@ export default defineEventHandler(async (event) => {
1818
if (process.env.NODE_ENV === 'production') return staff.is_open === true && staff.is_volunteer === false
1919
return staff.is_volunteer === false
2020
})
21+
.filter(staff => staff.display_order !== null)
2122
.sort((a: Staff, b: Staff) => {
22-
if (a.display_order) return -1
23-
if (b.display_order) return 1
24-
if (!a.display_order) return a.name < b.name ? -1 : 1
25-
if (!b.display_order) return a.name < b.name ? -1 : 1
26-
return a.display_order - b.display_order
27-
}),
23+
if (b.display_order && a.display_order) return a.display_order - b.display_order
24+
return 1
25+
})
26+
.concat(
27+
staffs
28+
.filter((staff: Staff) => {
29+
if (process.env.NODE_ENV === 'production') return staff.is_open === true && staff.is_volunteer === false
30+
return staff.is_volunteer === false
31+
})
32+
.filter(staff => staff.display_order === null)
33+
.sort((a: Staff, b: Staff) => {
34+
return a.created_at < b.created_at ? -1 : 1
35+
}),
36+
),
2837
}
2938

3039
const volunteerStaffs: StaffInfo = {
@@ -36,11 +45,7 @@ export default defineEventHandler(async (event) => {
3645
return staff.is_volunteer === true
3746
})
3847
.sort((a: Staff, b: Staff) => {
39-
if (a.display_order) return -1
40-
if (b.display_order) return 1
41-
if (!a.display_order) return a.name < b.name ? -1 : 1
42-
if (!b.display_order) return a.name < b.name ? -1 : 1
43-
return a.display_order - b.display_order
48+
return a.created_at < b.created_at ? -1 : 1
4449
}),
4550
}
4651

apps/web/app/utils/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { TeamData } from '@vuejs-jp/model'
2+
13
export const conferenceTitle = 'Vue Fes Japan 2024'
24

35
export const ogDescription =
@@ -82,7 +84,7 @@ export const personalSponsors = [
8284
'Haruki Tetone',
8385
]
8486

85-
export const team = [
87+
export const team: TeamData[] = [
8688
{
8789
name: 'kazu_pon',
8890
image_url: 'team/kazu_pon.jpg',

0 commit comments

Comments
 (0)