diff options
| author | Fuwn <[email protected]> | 2024-04-19 21:22:47 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-04-19 21:22:47 -0700 |
| commit | 48b9ed57f7977f40b68c9a8686d41f29f98c2e9f (patch) | |
| tree | fa9481113a7b8f37f56ba2dc61c75bd7e46d4ff6 /src | |
| parent | feat(badges): admin panel (diff) | |
| download | due.moe-48b9ed57f7977f40b68c9a8686d41f29f98c2e9f.tar.xz due.moe-48b9ed57f7977f40b68c9a8686d41f29f98c2e9f.zip | |
feat(badges): admin shadow hide
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Database/userBadges.ts | 6 | ||||
| -rw-r--r-- | src/routes/api/badges/+server.ts | 10 | ||||
| -rw-r--r-- | src/routes/user/[user]/badges/+page.svelte | 22 |
3 files changed, 33 insertions, 5 deletions
diff --git a/src/lib/Database/userBadges.ts b/src/lib/Database/userBadges.ts index 5d90404d..0b2e2491 100644 --- a/src/lib/Database/userBadges.ts +++ b/src/lib/Database/userBadges.ts @@ -8,9 +8,10 @@ export interface Badge { id?: number; time?: string; category?: string | null; - hidden?: boolean | false; + hidden?: boolean; source?: string | null; designer?: string | null; + shadow_hidden?: boolean; } export const getUserBadges = async (userId: number): Promise<Badge[]> => { @@ -89,3 +90,6 @@ export const migrateCategory = async (userId: number, oldName: string, newName: .update({ category: newName }) .eq('category', oldName) .eq('user_id', userId); + +export const setShadowHidden = async (userId: number, shadowHide: boolean) => + await supabase.from('user_badges').update({ shadow_hidden: shadowHide }).eq('user_id', userId); diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts index a941f145..cbc27520 100644 --- a/src/routes/api/badges/+server.ts +++ b/src/routes/api/badges/+server.ts @@ -6,8 +6,10 @@ import { getUserBadges, addUserBadge, type Badge, - migrateCategory + migrateCategory, + setShadowHidden } from '$lib/Database/userBadges'; +import authorisedJson from '$lib/Data/Static/authorised.json'; const unauthorised = new Response('Unauthorised', { status: 401 }); @@ -57,6 +59,12 @@ export const PUT = async ({ cookies, url, request }) => { refreshToken: user['refresh_token'] }); + if (url.searchParams.get('shadowHide')) + setShadowHidden( + Number(url.searchParams.get('shadowHide')), + authorisedJson.includes(identity.id) + ); + if (url.searchParams.get('import') || undefined) { await Promise.all( (await request.json()).map(async (badge: Badge) => await addUserBadge(identity.id, badge)) diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index 817173bc..e3e44339 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -81,6 +81,13 @@ badges: AWCBadge[]; } + const getBadges = () => (badgesPromise = fetch(root(`/api/badges?id=${badger.id}`))); + + const setShadowHide = () => + fetch(`/api/badges?shadowHide=${badger.id}`, { + method: 'PUT' + }).then(getBadges); + onMount(async () => { // socket.on('badges', (message) => (badges = message)); @@ -525,7 +532,7 @@ {#if authorised} <div class="card"> - <button>Shadow Hide Badges</button> + <button on:click={setShadowHide}>Shadow Hide Badges</button> </div> <p /> @@ -587,6 +594,11 @@ <!-- <!-- <span style="margin: 0 0.625rem;">•</span> --> <!-- <button on:click={() => exportBadges(groupedBadges)}>Export Badges</button> --> + {#if ungroupedBadges.filter((badge) => badge.shadow_hidden).length > 0} + <span style="margin: 0 0.625rem;">•</span> + <button on:click={setShadowHide}>Un-shadow Hide Badges</button> + {/if} + {#if editMode && isOwner} {@const groups = groupedBadges .map((group) => group[0]) @@ -795,7 +807,9 @@ source={cdn(thumbnail(badge.image))} alternative={badge.description} fallback={thumbnail(badge.image)} - style={badge.hidden ? 'filter: grayscale(100%); opacity: 50%;' : ''} + style={badge.hidden || badge.shadow_hidden + ? 'filter: grayscale(100%); opacity: 50%;' + : ''} /> </a> </Tooltip> @@ -807,7 +821,9 @@ alternative={badge.description} fallback={thumbnail(badge.image)} hideOnError={preferences.hide_missing_badges} - style={badge.hidden ? 'filter: grayscale(100%); opacity: 50%;' : ''} + style={badge.hidden || badge.shadow_hidden + ? 'filter: grayscale(100%); opacity: 50%;' + : ''} /> {/if} {/each} |