feat: delete #62

Merged
al4423 merged 2 commits from refactor/favs into master 2025-06-16 22:30:48 +00:00
3 changed files with 41 additions and 4 deletions

View File

@@ -85,9 +85,17 @@ export function haversineDistance(
return radius * 2 * Math.asin(Math.sqrt(e1)); 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 // Collect all timing entries
const timingsPerDay: Record<number, Table<"study_space_hours">[]> = { const timingsPerDay: Record<
number,
Omit<Table<"study_space_hours">, "id" | "created_at" | "updated_at" | "study_space_id">[]
> = {
0: [], 0: [],
1: [], 1: [],
2: [], 2: [],

View File

@@ -87,6 +87,12 @@
isFavourite = true; 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 = "/";
}
</script> </script>
<Navbar> <Navbar>
@@ -192,7 +198,10 @@
<div class="actions"> <div class="actions">
{#if adminMode} {#if adminMode}
<Button href="/space/{space.id}/edit" type="link">Edit</Button> <div class="buttonContainer">
<Button href="/space/{space.id}/edit" type="link">Edit</Button>
<Button type="button" style="red" onclick={deleteSpace}>Delete</Button>
</div>
{:else} {:else}
<Button onclick={() => (isReportVisible = true)} style="red">Report</Button> <Button onclick={() => (isReportVisible = true)} style="red">Report</Button>
{/if} {/if}
@@ -355,4 +364,9 @@
width: 3.75rem; width: 3.75rem;
height: 3.75rem; height: 3.75rem;
} }
.buttonContainer {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0.5rem;
}
</style> </style>

View File

@@ -14,7 +14,8 @@
volumeTags, volumeTags,
gmapsLoader, gmapsLoader,
daysOfWeek, daysOfWeek,
timeToMins timeToMins,
collectTimings
} from "$lib"; } from "$lib";
import { onMount } from "svelte"; import { onMount } from "svelte";
import type { Json } from "$lib/database.js"; import type { Json } from "$lib/database.js";
@@ -61,6 +62,19 @@
function checkTimings() { function checkTimings() {
let cannotExist = [] as number[]; 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 opensAtMinsAll = timeToMins(allDays.opens_at);
const closesAtMinsAll = timeToMins(allDays.closes_at); const closesAtMinsAll = timeToMins(allDays.closes_at);
if (opensAtMinsAll >= closesAtMinsAll) { if (opensAtMinsAll >= closesAtMinsAll) {
@@ -200,6 +214,7 @@
// Nothing is provided // Nothing is provided
if ( if (
(allDays.closes_at != "" && allDays.opens_at != "") || (allDays.closes_at != "" && allDays.opens_at != "") ||
studySpaceData.opening_times.length === 7 ||
allDays.open_today_status != null allDays.open_today_status != null
) { ) {
const { error: hoursErr } = await supabase const { error: hoursErr } = await supabase