Skip to content

Commit bbd0fbb

Browse files
committed
fix: sync day tabs with meeting day filter on projects page
1 parent bd1d9e3 commit bbd0fbb

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

pages/projects.vue

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@
3333
.day-tabs
3434
button.day-tab-btn(
3535
:class="{ active: selectedDayTab === 'ALL' }"
36-
@click="selectedDayTab = 'ALL'"
36+
@click="setDayTab('ALL')"
3737
) All
3838
button.day-tab-btn(
3939
:class="{ active: selectedDayTab === 'WEDNESDAY' }"
40-
@click="selectedDayTab = 'WEDNESDAY'"
40+
@click="setDayTab('WEDNESDAY')"
4141
) Wednesday
4242
button.day-tab-btn(
4343
:class="{ active: selectedDayTab === 'THURSDAY' }"
44-
@click="selectedDayTab = 'THURSDAY'"
44+
@click="setDayTab('THURSDAY')"
4545
) Thursday
4646

4747
DataTable.beige-card.overflow-hidden(
@@ -150,7 +150,7 @@
150150
</template>
151151

152152
<script lang="ts" setup>
153-
import { onMounted, ref, computed } from 'vue';
153+
import { onMounted, ref, computed, watch } from 'vue';
154154
import { FilterMatchMode } from '@primevue/core/api';
155155
import type { ProjectType, Semester } from '@prisma/client';
156156
import { XCircleIcon } from '@heroicons/vue/24/solid';
@@ -173,6 +173,17 @@ type DayTab = 'ALL' | 'WEDNESDAY' | 'THURSDAY';
173173
type MeetingDay = 'WEDNESDAY' | 'THURSDAY' | 'BOTH';
174174
const selectedDayTab = ref<DayTab>('ALL');
175175
176+
const setDayTab = (tab: DayTab) => {
177+
selectedDayTab.value = tab;
178+
if (tab === 'ALL') {
179+
filters.value.meetingDay.value = [];
180+
} else if (tab === 'WEDNESDAY') {
181+
filters.value.meetingDay.value = ['WEDNESDAY', 'BOTH'];
182+
} else {
183+
filters.value.meetingDay.value = ['THURSDAY', 'BOTH'];
184+
}
185+
};
186+
176187
const getMeetingDay = (project: ProjectWithSemestersAndPartner): MeetingDay | null => {
177188
const day = project.meetingDay as MeetingDay | null | undefined;
178189
return day ?? null;
@@ -218,12 +229,24 @@ const filters = ref({
218229
name: { value: null, matchMode: FilterMatchMode.CONTAINS },
219230
description: { value: null, matchMode: FilterMatchMode.CONTAINS },
220231
type: { value: null, matchMode: FilterMatchMode.CONTAINS },
221-
meetingDay: { value: [], matchMode: FilterMatchMode.IN },
232+
meetingDay: { value: [] as MeetingDay[], matchMode: FilterMatchMode.IN },
222233
status: { value: [], matchMode: FilterMatchMode.IN },
223234
semester: { value: [], matchMode: FilterMatchMode.IN },
224235
partnerName: { value: null, matchMode: FilterMatchMode.CONTAINS }
225236
});
226237
238+
watch(() => filters.value.meetingDay.value, (val) => {
239+
if (!val || val.length === 0) {
240+
selectedDayTab.value = 'ALL';
241+
} else if (val.includes('WEDNESDAY') && !val.includes('THURSDAY')) {
242+
selectedDayTab.value = 'WEDNESDAY';
243+
} else if (val.includes('THURSDAY') && !val.includes('WEDNESDAY')) {
244+
selectedDayTab.value = 'THURSDAY';
245+
} else {
246+
selectedDayTab.value = 'ALL';
247+
}
248+
});
249+
227250
const formatTypesFilter = (types: ProjectType[] | undefined) => {
228251
if (!types || types.length === 0) return 'Any';
229252
if (types.length !== 1) return `${types.length} items selected`;

0 commit comments

Comments
 (0)