fix not updating member table close #30
This commit is contained in:
@@ -38,7 +38,7 @@ export function useAttendeesTable() {
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
|
||||||
//updates Attendees list from database
|
//updates Attendees list from database
|
||||||
async function updateAttendees() {
|
async function updateAttendees(eventArray: number) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
|
||||||
let events: Events | undefined;
|
let events: Events | undefined;
|
||||||
@@ -60,11 +60,16 @@ export function useAttendeesTable() {
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!events || events.length === 0 || !events[0]?.attendees || events[0].attendees === null) {
|
if (
|
||||||
|
!events ||
|
||||||
|
events.length === 0 ||
|
||||||
|
!events[eventArray]?.attendees ||
|
||||||
|
events[eventArray].attendees === null
|
||||||
|
) {
|
||||||
attendees.value = [];
|
attendees.value = [];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
attendees.value = events[0].attendees ?? [];
|
attendees.value = events[eventArray].attendees ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
dense
|
dense
|
||||||
class="bigger-table-text"
|
class="bigger-table-text"
|
||||||
>
|
>
|
||||||
|
<!--top left of event table-->
|
||||||
<template v-slot:top-left>
|
<template v-slot:top-left>
|
||||||
<q-btn-group push flat style="color: grey">
|
<q-btn-group push flat style="color: grey">
|
||||||
<q-btn
|
<q-btn
|
||||||
@@ -28,7 +29,7 @@
|
|||||||
dense
|
dense
|
||||||
flat
|
flat
|
||||||
icon="person"
|
icon="person"
|
||||||
@click="openAllValueDialog"
|
@click="openAttendanceDialog"
|
||||||
><q-badge floating transparent color="primary" text-color="primary-text">+</q-badge>
|
><q-badge floating transparent color="primary" text-color="primary-text">+</q-badge>
|
||||||
<q-tooltip>{{ $t('addNewAttendees') }}</q-tooltip>
|
<q-tooltip>{{ $t('addNewAttendees') }}</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
{{ $t('selected') }}: {{ selected.length }}
|
{{ $t('selected') }}: {{ selected.length }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<!--top right of event table-->
|
||||||
<template v-slot:top-right>
|
<template v-slot:top-right>
|
||||||
<q-input filled dense debounce="300" v-model="filter" :placeholder="$t('search')">
|
<q-input filled dense debounce="300" v-model="filter" :placeholder="$t('search')">
|
||||||
<template v-slot:append>
|
<template v-slot:append>
|
||||||
@@ -66,6 +68,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
</template>
|
</template>
|
||||||
|
<!--body of event table-->
|
||||||
<template v-slot:body-cell="props">
|
<template v-slot:body-cell="props">
|
||||||
<q-td v-if="props.col.field === 'attendees'" :props="props">
|
<q-td v-if="props.col.field === 'attendees'" :props="props">
|
||||||
<q-btn v-if="props.value !== null && props.value.length > 0" dense flat icon="people"
|
<q-btn v-if="props.value !== null && props.value.length > 0" dense flat icon="people"
|
||||||
@@ -91,11 +94,11 @@
|
|||||||
</q-td>
|
</q-td>
|
||||||
</template>
|
</template>
|
||||||
</q-table>
|
</q-table>
|
||||||
<DialogFrame ref="memberTableDialog" :header-title="$t('members')" :width="700" :height="500">
|
<DialogFrame ref="attendanceDialog" :header-title="$t('members')" :width="700" :height="500">
|
||||||
<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"
|
||||||
/>
|
/>
|
||||||
</DialogFrame>
|
</DialogFrame>
|
||||||
@@ -114,6 +117,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
//imports
|
||||||
import { appApi } from 'src/boot/axios';
|
import { appApi } from 'src/boot/axios';
|
||||||
import { onMounted, type PropType, ref } from 'vue';
|
import { onMounted, type PropType, ref } from 'vue';
|
||||||
import type { Members } from 'src/vueLib/models/member';
|
import type { Members } from 'src/vueLib/models/member';
|
||||||
@@ -126,21 +130,24 @@ import type { Event } from 'src/vueLib/models/event';
|
|||||||
import MembersTable from '../members/MembersTable.vue';
|
import MembersTable from '../members/MembersTable.vue';
|
||||||
import { i18n } from 'src/boot/lang';
|
import { i18n } from 'src/boot/lang';
|
||||||
|
|
||||||
export interface AttendeesDialog {
|
//use constants and function of imports
|
||||||
getSelected: () => Members;
|
const { attendees, pagination, loading, columns, updateAttendees } = useAttendeesTable();
|
||||||
}
|
|
||||||
|
|
||||||
|
//define given properties
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
event: {
|
event: {
|
||||||
type: Object as PropType<Event>,
|
type: Object as PropType<Event>,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
eventArray: { type: Number, default: 0, required: true },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// define emits
|
||||||
const emit = defineEmits(['update']);
|
const emit = defineEmits(['update']);
|
||||||
|
|
||||||
|
// definitions
|
||||||
const { NotifyResponse } = useNotify();
|
const { NotifyResponse } = useNotify();
|
||||||
const memberTableDialog = ref();
|
const attendanceDialog = ref();
|
||||||
const okDialog = ref();
|
const okDialog = ref();
|
||||||
const deleteText = ref('');
|
const deleteText = ref('');
|
||||||
const selectOption = ref(false);
|
const selectOption = ref(false);
|
||||||
@@ -150,16 +157,15 @@ const openSubmenu = ref(false);
|
|||||||
const filter = ref('');
|
const filter = ref('');
|
||||||
const user = useUserStore();
|
const user = useUserStore();
|
||||||
|
|
||||||
const { attendees, pagination, loading, columns, updateAttendees } = useAttendeesTable();
|
// load at page mount
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
localEvent.value = props.event;
|
localEvent.value = props.event;
|
||||||
attendees.value = props.event.attendees ?? [];
|
attendees.value = props.event.attendees ?? [];
|
||||||
});
|
});
|
||||||
|
|
||||||
//opens dialog for one value
|
//opens attendance dialog
|
||||||
function openAllValueDialog() {
|
function openAttendanceDialog() {
|
||||||
memberTableDialog.value?.open();
|
attendanceDialog.value?.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
//opens remove dialog
|
//opens remove dialog
|
||||||
@@ -173,10 +179,11 @@ function openRemoveDialog(...attendees: Members) {
|
|||||||
} else {
|
} else {
|
||||||
deleteText.value = String(attendees.length) + ' ' + i18n.global.t('attendees');
|
deleteText.value = String(attendees.length) + ' ' + i18n.global.t('attendees');
|
||||||
}
|
}
|
||||||
|
|
||||||
okDialog.value?.open(attendees);
|
okDialog.value?.open(attendees);
|
||||||
}
|
}
|
||||||
|
|
||||||
//remove Attendees from database
|
//remove attendees from database
|
||||||
async function removeAttendees(...removeAttendees: Members) {
|
async function removeAttendees(...removeAttendees: Members) {
|
||||||
if (!localEvent.value) {
|
if (!localEvent.value) {
|
||||||
NotifyResponse('event is empty', 'error');
|
NotifyResponse('event is empty', 'error');
|
||||||
@@ -199,27 +206,17 @@ async function removeAttendees(...removeAttendees: Members) {
|
|||||||
.finally(() => {
|
.finally(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
await updateAttendees();
|
await updateAttendees(props.eventArray);
|
||||||
emit('update');
|
emit('update', -removeAttendees.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateTable() {
|
async function updateTable(amount: number) {
|
||||||
await updateAttendees();
|
await updateAttendees(props.eventArray);
|
||||||
emit('update');
|
emit('update', amount);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@keyframes blink-yellow {
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
background-color: yellow;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.bigger-table-text .q-table__middle td {
|
.bigger-table-text .q-table__middle td {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-slot:body-cell="props">
|
<template v-slot:body-cell="props">
|
||||||
<q-td v-if="props.col.field === 'attendees'" :props="props">
|
<q-td v-if="props.col.field === 'attendees'" :props="props">
|
||||||
<q-btn dense flat icon="people" @click="openAttendees(props.row)"
|
<q-btn dense flat icon="people" @click="openAttendees(props.rowIndex, props.row)"
|
||||||
><q-badge color="primary" text-color="primary-text" floating transparent>{{
|
><q-badge color="primary" text-color="primary-text" floating transparent>{{
|
||||||
props.row.count
|
props.row.count
|
||||||
}}</q-badge></q-btn
|
}}</q-badge></q-btn
|
||||||
@@ -218,8 +218,8 @@ function openRemoveDialog(...Events: Events) {
|
|||||||
okDialog.value?.open(Events);
|
okDialog.value?.open(Events);
|
||||||
}
|
}
|
||||||
|
|
||||||
function openAttendees(attendees: Members | null) {
|
function openAttendees(eventArray: number, attendees: Members | null) {
|
||||||
attendeesDialog.value.open(attendees);
|
attendeesDialog.value.open(eventArray, attendees);
|
||||||
}
|
}
|
||||||
|
|
||||||
//remove Event from database
|
//remove Event from database
|
||||||
@@ -244,20 +244,6 @@ function removeEvent(...removeEvents: Events) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@keyframes blink-yellow {
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
background-color: yellow;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.blink-yellow {
|
|
||||||
animation: blink-yellow 1.5s step-start 6 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bigger-table-text .q-table__middle td {
|
.bigger-table-text .q-table__middle td {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user