diff --git a/src/lib/index.ts b/src/lib/index.ts index d8d8d52..93b15dc 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -85,9 +85,17 @@ export function haversineDistance( return radius * 2 * Math.asin(Math.sqrt(e1)); } -export function collectTimings(study_space_hours: Table<"study_space_hours">[]) { +export function collectTimings( + study_space_hours: Omit< + Table<"study_space_hours">, + "id" | "created_at" | "updated_at" | "study_space_id" + >[] +) { // Collect all timing entries - const timingsPerDay: Record[]> = { + const timingsPerDay: Record< + number, + Omit, "id" | "created_at" | "updated_at" | "study_space_id">[] + > = { 0: [], 1: [], 2: [], diff --git a/src/routes/space/[id]/+page.svelte b/src/routes/space/[id]/+page.svelte index 0bf4b78..798979b 100644 --- a/src/routes/space/[id]/+page.svelte +++ b/src/routes/space/[id]/+page.svelte @@ -87,6 +87,12 @@ isFavourite = true; } } + + async function deleteSpace() { + if (!confirm("Are you sure you want to delete this study space?")) return; + await supabase.from("study_spaces").delete().eq("id", space.id); + window.location.href = "/"; + } @@ -192,7 +198,10 @@
{#if adminMode} - +
+ + +
{:else} {/if} @@ -355,4 +364,9 @@ width: 3.75rem; height: 3.75rem; } + .buttonContainer { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 0.5rem; + } diff --git a/src/routes/space/[id]/edit/+page.svelte b/src/routes/space/[id]/edit/+page.svelte index a7832a7..f6008d8 100644 --- a/src/routes/space/[id]/edit/+page.svelte +++ b/src/routes/space/[id]/edit/+page.svelte @@ -14,7 +14,8 @@ volumeTags, gmapsLoader, daysOfWeek, - timeToMins + timeToMins, + collectTimings } from "$lib"; import { onMount } from "svelte"; import type { Json } from "$lib/database.js"; @@ -61,6 +62,19 @@ function checkTimings() { let cannotExist = [] as number[]; + let hasAllDays = Object.values(collectTimings(studySpaceData.opening_times)).every( + (item) => !(Array.isArray(item) && item.length === 0) + ); + + if ( + (allDays.closes_at === "" || allDays.opens_at === "") && + allDays.open_today_status === null && + !hasAllDays + ) { + alert(`No opening time provided for all other days.`); + return false; + } + const opensAtMinsAll = timeToMins(allDays.opens_at); const closesAtMinsAll = timeToMins(allDays.closes_at); if (opensAtMinsAll >= closesAtMinsAll) { @@ -200,6 +214,7 @@ // Nothing is provided if ( (allDays.closes_at != "" && allDays.opens_at != "") || + studySpaceData.opening_times.length === 7 || allDays.open_today_status != null ) { const { error: hoursErr } = await supabase