From 0a9360ba4eb39b63b353a178e3bb470aa2584c75 Mon Sep 17 00:00:00 2001
From: BoarderGamez
Date: Tue, 6 Jan 2026 01:42:06 +0000
Subject: [PATCH 1/6] Added markation of type plus filtering
---
src/lib/utils.ts | 7 ++++
.../dashboard/admin/review/+page.server.ts | 23 +++++++++----
.../dashboard/admin/review/+page.svelte | 32 +++++++++++++++++--
.../dashboard/admin/review/[id]/+page.svelte | 3 +-
4 files changed, 55 insertions(+), 10 deletions(-)
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index d3d0eef..fc08c9d 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -78,3 +78,10 @@ export function calculateMarketPrice(
return Math.round(-m * shopScoreRemainder + maxPrice);
}
}
+
+export function getProjectLinkType(editorFileType: string | null, editorUrl: string | null, uploadedFileUrl: string | null): string {
+ if (editorFileType === 'url' && editorUrl?.includes('cad.onshape.com')) return 'onshape';
+ if (editorFileType === 'url' && editorUrl?.includes('autodesk360.com')) return 'fusion-link';
+ if (editorFileType === 'upload' && uploadedFileUrl?.endsWith('.f3d')) return 'fusion-file';
+ return 'unknown';
+}
diff --git a/src/routes/dashboard/admin/review/+page.server.ts b/src/routes/dashboard/admin/review/+page.server.ts
index 1abf3bf..0a38355 100644
--- a/src/routes/dashboard/admin/review/+page.server.ts
+++ b/src/routes/dashboard/admin/review/+page.server.ts
@@ -12,7 +12,7 @@ export async function load({ locals }) {
throw error(403, { message: 'oi get out' });
}
- const projects = await getProjects(['submitted'], [], []);
+ const projects = await getProjects(['submitted'], [], [], []);
const allProjects = await db
.select({
@@ -61,14 +61,18 @@ export const actions = {
return parseInt(userId.toString());
});
- const projects = await getProjects(statusFilter, projectFilter, userFilter);
+ const typeFilter = data.getAll('type') as string[];
+
+
+ const projects = await getProjects(statusFilter, projectFilter, userFilter, typeFilter);
return {
projects,
fields: {
status: statusFilter,
project: projectFilter,
- user: userFilter
+ user: userFilter,
+ type: typeFilter
}
};
}
@@ -77,7 +81,8 @@ export const actions = {
async function getProjects(
statusFilter: (typeof project.status._.data)[],
projectFilter: number[],
- userFilter: number[]
+ userFilter: number[],
+ typeFilter: string[]
) {
return await db
.select({
@@ -86,8 +91,11 @@ async function getProjects(
name: project.name,
description: project.description,
url: project.url,
- createdAt: project.createdAt,
- status: project.status
+ editorFileType: project.editorFileType,
+ editorUrl: project.editorUrl,
+ uploadedFileUrl: project.uploadedFileUrl,
+ status: project.status,
+ createdAt: project.createdAt
},
user: {
id: user.id,
@@ -112,6 +120,9 @@ async function getProjects(
project.name,
project.description,
project.url,
+ project.editorFileType,
+ project.editorUrl,
+ project.uploadedFileUrl,
project.createdAt,
project.status,
user.id,
diff --git a/src/routes/dashboard/admin/review/+page.svelte b/src/routes/dashboard/admin/review/+page.svelte
index 2f5c3e8..5847fc3 100644
--- a/src/routes/dashboard/admin/review/+page.svelte
+++ b/src/routes/dashboard/admin/review/+page.svelte
@@ -1,7 +1,7 @@
@@ -42,7 +49,7 @@
};
}}
>
-
+
Status
@@ -103,6 +110,22 @@
+
+
+
+ Type
+
+ Onshape
+ Fusion Link
+ Fusion File
+ Unknown
+
+
Apply!
{:else}
- {#each projects as project}
+ {#each displayedProjects as project}
@@ -176,6 +199,9 @@
{:else}
{/if}
+
+ Type: {getProjectLinkType(project.project.editorFileType, project.project.editorUrl, project.project.uploadedFileUrl)}
+
{project.devlogCount} journal{project.devlogCount !== 1 ? 's' : ''} ∙ {Math.floor(
project.timeSpent / 60
diff --git a/src/routes/dashboard/admin/review/[id]/+page.svelte b/src/routes/dashboard/admin/review/[id]/+page.svelte
index e7206f5..ac51e4d 100644
--- a/src/routes/dashboard/admin/review/[id]/+page.svelte
+++ b/src/routes/dashboard/admin/review/[id]/+page.svelte
@@ -3,7 +3,7 @@
import Devlog from '$lib/components/Devlog.svelte';
import Head from '$lib/components/Head.svelte';
import { enhance } from '$app/forms';
- import { projectStatuses } from '$lib/utils.js';
+ import { projectStatuses, getProjectLinkType} from '$lib/utils.js';
import ProjectLinks from '$lib/components/ProjectLinks.svelte';
import Spinny3DPreview from '$lib/components/Spinny3DPreview.svelte';
import { Download } from '@lucide/svelte';
@@ -49,6 +49,7 @@
uploadedFileUrl={data.project.project.uploadedFileUrl}
/>
+
Type: {getProjectLinkType(data.project.project.editorFileType, data.project.project.editorUrl, data.project.project.uploadedFileUrl)}
From e053f2476324a3525c767a91a7a1d2dcf6c624c9 Mon Sep 17 00:00:00 2001
From: Arca Ege Cengiz
Date: Sat, 10 Jan 2026 18:26:00 +0000
Subject: [PATCH 2/6] Update filter to be server-side
---
src/lib/utils.ts | 6 +-
.../dashboard/admin/review/+page.server.ts | 100 ++++++++++--------
.../dashboard/admin/review/+page.svelte | 21 ++--
3 files changed, 70 insertions(+), 57 deletions(-)
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index fc08c9d..046ed1e 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -79,7 +79,11 @@ export function calculateMarketPrice(
}
}
-export function getProjectLinkType(editorFileType: string | null, editorUrl: string | null, uploadedFileUrl: string | null): string {
+export function getProjectLinkType(
+ editorFileType: string | null,
+ editorUrl: string | null,
+ uploadedFileUrl: string | null
+): string {
if (editorFileType === 'url' && editorUrl?.includes('cad.onshape.com')) return 'onshape';
if (editorFileType === 'url' && editorUrl?.includes('autodesk360.com')) return 'fusion-link';
if (editorFileType === 'upload' && uploadedFileUrl?.endsWith('.f3d')) return 'fusion-file';
diff --git a/src/routes/dashboard/admin/review/+page.server.ts b/src/routes/dashboard/admin/review/+page.server.ts
index 0a38355..ca29d22 100644
--- a/src/routes/dashboard/admin/review/+page.server.ts
+++ b/src/routes/dashboard/admin/review/+page.server.ts
@@ -3,6 +3,7 @@ import { project, user, devlog } from '$lib/server/db/schema.js';
import { error } from '@sveltejs/kit';
import { eq, and, sql, ne, inArray } from 'drizzle-orm';
import type { Actions } from './$types';
+import { getProjectLinkType } from '$lib/utils';
export async function load({ locals }) {
if (!locals.user) {
@@ -63,7 +64,6 @@ export const actions = {
const typeFilter = data.getAll('type') as string[];
-
const projects = await getProjects(statusFilter, projectFilter, userFilter, typeFilter);
return {
@@ -84,48 +84,60 @@ async function getProjects(
userFilter: number[],
typeFilter: string[]
) {
- return await db
- .select({
- project: {
- id: project.id,
- name: project.name,
- description: project.description,
- url: project.url,
- editorFileType: project.editorFileType,
- editorUrl: project.editorUrl,
- uploadedFileUrl: project.uploadedFileUrl,
- status: project.status,
- createdAt: project.createdAt
- },
- user: {
- id: user.id,
- name: user.name
- },
- timeSpent: sql`COALESCE(SUM(${devlog.timeSpent}), 0)`,
- devlogCount: sql`COALESCE(COUNT(${devlog.id}), 0)`
- })
- .from(project)
- .leftJoin(devlog, and(eq(project.id, devlog.projectId), eq(devlog.deleted, false)))
- .leftJoin(user, eq(user.id, project.userId))
- .where(
- and(
- eq(project.deleted, false),
- statusFilter.length > 0 ? inArray(project.status, statusFilter) : undefined,
- projectFilter.length > 0 ? inArray(project.id, projectFilter) : undefined,
- userFilter.length > 0 ? inArray(project.userId, userFilter) : undefined
+ return (
+ await db
+ .select({
+ project: {
+ id: project.id,
+ name: project.name,
+ description: project.description,
+ url: project.url,
+ editorFileType: project.editorFileType,
+ editorUrl: project.editorUrl,
+ uploadedFileUrl: project.uploadedFileUrl,
+ status: project.status,
+ createdAt: project.createdAt
+ },
+ user: {
+ id: user.id,
+ name: user.name
+ },
+ timeSpent: sql`COALESCE(SUM(${devlog.timeSpent}), 0)`,
+ devlogCount: sql`COALESCE(COUNT(${devlog.id}), 0)`
+ })
+ .from(project)
+ .leftJoin(devlog, and(eq(project.id, devlog.projectId), eq(devlog.deleted, false)))
+ .leftJoin(user, eq(user.id, project.userId))
+ .where(
+ and(
+ eq(project.deleted, false),
+ statusFilter.length > 0 ? inArray(project.status, statusFilter) : undefined,
+ projectFilter.length > 0 ? inArray(project.id, projectFilter) : undefined,
+ userFilter.length > 0 ? inArray(project.userId, userFilter) : undefined
+ )
+ )
+ .groupBy(
+ project.id,
+ project.name,
+ project.description,
+ project.url,
+ project.editorFileType,
+ project.editorUrl,
+ project.uploadedFileUrl,
+ project.createdAt,
+ project.status,
+ user.id,
+ user.name
)
- )
- .groupBy(
- project.id,
- project.name,
- project.description,
- project.url,
- project.editorFileType,
- project.editorUrl,
- project.uploadedFileUrl,
- project.createdAt,
- project.status,
- user.id,
- user.name
- );
+ ).filter((item) =>
+ typeFilter.length > 0
+ ? typeFilter.includes(
+ getProjectLinkType(
+ item.project.editorFileType,
+ item.project.editorUrl,
+ item.project.uploadedFileUrl
+ )
+ )
+ : true
+ );
}
diff --git a/src/routes/dashboard/admin/review/+page.svelte b/src/routes/dashboard/admin/review/+page.svelte
index 5847fc3..757ccb5 100644
--- a/src/routes/dashboard/admin/review/+page.svelte
+++ b/src/routes/dashboard/admin/review/+page.svelte
@@ -9,7 +9,6 @@
let projectSearch = $state('');
let userSearch = $state('');
- let typeFilter = $state([]);
let projects = $derived(form?.projects ?? data.projects);
@@ -21,12 +20,6 @@
let filteredUsers = $derived(
data.users.filter((user) => user.name.toLowerCase().includes(userSearch.toLowerCase()))
);
- let displayedProjects = $derived(
- projects.filter(p =>
- typeFilter.length === 0 ||
- typeFilter.includes(getProjectLinkType(p.project.editorFileType, p.project.editorUrl, p.project.uploadedFileUrl))
- )
-);
let formPending = $state(false);
@@ -110,20 +103,20 @@
+
-
Type
Onshape
Fusion Link
Fusion File
- Unknown
+ Other
@@ -170,7 +163,7 @@
{:else}
- {#each displayedProjects as project}
+ {#each projects as project}
@@ -200,7 +193,11 @@
{/if}
- Type: {getProjectLinkType(project.project.editorFileType, project.project.editorUrl, project.project.uploadedFileUrl)}
+ Type: {getProjectLinkType(
+ project.project.editorFileType,
+ project.project.editorUrl,
+ project.project.uploadedFileUrl
+ )}
{project.devlogCount} journal{project.devlogCount !== 1 ? 's' : ''} ∙ {Math.floor(
From 05ff7ca4a74932b3682137c000f8369be81af676 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 10 Jan 2026 18:56:36 +0000
Subject: [PATCH 3/6] Initial plan
From 69895b26fde80c16e65438c30eb10723211a8848 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 10 Jan 2026 19:01:11 +0000
Subject: [PATCH 4/6] Add trust level dropdown to user admin page
Co-authored-by: ArcaEge <40526225+ArcaEge@users.noreply.github.com>
---
package-lock.json | 28 +-----------
.../admin/admin/users/[id]/+page.server.ts | 44 +++++++++++++++++++
.../admin/admin/users/[id]/+page.svelte | 32 ++++++++++++++
3 files changed, 77 insertions(+), 27 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index f6c020c..626ab37 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -984,7 +984,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5",
@@ -3028,7 +3027,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
"integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -3050,7 +3048,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz",
"integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
@@ -3063,7 +3060,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz",
"integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
@@ -3079,7 +3075,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz",
"integrity": "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/api-logs": "0.208.0",
"import-in-the-middle": "^2.0.0",
@@ -3467,7 +3462,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz",
"integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "2.2.0",
"@opentelemetry/semantic-conventions": "^1.29.0"
@@ -3484,7 +3478,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz",
"integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "2.2.0",
"@opentelemetry/resources": "2.2.0",
@@ -3502,7 +3495,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz",
"integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=14"
}
@@ -5309,7 +5301,6 @@
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.47.0.tgz",
"integrity": "sha512-mznN01MBXtr4T7X/E3ENkhF6GzqxTxL6/whG3OzCzUu8G8KYRNiCdoxLMVWAHJx/mDMPP3XAeKCMZHF/Xd/CDw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@standard-schema/spec": "^1.0.0",
"@sveltejs/acorn-typescript": "^1.0.5",
@@ -5348,7 +5339,6 @@
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz",
"integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
"debug": "^4.4.1",
@@ -5855,7 +5845,6 @@
"integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.46.1",
"@typescript-eslint/types": "8.46.1",
@@ -6111,7 +6100,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6388,7 +6376,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
@@ -7002,7 +6989,6 @@
"integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==",
"hasInstallScript": true,
"license": "MIT",
- "peer": true,
"bin": {
"esbuild": "bin/esbuild"
},
@@ -7099,7 +7085,6 @@
"integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -9399,7 +9384,6 @@
"resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
"integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"pg-connection-string": "^2.9.1",
"pg-pool": "^3.10.1",
@@ -9521,7 +9505,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -9694,7 +9677,6 @@
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -9711,7 +9693,6 @@
"integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"prettier": "^3.0.0",
"svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
@@ -10017,7 +9998,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
"integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -10595,7 +10575,6 @@
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.40.1.tgz",
"integrity": "sha512-0R3t2oiLxJNJb2buz61MNfPdkjeyj2qTCM7TtIv/4ZfF12zD7Ig8iIo+C8febroy+9S4QJ7qfijtearSdO/1ww==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/remapping": "^2.3.4",
"@jridgewell/sourcemap-codec": "^1.5.0",
@@ -10688,8 +10667,7 @@
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz",
"integrity": "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/tapable": {
"version": "2.3.0",
@@ -10854,7 +10832,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -10913,7 +10890,6 @@
"resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.21.tgz",
"integrity": "sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==",
"license": "MIT",
- "peer": true,
"dependencies": {
"defu": "^6.1.4",
"exsolve": "^1.0.7",
@@ -11064,7 +11040,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.10.tgz",
"integrity": "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -11640,7 +11615,6 @@
"integrity": "sha512-HwaJmXO3M1r4S8x2ea2vy8Rw/y/38HRQuK/gNDRQ7w9cJXn6xSl1sIIqKCffULSUjul3wV3I3Nd/GfbmsRReEA==",
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"workerd": "bin/workerd"
},
diff --git a/src/routes/dashboard/admin/admin/users/[id]/+page.server.ts b/src/routes/dashboard/admin/admin/users/[id]/+page.server.ts
index a83e6f3..a2f6901 100644
--- a/src/routes/dashboard/admin/admin/users/[id]/+page.server.ts
+++ b/src/routes/dashboard/admin/admin/users/[id]/+page.server.ts
@@ -214,6 +214,50 @@ export const actions = {
};
},
+ changeTrust: async ({ locals, request, params }) => {
+ if (!locals.user) {
+ throw error(500);
+ }
+ if (!locals.user.hasAdmin) {
+ throw error(403, { message: 'oi get out' });
+ }
+
+ const id: number = parseInt(params.id);
+
+ const data = await request.formData();
+ const trust = data.get('trust');
+
+ if (!trust || !['green', 'blue', 'yellow', 'red'].includes(trust.toString())) {
+ return fail(400, {
+ changeTrust: {
+ invalidTrust: true
+ }
+ });
+ }
+
+ // Log out user if trust is set to red
+ if (trust === 'red') {
+ await db.delete(session).where(eq(session.userId, id));
+ }
+
+ await db
+ .update(user)
+ .set({
+ trust: trust.toString() as 'green' | 'blue' | 'yellow' | 'red'
+ })
+ .where(eq(user.id, id));
+
+ const [queriedUser] = await db.select().from(user).where(eq(user.id, id));
+
+ if (!queriedUser) {
+ throw error(404, { message: 'user not found' });
+ }
+
+ return {
+ queriedUser
+ };
+ },
+
impersonate: async (event) => {
const { locals, params } = event;
diff --git a/src/routes/dashboard/admin/admin/users/[id]/+page.svelte b/src/routes/dashboard/admin/admin/users/[id]/+page.svelte
index bc69958..3e49332 100644
--- a/src/routes/dashboard/admin/admin/users/[id]/+page.svelte
+++ b/src/routes/dashboard/admin/admin/users/[id]/+page.svelte
@@ -14,6 +14,7 @@
let impersonatePending = $state(false);
let logoutPending = $state(false);
let fetchPIIPending = $state(false);
+ let changeTrustPending = $state(false);
@@ -239,6 +240,37 @@
+ Trust Level
+
+
yummy stuff
{#if form?.fetchPII?.success}
From 3f85c0ac9f9950905848587c32a10fbb1de82032 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 10 Jan 2026 19:03:19 +0000
Subject: [PATCH 5/6] Implementation complete - trust level dropdown working
Co-authored-by: ArcaEge <40526225+ArcaEge@users.noreply.github.com>
---
.devcontainer/devcontainer.json | 6 +-
.github/dependabot.yml | 8 +-
.prettierrc | 5 +-
docker-compose-staging.yaml | 2 +-
docker-compose.yaml | 2 +-
eslint.config.js | 14 +-
src/app.css | 10 +-
src/lib/components/Button.svelte | 2 +-
src/lib/components/OrpheusFlag.svelte | 1 -
src/lib/components/Snowfall.svelte | 220 +++++++++---------
src/lib/server/airtable.ts | 4 +-
src/lib/server/auth.ts | 3 +-
src/lib/server/db/index.ts | 2 +-
src/lib/server/db/schema.ts | 8 +-
src/lib/server/slack.ts | 2 +-
src/routes/+error.svelte | 12 +-
src/routes/+layout.svelte | 2 +-
src/routes/+page.server.ts | 2 +-
src/routes/Footer.svelte | 5 +-
src/routes/Rules.svelte | 19 +-
src/routes/Shop.svelte | 6 +-
src/routes/approved-editors/+page.svelte | 3 +-
.../create-hackatime-account/+page.svelte | 16 +-
src/routes/auth/failed/+page.svelte | 14 +-
src/routes/auth/ineligible/+page.svelte | 16 +-
src/routes/auth/logout/+server.ts | 2 +-
src/routes/dashboard/+error.svelte | 6 +-
src/routes/dashboard/+layout.svelte | 2 +-
src/routes/dashboard/Sidebar.svelte | 14 +-
src/routes/dashboard/SidebarButton.svelte | 5 +-
.../admin/admin/market/MarketItem.svelte | 2 +-
.../admin/admin/stats/+page.server.ts | 16 +-
.../admin/admin/users/+page.server.ts | 2 +-
.../dashboard/admin/print/+page.server.ts | 16 +-
.../dashboard/admin/review/+page.server.ts | 16 +-
.../dashboard/admin/review/+page.svelte | 4 +-
.../dashboard/admin/review/[id]/+page.svelte | 10 +-
.../admin/ysws-review/+page.server.ts | 14 +-
src/routes/dashboard/explore/+page.server.ts | 14 +-
src/routes/dashboard/explore/+page.svelte | 7 +-
.../dashboard/market/MarketTimer.svelte | 2 +-
src/routes/dashboard/projects/+page.svelte | 2 +-
.../dashboard/projects/[id]/+page.server.ts | 2 +-
.../dashboard/projects/[id]/+page.svelte | 4 +-
.../projects/[id]/delete/+page.server.ts | 18 +-
.../dashboard/projects/create/+page.svelte | 6 +-
src/routes/dashboard/users/+page.server.ts | 4 +-
wrangler.jsonc | 4 +-
48 files changed, 278 insertions(+), 278 deletions(-)
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index fc2fe38..e4e748f 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -10,9 +10,7 @@
"ghcr.io/devcontainers/features/github-cli:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
- "forwardPorts": [
- 5173
- ],
+ "forwardPorts": [5173],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "npm install",
// Configure tool-specific properties.
@@ -30,4 +28,4 @@
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
-}
\ No newline at end of file
+}
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index f33a02c..3cddc75 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,7 +6,7 @@
version: 2
updates:
- - package-ecosystem: "devcontainers"
- directory: "/"
- schedule:
- interval: weekly
+ - package-ecosystem: 'devcontainers'
+ directory: '/'
+ schedule:
+ interval: weekly
diff --git a/.prettierrc b/.prettierrc
index 8855237..8103a0b 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -3,10 +3,7 @@
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
- "plugins": [
- "prettier-plugin-svelte",
- "prettier-plugin-tailwindcss"
- ],
+ "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
"overrides": [
{
"files": "*.svelte",
diff --git a/docker-compose-staging.yaml b/docker-compose-staging.yaml
index e2f656b..5186ed1 100644
--- a/docker-compose-staging.yaml
+++ b/docker-compose-staging.yaml
@@ -18,4 +18,4 @@ services:
image: ghcr.io/hackclub/construct:staging
networks: {}
volumes:
- constructdb:
\ No newline at end of file
+ constructdb:
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 6497457..8d67fc0 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -18,4 +18,4 @@ services:
image: ghcr.io/hackclub/construct:production
networks: {}
volumes:
- constructdb:
\ No newline at end of file
+ constructdb:
diff --git a/eslint.config.js b/eslint.config.js
index e78afbd..2c49fa6 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -21,16 +21,14 @@ export default defineConfig(
languageOptions: {
globals: { ...globals.browser, ...globals.node }
},
- rules: { // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects.
- // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
- "no-undef": 'off' }
+ rules: {
+ // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects.
+ // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
+ 'no-undef': 'off'
+ }
},
{
- files: [
- '**/*.svelte',
- '**/*.svelte.ts',
- '**/*.svelte.js'
- ],
+ files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],
languageOptions: {
parserOptions: {
projectService: true,
diff --git a/src/app.css b/src/app.css
index b1dd974..0dcd37b 100644
--- a/src/app.css
+++ b/src/app.css
@@ -254,19 +254,19 @@
}
.themed-input-light {
- @apply border-3 border-primary-700 bg-primary-900 fill-primary-50 p-2 text-sm ring-primary-900 placeholder:text-primary-700 active:ring-3 outline-transparent;
+ @apply border-3 border-primary-700 bg-primary-900 fill-primary-50 p-2 text-sm ring-primary-900 outline-transparent placeholder:text-primary-700 active:ring-3;
}
.themed-input {
- @apply bg-primary-950 border-3 border-primary-900 ring-primary-700 focus:ring-2 transition-shadow rounded-lg placeholder:text-primary-800 outline-transparent;
+ @apply rounded-lg border-3 border-primary-900 bg-primary-950 ring-primary-700 outline-transparent transition-shadow placeholder:text-primary-800 focus:ring-2;
}
.themed-input-on-box {
- @apply bg-primary-900 border-3 border-primary-800 ring-primary-700 focus:ring-2 transition-shadow rounded-lg placeholder:text-primary-700 outline-transparent;
+ @apply rounded-lg border-3 border-primary-800 bg-primary-900 ring-primary-700 outline-transparent transition-shadow placeholder:text-primary-700 focus:ring-2;
}
.checkbox {
- @apply border-2 border-primary-600 bg-primary-900 ring-0 h-4 w-4 rounded-sm;
+ @apply h-4 w-4 rounded-sm border-2 border-primary-600 bg-primary-900 ring-0;
}
}
@@ -276,6 +276,6 @@
}
.center {
- @apply absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2;
+ @apply absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform;
}
}
diff --git a/src/lib/components/Button.svelte b/src/lib/components/Button.svelte
index f693cc4..be1604b 100644
--- a/src/lib/components/Button.svelte
+++ b/src/lib/components/Button.svelte
@@ -11,7 +11,7 @@
diff --git a/src/lib/components/OrpheusFlag.svelte b/src/lib/components/OrpheusFlag.svelte
index 7ddb956..9ccf5cc 100644
--- a/src/lib/components/OrpheusFlag.svelte
+++ b/src/lib/components/OrpheusFlag.svelte
@@ -14,4 +14,3 @@
alt="Hack Club"
/>
-
diff --git a/src/lib/components/Snowfall.svelte b/src/lib/components/Snowfall.svelte
index 3b83393..18080a5 100644
--- a/src/lib/components/Snowfall.svelte
+++ b/src/lib/components/Snowfall.svelte
@@ -1,127 +1,129 @@
+
+
-
-
diff --git a/src/lib/server/airtable.ts b/src/lib/server/airtable.ts
index d84b547..ce5914c 100644
--- a/src/lib/server/airtable.ts
+++ b/src/lib/server/airtable.ts
@@ -1,4 +1,6 @@
import Airtable from 'airtable';
import { env } from '$env/dynamic/private';
-export const airtableBase = env.AIRTABLE_TOKEN ? new Airtable({ apiKey: env.AIRTABLE_TOKEN }).base(env.AIRTABLE_BASE) : null;
+export const airtableBase = env.AIRTABLE_TOKEN
+ ? new Airtable({ apiKey: env.AIRTABLE_TOKEN }).base(env.AIRTABLE_BASE)
+ : null;
diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts
index 2e4b954..c1120e6 100644
--- a/src/lib/server/auth.ts
+++ b/src/lib/server/auth.ts
@@ -49,7 +49,8 @@ export async function validateSessionToken(token: string) {
return { session: null, user: null };
}
- const renewSession = Date.now() >= session.expiresAt.getTime() - DAY_IN_MS * (SESSION_EXPIRY_DAYS / 2);
+ const renewSession =
+ Date.now() >= session.expiresAt.getTime() - DAY_IN_MS * (SESSION_EXPIRY_DAYS / 2);
if (renewSession) {
session.expiresAt = new Date(Date.now() + DAY_IN_MS * SESSION_EXPIRY_DAYS);
await db
diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts
index cc98b8d..af71f88 100644
--- a/src/lib/server/db/index.ts
+++ b/src/lib/server/db/index.ts
@@ -3,7 +3,7 @@ import { Pool } from 'pg';
import * as schema from './schema';
const pool = new Pool({
- connectionString: process.env.DATABASE_URL!,
+ connectionString: process.env.DATABASE_URL!
});
export const db = drizzle(pool, { schema });
diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts
index 2f4591e..83eda25 100644
--- a/src/lib/server/db/schema.ts
+++ b/src/lib/server/db/schema.ts
@@ -236,7 +236,7 @@ export const ovenpheusLog = pgTable('ovenpheus_log', {
clay: real().notNull(),
bricksReceived: real().notNull(),
- timestamp: timestamp().notNull().defaultNow(),
+ timestamp: timestamp().notNull().defaultNow()
});
export const marketOrderStatus = pgEnum('market_order_status', [
@@ -248,14 +248,16 @@ export const marketOrderStatus = pgEnum('market_order_status', [
export const marketItemOrder = pgTable('market_item_order', {
id: serial().primaryKey(),
- userId: integer().references(() => user.id).notNull(),
+ userId: integer()
+ .references(() => user.id)
+ .notNull(),
addressId: text().notNull(),
bricksPaid: integer().notNull(),
status: marketOrderStatus().notNull().default('awaiting_approval'),
userNotes: text().notNull(),
- notes: text(), // stuff like tracking code, shown to user
+ notes: text(), // stuff like tracking code, shown to user
deleted: boolean().notNull().default(false),
createdAt: timestamp().notNull().defaultNow()
diff --git a/src/lib/server/slack.ts b/src/lib/server/slack.ts
index dfc0d4e..12962e6 100644
--- a/src/lib/server/slack.ts
+++ b/src/lib/server/slack.ts
@@ -13,7 +13,7 @@ export async function sendSlackDM(userId: string, message: string) {
method: 'POST',
headers: {
'Content-Type': 'application/json',
- 'Authorization': `Bearer ${token}`
+ Authorization: `Bearer ${token}`
},
body: JSON.stringify({
channel: userId,
diff --git a/src/routes/+error.svelte b/src/routes/+error.svelte
index c378729..dd58336 100644
--- a/src/routes/+error.svelte
+++ b/src/routes/+error.svelte
@@ -2,10 +2,16 @@
import { page } from '$app/state';
-
+
oh no!!!
Error {page.status}
{page.error?.message}
-
-
Go back home
+
+
Go back home
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index e45cb52..eeeba66 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -23,4 +23,4 @@
:global(body) {
position: relative;
}
-
\ No newline at end of file
+
diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts
index cb20996..d175818 100644
--- a/src/routes/+page.server.ts
+++ b/src/routes/+page.server.ts
@@ -3,6 +3,6 @@ import { env } from '$env/dynamic/private';
export function load({ locals }) {
return {
loggedIn: locals.session !== null,
- idvDomain: env.IDV_DOMAIN,
+ idvDomain: env.IDV_DOMAIN
};
}
diff --git a/src/routes/Footer.svelte b/src/routes/Footer.svelte
index b411335..f7bf211 100644
--- a/src/routes/Footer.svelte
+++ b/src/routes/Footer.svelte
@@ -8,7 +8,10 @@
A
Hack Club program. Made by teens, for
teens!
{#if env.PUBLIC_COMMIT}
- · Build
{env.PUBLIC_COMMIT.slice(0, 7)}
+ · Build
{env.PUBLIC_COMMIT.slice(0, 7)}
{/if}
diff --git a/src/routes/Rules.svelte b/src/routes/Rules.svelte
index a79d34e..cf3f7b3 100644
--- a/src/routes/Rules.svelte
+++ b/src/routes/Rules.svelte
@@ -11,10 +11,7 @@
You must be 13-18 years old.
You cannot be banned from Hackatime.
- You must be part of the
+ You must be part of the
Hack Club Slack community
.
@@ -33,15 +30,13 @@
You should spend at least 2 hours on each individual project.
- You should use one of our approved editors .
-
-
- You should track your time with the journaling feature.
-
-
- You should upload your project to Printables once done.
+ You should use one of our approved editors .
+ You should track your time with the journaling feature.
+ You should upload your project to Printables once done.
-
\ No newline at end of file
+
diff --git a/src/routes/Shop.svelte b/src/routes/Shop.svelte
index 419c97d..d719baf 100644
--- a/src/routes/Shop.svelte
+++ b/src/routes/Shop.svelte
@@ -20,11 +20,7 @@
text="Cool rocket but there are better ones ∙ 15 hours"
imgsrc={prize02}
/>
-
+
...and more!
diff --git a/src/routes/approved-editors/+page.svelte b/src/routes/approved-editors/+page.svelte
index 2e4effd..555dd8c 100644
--- a/src/routes/approved-editors/+page.svelte
+++ b/src/routes/approved-editors/+page.svelte
@@ -46,7 +46,8 @@
Want to get something else added here? Ask in #construct-help #construct-help!
diff --git a/src/routes/auth/create-hackatime-account/+page.svelte b/src/routes/auth/create-hackatime-account/+page.svelte
index 62d3c53..2e73338 100644
--- a/src/routes/auth/create-hackatime-account/+page.svelte
+++ b/src/routes/auth/create-hackatime-account/+page.svelte
@@ -1,13 +1,13 @@
-
-
Hackatime account not found
-
-
Make sure you have a Hackatime account associated with your Slack account.
-
Make one?
-
Try again
-
\ No newline at end of file
+
+
Hackatime account not found
+
+
Make sure you have a Hackatime account associated with your Slack account.
+
Make one?
+
Try again
+
diff --git a/src/routes/auth/failed/+page.svelte b/src/routes/auth/failed/+page.svelte
index 15ec7c7..8186463 100644
--- a/src/routes/auth/failed/+page.svelte
+++ b/src/routes/auth/failed/+page.svelte
@@ -1,12 +1,12 @@
diff --git a/src/routes/auth/ineligible/+page.svelte b/src/routes/auth/ineligible/+page.svelte
index d882dad..2ffb081 100644
--- a/src/routes/auth/ineligible/+page.svelte
+++ b/src/routes/auth/ineligible/+page.svelte
@@ -1,14 +1,14 @@
diff --git a/src/routes/auth/logout/+server.ts b/src/routes/auth/logout/+server.ts
index 0f94be2..bd7c790 100644
--- a/src/routes/auth/logout/+server.ts
+++ b/src/routes/auth/logout/+server.ts
@@ -9,5 +9,5 @@ export async function GET(event) {
deleteSessionTokenCookie(event);
}
- return redirect(302, "/");
+ return redirect(302, '/');
}
diff --git a/src/routes/dashboard/+error.svelte b/src/routes/dashboard/+error.svelte
index c1c00a2..b890f6b 100644
--- a/src/routes/dashboard/+error.svelte
+++ b/src/routes/dashboard/+error.svelte
@@ -8,6 +8,10 @@
diff --git a/src/routes/dashboard/admin/review/[id]/+page.svelte b/src/routes/dashboard/admin/review/[id]/+page.svelte
index 20f96ad..bbfc503 100644
--- a/src/routes/dashboard/admin/review/[id]/+page.svelte
+++ b/src/routes/dashboard/admin/review/[id]/+page.svelte
@@ -3,7 +3,7 @@
import Devlog from '$lib/components/Devlog.svelte';
import Head from '$lib/components/Head.svelte';
import { enhance } from '$app/forms';
- import { projectStatuses, getProjectLinkType} from '$lib/utils.js';
+ import { projectStatuses, getProjectLinkType } from '$lib/utils.js';
import ProjectLinks from '$lib/components/ProjectLinks.svelte';
import Spinny3DPreview from '$lib/components/Spinny3DPreview.svelte';
import { Download } from '@lucide/svelte';
@@ -49,7 +49,13 @@
uploadedFileUrl={data.project.project.uploadedFileUrl}
/>
Type: {getProjectLinkType(data.project.project.editorFileType, data.project.project.editorUrl, data.project.project.uploadedFileUrl)}
+ Type: {getProjectLinkType(
+ data.project.project.editorFileType,
+ data.project.project.editorUrl,
+ data.project.project.uploadedFileUrl
+ )}
+
-
\ No newline at end of file
+
diff --git a/src/routes/dashboard/projects/+page.svelte b/src/routes/dashboard/projects/+page.svelte
index d716df8..6945066 100644
--- a/src/routes/dashboard/projects/+page.svelte
+++ b/src/routes/dashboard/projects/+page.svelte
@@ -35,7 +35,7 @@
{:else}
-
\ No newline at end of file
diff --git a/src/routes/Shop.svelte b/src/routes/Shop.svelte
index d719baf..419c97d 100644
--- a/src/routes/Shop.svelte
+++ b/src/routes/Shop.svelte
@@ -20,7 +20,11 @@
text="Cool rocket but there are better ones ∙ 15 hours"
imgsrc={prize02}
/>
-
+
diff --git a/src/routes/approved-editors/+page.svelte b/src/routes/approved-editors/+page.svelte
index 555dd8c..2e4effd 100644
--- a/src/routes/approved-editors/+page.svelte
+++ b/src/routes/approved-editors/+page.svelte
@@ -46,8 +46,7 @@
diff --git a/src/routes/auth/create-hackatime-account/+page.svelte b/src/routes/auth/create-hackatime-account/+page.svelte
index 2e73338..62d3c53 100644
--- a/src/routes/auth/create-hackatime-account/+page.svelte
+++ b/src/routes/auth/create-hackatime-account/+page.svelte
@@ -1,13 +1,13 @@
\ No newline at end of file
diff --git a/src/routes/auth/failed/+page.svelte b/src/routes/auth/failed/+page.svelte
index 8186463..15ec7c7 100644
--- a/src/routes/auth/failed/+page.svelte
+++ b/src/routes/auth/failed/+page.svelte
@@ -1,12 +1,12 @@
\ No newline at end of file
diff --git a/src/routes/auth/ineligible/+page.svelte b/src/routes/auth/ineligible/+page.svelte
index 2ffb081..d882dad 100644
--- a/src/routes/auth/ineligible/+page.svelte
+++ b/src/routes/auth/ineligible/+page.svelte
@@ -1,14 +1,14 @@
\ No newline at end of file
diff --git a/src/routes/auth/logout/+server.ts b/src/routes/auth/logout/+server.ts
index bd7c790..0f94be2 100644
--- a/src/routes/auth/logout/+server.ts
+++ b/src/routes/auth/logout/+server.ts
@@ -9,5 +9,5 @@ export async function GET(event) {
deleteSessionTokenCookie(event);
}
- return redirect(302, '/');
+ return redirect(302, "/");
}
diff --git a/src/routes/dashboard/+error.svelte b/src/routes/dashboard/+error.svelte
index b890f6b..c1c00a2 100644
--- a/src/routes/dashboard/+error.svelte
+++ b/src/routes/dashboard/+error.svelte
@@ -8,10 +8,6 @@
diff --git a/src/routes/dashboard/admin/review/[id]/+page.svelte b/src/routes/dashboard/admin/review/[id]/+page.svelte
index bbfc503..20f96ad 100644
--- a/src/routes/dashboard/admin/review/[id]/+page.svelte
+++ b/src/routes/dashboard/admin/review/[id]/+page.svelte
@@ -3,7 +3,7 @@
import Devlog from '$lib/components/Devlog.svelte';
import Head from '$lib/components/Head.svelte';
import { enhance } from '$app/forms';
- import { projectStatuses, getProjectLinkType } from '$lib/utils.js';
+ import { projectStatuses, getProjectLinkType} from '$lib/utils.js';
import ProjectLinks from '$lib/components/ProjectLinks.svelte';
import Spinny3DPreview from '$lib/components/Spinny3DPreview.svelte';
import { Download } from '@lucide/svelte';
@@ -49,13 +49,7 @@
uploadedFileUrl={data.project.project.uploadedFileUrl}
/>
- Type: {getProjectLinkType(
- data.project.project.editorFileType,
- data.project.project.editorUrl,
- data.project.project.uploadedFileUrl
- )}
-
Type: {getProjectLinkType(data.project.project.editorFileType, data.project.project.editorUrl, data.project.project.uploadedFileUrl)}
-
+
\ No newline at end of file
diff --git a/src/routes/dashboard/projects/+page.svelte b/src/routes/dashboard/projects/+page.svelte
index 6945066..d716df8 100644
--- a/src/routes/dashboard/projects/+page.svelte
+++ b/src/routes/dashboard/projects/+page.svelte
@@ -35,7 +35,7 @@
{:else}
-