From 8cdcb8d9bce4ecb4cf074b0e9956a31e0b413bbd Mon Sep 17 00:00:00 2001 From: chipShot-exe <200449938+chipShot-exe@users.noreply.github.com> Date: Fri, 23 Oct 2026 17:21:43 +0000 Subject: [PATCH 1/7] split pr 52, dont overwrite clubs by default --- src/routes/admin/panel/clubs/+page.svelte | 28 +++++++++++++++++-- .../panel/clubs/AutoImportClubsButton.svelte | 12 ++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index 85203715..b28d06ba 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -22,12 +22,28 @@ } from 'flowbite-svelte-icons'; import ExternalLink from '$components/ExternalLink.svelte'; import EditableClubForm from './EditableClubForm.svelte'; + import type { IClub } from '$api/page_data/clubs/types'; + import type { WithoutID } from '$lib/types/basicTypes'; interface Props { data: PageData; } let { data }: Props = $props(); + function handleImport( + importedClubs: WithoutID[], + currentItems: any[], + updateAll: (items: WithoutID[]) => void + ) { + const existingClubs = currentItems.map((wrapper) => wrapper.item); + const merged = [ + ...existingClubs, + ...importedClubs.filter( + (imp) => !existingClubs.some((ex) => ex.name.toLowerCase() === imp.name.toLowerCase()) + ), + ]; + updateAll(merged); + }
@@ -51,9 +67,17 @@ {#snippet renderItems({ items, openCreateForm, updateAll })}
- + { + if (overwrite) { + updateAll(importedClubs); + } else { + const existing = items.map((i) => i.item); + updateAll([...existing, ...importedClubs]); + } + }} + />
- Name diff --git a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte index 710788d9..72989043 100644 --- a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte +++ b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte @@ -2,7 +2,7 @@ import ValidatedInput from '$components/form/ValidatedInput.svelte'; import ValidatedTextarea from '$components/form/ValidatedTextarea.svelte'; import ExternalLink from '$components/ExternalLink.svelte'; - import { GradientButton, Helper, Modal, Tooltip } from 'flowbite-svelte'; + import { GradientButton, Helper, Modal, Tooltip, Checkbox } from 'flowbite-svelte'; import { InfoCircleOutline } from 'flowbite-svelte-icons'; import { string } from 'yup'; import Papa from 'papaparse'; @@ -15,7 +15,7 @@ https://lhs.cx/old-clubs */ interface Props { - onSubmit: (clubs: WithoutID[]) => void; + onSubmit: (clubs: WithoutID[], overwrite: boolean) => void; } let { onSubmit: submit }: Props = $props(); @@ -23,7 +23,7 @@ https://lhs.cx/old-clubs const notificationContext = getNotificationContext(); let modalOpen = $state(false); - + let overwriteCheckbox = $state(false); let startInput: ValidatedInput | undefined = $state(); let endInput: ValidatedInput | undefined = $state(); let csvInput: ValidatedTextarea | undefined = $state(); @@ -84,7 +84,7 @@ https://lhs.cx/old-clubs }, complete() { notificationContext.show('Imported ' + records.length + ' clubs', 'success'); - submit(records); + submit(records, overwriteCheckbox); modalOpen = false; }, }); @@ -143,6 +143,9 @@ https://lhs.cx/old-clubs /> + + Overwrite existing clubs +
- Note: This will overwrite everything already in the table. Import From 37f91528a58e0d21c523cd4348b42ebda629e3c3 Mon Sep 17 00:00:00 2001 From: Liam Martin Date: Sat, 7 Nov 2026 17:42:34 -0800 Subject: [PATCH 2/7] reimplement club import fix from partial commits, sort admin list alphabetically to better reflect public page --- src/routes/admin/panel/clubs/+page.svelte | 37 +++++++++++-------- src/routes/admin/panel/clubs/+page.ts | 2 +- .../panel/clubs/AutoImportClubsButton.svelte | 4 -- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index b28d06ba..43c21d52 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -24,26 +24,13 @@ import EditableClubForm from './EditableClubForm.svelte'; import type { IClub } from '$api/page_data/clubs/types'; import type { WithoutID } from '$lib/types/basicTypes'; - + import { getNotificationContext } from '$components/NotificationProvider.svelte'; + const notificationContext = getNotificationContext(); interface Props { data: PageData; } let { data }: Props = $props(); - function handleImport( - importedClubs: WithoutID[], - currentItems: any[], - updateAll: (items: WithoutID[]) => void - ) { - const existingClubs = currentItems.map((wrapper) => wrapper.item); - const merged = [ - ...existingClubs, - ...importedClubs.filter( - (imp) => !existingClubs.some((ex) => ex.name.toLowerCase() === imp.name.toLowerCase()) - ), - ]; - updateAll(merged); - }
@@ -69,11 +56,29 @@ { + console.log('importedclubs ', importedClubs); if (overwrite) { updateAll(importedClubs); + notificationContext.show( + 'Imported ' + importedClubs.length + ' clubs (Overwrote existing)', + 'success' + ); } else { const existing = items.map((i) => i.item); - updateAll([...existing, ...importedClubs]); + const newClubs = []; + for (let checkedItem = 0; checkedItem < importedClubs.length; checkedItem++) { + if ( + !importedClubs.some( + (imp) => imp.name.toLowerCase() === existing[checkedItem]?.name.toLowerCase() + ) + ) { + newClubs.push(importedClubs[checkedItem]); + } + } + console.log('newclubs ', newClubs); + updateAll([...existing, ...newClubs]); + + notificationContext.show('Added ' + newClubs.length + ' clubs', 'success'); } }} /> diff --git a/src/routes/admin/panel/clubs/+page.ts b/src/routes/admin/panel/clubs/+page.ts index db0b659a..01d0ffa2 100644 --- a/src/routes/admin/panel/clubs/+page.ts +++ b/src/routes/admin/panel/clubs/+page.ts @@ -6,6 +6,6 @@ export const load = (async (event) => { const clubs = (await ( await event.fetch('/api/v2/page_data/clubs/edit') ).json()) as GetAllResults; - + clubs.results.sort((a, b) => a.name.localeCompare(b.name)); return clubs; }) satisfies PageLoad; diff --git a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte index 72989043..28cd42c2 100644 --- a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte +++ b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte @@ -6,7 +6,6 @@ import { InfoCircleOutline } from 'flowbite-svelte-icons'; import { string } from 'yup'; import Papa from 'papaparse'; - import { getNotificationContext } from '$components/NotificationProvider.svelte'; import type { IClub } from '$api/page_data/clubs/types'; import type { WithoutID } from '$lib/types/basicTypes'; /* SAMPLE DATA: @@ -20,8 +19,6 @@ https://lhs.cx/old-clubs let { onSubmit: submit }: Props = $props(); - const notificationContext = getNotificationContext(); - let modalOpen = $state(false); let overwriteCheckbox = $state(false); let startInput: ValidatedInput | undefined = $state(); @@ -83,7 +80,6 @@ https://lhs.cx/old-clubs }); }, complete() { - notificationContext.show('Imported ' + records.length + ' clubs', 'success'); submit(records, overwriteCheckbox); modalOpen = false; }, From 6a2ad10c7e133cc242d606ea2ee73a5aa3578f4f Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:24:15 -0800 Subject: [PATCH 3/7] import the correct clubs --- src/routes/admin/panel/clubs/+page.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index 43c21d52..b1d4f54a 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -68,8 +68,8 @@ const newClubs = []; for (let checkedItem = 0; checkedItem < importedClubs.length; checkedItem++) { if ( - !importedClubs.some( - (imp) => imp.name.toLowerCase() === existing[checkedItem]?.name.toLowerCase() + !existing.some( + (ext) => ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() ) ) { newClubs.push(importedClubs[checkedItem]); From efc79fd47b90bca99e7aa98d23c60d765052a334 Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:25:30 -0800 Subject: [PATCH 4/7] Sort the clubs in the same way for the public page as the admin panel --- src/routes/api/v2/page_data/clubs/+server.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/api/v2/page_data/clubs/+server.ts b/src/routes/api/v2/page_data/clubs/+server.ts index 27f3b693..4520980d 100644 --- a/src/routes/api/v2/page_data/clubs/+server.ts +++ b/src/routes/api/v2/page_data/clubs/+server.ts @@ -3,7 +3,8 @@ import type { RequestHandler } from './$types'; import { Club } from './model'; export const GET: RequestHandler = async ({}) => { - const docs = await Club.find().sort({ name: 'asc' }).exec(); + const docs = await Club.find().exec(); + docs.sort((a, b) => a.name.localeCompare(b.name)); return json({ clubs: docs.map((doc) => doc.toObject()), From 7734909866ba919269d20330b0fcaa0e9c131f8c Mon Sep 17 00:00:00 2001 From: Liam Martin Date: Sun, 8 Nov 2026 16:30:04 -0800 Subject: [PATCH 5/7] rename club overwrite variable, format --- src/routes/admin/panel/clubs/+page.svelte | 3 ++- src/routes/admin/panel/clubs/AutoImportClubsButton.svelte | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index b1d4f54a..dd6b3f1d 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -69,7 +69,8 @@ for (let checkedItem = 0; checkedItem < importedClubs.length; checkedItem++) { if ( !existing.some( - (ext) => ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() + (ext) => + ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() ) ) { newClubs.push(importedClubs[checkedItem]); diff --git a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte index 28cd42c2..58fc0b08 100644 --- a/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte +++ b/src/routes/admin/panel/clubs/AutoImportClubsButton.svelte @@ -20,7 +20,7 @@ https://lhs.cx/old-clubs let { onSubmit: submit }: Props = $props(); let modalOpen = $state(false); - let overwriteCheckbox = $state(false); + let overwriteClubs = $state(false); let startInput: ValidatedInput | undefined = $state(); let endInput: ValidatedInput | undefined = $state(); let csvInput: ValidatedTextarea | undefined = $state(); @@ -80,7 +80,7 @@ https://lhs.cx/old-clubs }); }, complete() { - submit(records, overwriteCheckbox); + submit(records, overwriteClubs); modalOpen = false; }, }); @@ -139,7 +139,7 @@ https://lhs.cx/old-clubs />
- + Overwrite existing clubs
From 9921a7d2d3b5736e97123b327d7d5536a2b4df41 Mon Sep 17 00:00:00 2001 From: chipShot-exe <200449938+chipShot-exe@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:35:40 -0800 Subject: [PATCH 6/7] remove console.logs --- src/routes/admin/panel/clubs/+page.svelte | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index dd6b3f1d..01f93b6f 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -56,7 +56,6 @@ { - console.log('importedclubs ', importedClubs); if (overwrite) { updateAll(importedClubs); notificationContext.show( @@ -69,14 +68,12 @@ for (let checkedItem = 0; checkedItem < importedClubs.length; checkedItem++) { if ( !existing.some( - (ext) => - ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() + (ext) => ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() ) ) { newClubs.push(importedClubs[checkedItem]); } } - console.log('newclubs ', newClubs); updateAll([...existing, ...newClubs]); notificationContext.show('Added ' + newClubs.length + ' clubs', 'success'); From c2d2fc026e3da0b47168bda3e2fbc0d26845ed27 Mon Sep 17 00:00:00 2001 From: chipShot-exe <200449938+chipShot-exe@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:36:43 -0800 Subject: [PATCH 7/7] format AGAIN --- src/routes/admin/panel/clubs/+page.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/admin/panel/clubs/+page.svelte b/src/routes/admin/panel/clubs/+page.svelte index 01f93b6f..f8964bed 100644 --- a/src/routes/admin/panel/clubs/+page.svelte +++ b/src/routes/admin/panel/clubs/+page.svelte @@ -68,7 +68,8 @@ for (let checkedItem = 0; checkedItem < importedClubs.length; checkedItem++) { if ( !existing.some( - (ext) => ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() + (ext) => + ext.name.toLowerCase() === importedClubs[checkedItem]?.name.toLowerCase() ) ) { newClubs.push(importedClubs[checkedItem]);