aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-04-19 21:22:47 -0700
committerFuwn <[email protected]>2024-04-19 21:22:47 -0700
commit48b9ed57f7977f40b68c9a8686d41f29f98c2e9f (patch)
treefa9481113a7b8f37f56ba2dc61c75bd7e46d4ff6 /src
parentfeat(badges): admin panel (diff)
downloaddue.moe-48b9ed57f7977f40b68c9a8686d41f29f98c2e9f.tar.xz
due.moe-48b9ed57f7977f40b68c9a8686d41f29f98c2e9f.zip
feat(badges): admin shadow hide
Diffstat (limited to 'src')
-rw-r--r--src/lib/Database/userBadges.ts6
-rw-r--r--src/routes/api/badges/+server.ts10
-rw-r--r--src/routes/user/[user]/badges/+page.svelte22
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}