Add Delete Reservation function

This commit is contained in:
2024-05-26 07:13:20 -04:00
parent 59d2729719
commit 6654132120
4 changed files with 223 additions and 169 deletions

View File

@@ -7,11 +7,13 @@ import { date } from 'quasar';
import { Timestamp, parseDate, today } from '@quasar/quasar-ui-qcalendar';
import { LoadingTypes } from 'src/utils/misc';
import { useAuthStore } from './auth';
import { isPast } from 'src/utils/schedule';
export const useReservationStore = defineStore('reservation', () => {
const reservations = ref<Map<string, Reservation>>(new Map());
const datesLoaded = ref<Record<string, LoadingTypes>>({});
const userReservations = ref<Reservation[]>();
const userReservations = ref<Map<string, Reservation>>(new Map());
// TODO: Come up with a better way of storing reservations by date & reservations for user
const authStore = useAuthStore();
// Fetch reservations for a specific date range
@@ -73,13 +75,15 @@ export const useReservationStore = defineStore('reservation', () => {
return false;
}
console.log(id);
try {
await databases.deleteDocument(
AppwriteIds.databaseId,
AppwriteIds.collection.interval,
AppwriteIds.collection.reservation,
id
);
reservations.value.delete(id);
userReservations.value.delete(id);
console.info(`Deleted reservation: ${id}`);
} catch (e) {
console.error('Error deleting reservation: ' + e);
@@ -165,10 +169,6 @@ export const useReservationStore = defineStore('reservation', () => {
);
};
const getUserReservations = () => {
return userReservations;
};
const fetchUserReservations = async () => {
if (!authStore.currentUser) return;
try {
@@ -177,12 +177,30 @@ export const useReservationStore = defineStore('reservation', () => {
AppwriteIds.collection.reservation,
[Query.equal('user', authStore.currentUser.$id)]
);
userReservations.value = response.documents as Reservation[];
response.documents.forEach((d) =>
userReservations.value.set(d.$id, d as Reservation)
);
} catch (error) {
console.error('Failed to fetch reservations for user: ', error);
}
};
const sortedUserReservations = computed(() =>
[...userReservations.value?.values()].sort(
(a, b) => new Date(b.start).getTime() - new Date(a.start).getTime()
)
);
const futureUserReservations = computed((): Reservation[] => {
if (!sortedUserReservations.value) return [];
return sortedUserReservations.value.filter((b) => !isPast(b.end));
});
const pastUserReservations = computed((): Reservation[] => {
if (!sortedUserReservations.value) return [];
return sortedUserReservations.value?.filter((b) => isPast(b.end));
});
return {
getReservationsByDate,
createReservation,
@@ -192,6 +210,9 @@ export const useReservationStore = defineStore('reservation', () => {
isResourceTimeOverlapped,
getConflictingReservations,
fetchUserReservations,
getUserReservations,
sortedUserReservations,
futureUserReservations,
pastUserReservations,
userReservations,
};
});