From 2d34082353f859c8e09adc8a66794bb96f81822f Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 2 Jan 2024 20:07:51 -0800 Subject: feat(badges): update and delete ui --- src/lib/Database/badges.ts | 11 ++++++++ src/routes/api/badges/+server.ts | 40 ++++++++++++++++++++++++++++-- src/routes/user/[user]/badges/+page.svelte | 40 +++++++++++++++++++++++------- 3 files changed, 80 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/lib/Database/badges.ts b/src/lib/Database/badges.ts index d56fa27a..1f3267e9 100644 --- a/src/lib/Database/badges.ts +++ b/src/lib/Database/badges.ts @@ -63,3 +63,14 @@ export const removeUserBadge = (userId: number, id: number) => { $id: id }); }; + +export const updateUserBadge = (userId: number, id: number, badge: Badge) => { + if (badge.post === undefined || badge.image === undefined || badge.description === undefined) + return; + + database + .query( + 'UPDATE user_badges SET post = ?1, image = ?2, description = ?3 WHERE id = ?4 AND user_id = ?5' + ) + .run(badge.post || null, badge.image || null, badge.description || null, id, userId); +}; diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts index d06be6cd..fc5a4d0a 100644 --- a/src/routes/api/badges/+server.ts +++ b/src/routes/api/badges/+server.ts @@ -1,5 +1,5 @@ import { userIdentity } from '$lib/AniList/identity'; -import { removeUserBadge } from '$lib/Database/badges'; +import { removeUserBadge, updateUserBadge } from '$lib/Database/badges'; import { getUserBadges } from '$lib/Database/badges'; import { addUserBadge } from '$lib/Database/badges'; @@ -42,7 +42,43 @@ export const PUT = async ({ cookies, url }) => { refreshToken: user['refresh_token'] }); - addUserBadge(identity.id, { + if ( + getUserBadges(identity.id).find((badge) => badge.id === Number(url.searchParams.get('update'))) + ) { + updateUserBadge(identity.id, Number(url.searchParams.get('update')), { + post: url.searchParams.get('post') || undefined, + image: url.searchParams.get('image') || undefined, + description: url.searchParams.get('description') || undefined, + time: url.searchParams.get('time') || undefined + }); + } else { + addUserBadge(identity.id, { + post: url.searchParams.get('post') || undefined, + image: url.searchParams.get('image') || undefined, + description: url.searchParams.get('description') || undefined, + time: url.searchParams.get('time') || undefined + }); + } + + return Response.json({}); +}; + +export const PATCH = async ({ cookies, url }) => { + const userCookie = cookies.get('user'); + + if (!userCookie) { + return new Response('Unauthenticated', { status: 401 }); + } + + const user = JSON.parse(userCookie); + const identity = await userIdentity({ + tokenType: user['token_type'], + expiresIn: user['expires_in'], + accessToken: user['access_token'], + refreshToken: user['refresh_token'] + }); + + updateUserBadge(identity.id, Number(url.searchParams.get('id')), { post: url.searchParams.get('post') || undefined, image: url.searchParams.get('image') || undefined, description: url.searchParams.get('description') || undefined, diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index 0bea3111..07bb8542 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -19,6 +19,7 @@ let dark = true; let transparent = false; let confirmDelete = 0; + let selectedBadge: Badge | undefined = undefined; onMount(async () => { // socket.on('badges', (message) => (badges = message)); @@ -67,6 +68,8 @@ description.value.length > 0 ? `&description=${encodeURIComponent(description.value)}` : '' }${ time.valueAsDate ? `&time=${encodeURIComponent(dateToDatabaseTime(time.valueAsDate))}` : '' + }${ + selectedBadge && selectedBadge.id ? `&update=${encodeURIComponent(selectedBadge.id)}` : '' }`, { method: 'PUT' @@ -173,7 +176,14 @@

Back to Profile • - (editMode = !editMode)}> + { + if (editMode) selectedBadge = undefined; + + editMode = !editMode; + }} + > {editMode ? 'Disable' : 'Enable'} Edit Mode • @@ -185,11 +195,6 @@ {/if} {#if editMode && isOwner} -

- Edit mode is enabled. Click on an image twice to delete it. There is no confirmation, so - be careful! -

- {#if error}

{error}

{/if} @@ -202,6 +207,7 @@ minlength="1" maxlength="1000" size="11" + value={selectedBadge ? selectedBadge.image : ''} /> - Add Badge + {selectedBadge ? 'Update' : 'Add'} Badge + {#if selectedBadge} + or + { + if (selectedBadge) removeBadge(selectedBadge); + }}>Delete Badge (click twice) + {/if} - + Must be full date and time, defaults to now if any fields empty

@@ -244,7 +266,7 @@ {#if editMode} removeBadge(badge)} + on:click={() => (selectedBadge = badge)} id={`badge-${badge.id}`} title={`${databaseTimeToDate(badge.time).toLocaleString()}${ badge.description ? `\n${badge.description}` : '' -- cgit v1.2.3