add bage to show attendance amount close #29

This commit is contained in:
Adrian Zürcher
2025-11-17 16:58:58 +01:00
parent f070a4b0df
commit 94dc125a1b

View File

@@ -7,6 +7,7 @@
:inner-padding="0" :inner-padding="0"
> >
<q-card> <q-card>
<!-- tabs declaration in header-->
<q-tabs <q-tabs
v-model="tab" v-model="tab"
dense dense
@@ -16,21 +17,37 @@
align="justify" align="justify"
narrow-indicator narrow-indicator
> >
<q-tab no-caps name="attendance" :label="$t('attendees')" /> <q-tab no-caps name="attendance" :label="$t('attendees')"
<q-tab no-caps name="noneAttendees" :label="$t('noneAttendees')" /> ><q-badge color="primary" text-color="primary-text" floating transparent>{{
attendees.length
}}</q-badge></q-tab
>
<q-tab no-caps name="noneAttendees" :label="$t('noneAttendees')"
><q-badge color="primary" text-color="primary-text" floating transparent>{{
missingAttendanceAmount
}}</q-badge></q-tab
>
</q-tabs> </q-tabs>
<q-separator /> <q-separator />
<!--tab of attenting members-->
<q-tab-panels v-model="tab" animated> <q-tab-panels v-model="tab" animated>
<q-tab-panel name="attendance" style="padding: 0px"> <q-tab-panel name="attendance" style="padding: 0px">
<AttendeesTable :event="localEvent!" v-on:update="updateTable" /> <AttendeesTable
:event="localEvent!"
:event-array="eA"
v-on:update="(val) => updateTable(val)"
/>
</q-tab-panel> </q-tab-panel>
<!--tab of missing attenting members-->
<q-tab-panel name="noneAttendees" style="padding: 0px"> <q-tab-panel name="noneAttendees" style="padding: 0px">
<MembersTable <MembersTable
add-attendees add-attendees
:compare-members="attendees" :compare-members="attendees"
v-on:update-event="updateTable" v-on:update-event="(val) => updateTable(val)"
:event-id="localEvent?.id ?? 0" :event-id="localEvent?.id ?? 0"
/> />
</q-tab-panel> </q-tab-panel>
@@ -40,28 +57,68 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
// imports
import AttendeesTable from './AttendeesTable.vue'; import AttendeesTable from './AttendeesTable.vue';
import MembersTable from '../members/MembersTable.vue'; import MembersTable from '../members/MembersTable.vue';
import DialogFrame from 'src/vueLib/dialog/DialogFrame.vue'; import DialogFrame from 'src/vueLib/dialog/DialogFrame.vue';
import type { Event } from 'src/vueLib/models/event'; import type { Event } from 'src/vueLib/models/event';
import { ref } from 'vue'; import { ref } from 'vue';
import { useAttendeesTable } from './AttendeesTable'; import { useAttendeesTable } from './AttendeesTable';
import { useMemberTable } from '../members/MembersTable';
import { getLocalPageDefaults } from 'src/localstorage/localStorage';
//use constants and function of imports
const { attendees, updateAttendees } = useAttendeesTable();
const { setNewFilter, filteredMembers, updateMembers } = useMemberTable();
// declare emits
const emit = defineEmits(['update']); const emit = defineEmits(['update']);
// declarations
const dialog = ref(); const dialog = ref();
const localEvent = ref<Event>(); const localEvent = ref<Event>();
const missingAttendanceAmount = ref(0);
const attendanceAmount = ref(0);
const eA = ref(0);
const tab = ref('attendance'); const tab = ref('attendance');
const { attendees, updateAttendees } = useAttendeesTable();
const open = (event: Event) => { // opens attendace dialog of event
const open = async (eventArray: number, event: Event) => {
// local declarations
localEvent.value = event; localEvent.value = event;
attendees.value = event.attendees ?? []; attendanceAmount.value = event.attendees.length ?? [];
eA.value = eventArray;
// get attendance
await updateAttendees(eventArray);
//get missing attendance from memer updateTable
await updateMembers(event.attendees);
// set custom filter
const defaults = getLocalPageDefaults('attendance');
setNewFilter(defaults?.filteredColumn || '', ...(defaults?.filteredValue ?? []));
// set amount of missing attendace
missingAttendanceAmount.value = filteredMembers.value.length;
//open atttendance dialog
dialog.value.open(); dialog.value.open();
}; };
async function updateTable() { //updates amount of table display and both tables
await updateAttendees(); async function updateTable(amount?: number) {
// check wether amount is given and if it adds or substracts amount
if (amount && amount < 0) {
missingAttendanceAmount.value -= amount;
} else if (amount) {
missingAttendanceAmount.value = amount;
}
// update attendace table
await updateAttendees(eA.value);
// update for amoutn display in tab
if (localEvent.value) localEvent.value.attendees = attendees.value;
//emit to update event table
emit('update'); emit('update');
} }