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 (
150150</template >
151151
152152<script lang="ts" setup>
153- import { onMounted , ref , computed } from ' vue' ;
153+ import { onMounted , ref , computed , watch } from ' vue' ;
154154import { FilterMatchMode } from ' @primevue/core/api' ;
155155import type { ProjectType , Semester } from ' @prisma/client' ;
156156import { XCircleIcon } from ' @heroicons/vue/24/solid' ;
@@ -173,6 +173,17 @@ type DayTab = 'ALL' | 'WEDNESDAY' | 'THURSDAY';
173173type MeetingDay = ' WEDNESDAY' | ' THURSDAY' | ' BOTH' ;
174174const 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+
176187const 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+
227250const 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