diff --git a/src/api/index.ts b/src/api/index.ts index 04b9cf3..88ab3b9 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -45,7 +45,7 @@ export default function apiClient(fetch: SvelteFetch, baseUrl?: string): ApiClie const { options, resolve, reject } = scheduled.shift() as (typeof scheduled)[0] try { const resp = await fetch( - `${baseUrl ?? env.PUBLIC_BASE_API_URL ?? "https://api.pluralkit.me"}/v2/${options.path}`, + `${baseUrl ?? env.PUBLIC_BASE_API_URL ?? "https://api.pluralkit.me"}${options.path.startsWith("private") ? "" : "/v2"}/${options.path}`, { method: (options && options.method) || "GET", headers: { diff --git a/src/api/types.ts b/src/api/types.ts index 82f1145..b9b67c9 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -25,12 +25,19 @@ export interface System { pronouns?: string } +export interface DashView { + id: string + name: string + value: string +} + export interface Config { timezone: string pings_enabled: boolean member_default_private?: boolean group_default_private?: boolean show_private_info?: boolean + dash_views?: DashView[] member_limit: number group_limit: number description_templates: string[] diff --git a/src/components/dash/CopyPermaLink.svelte b/src/components/dash/CopyPermaLink.svelte index bb57bdb..e28c68e 100644 --- a/src/components/dash/CopyPermaLink.svelte +++ b/src/components/dash/CopyPermaLink.svelte @@ -1,9 +1,9 @@
+ {#if err} + + {/if} + {#if success} + + {/if}
- +
This will copy a link to your current dashboard view, including + > Save your current dashboard view to your + system settings, including filters.
diff --git a/src/components/dash/edit/EditDashView.svelte b/src/components/dash/edit/EditDashView.svelte new file mode 100644 index 0000000..3e763d5 --- /dev/null +++ b/src/components/dash/edit/EditDashView.svelte @@ -0,0 +1,95 @@ + + +
+ + + +
{view.name}
+ +
+ + + + diff --git a/src/components/dash/groups/GroupHome.svelte b/src/components/dash/groups/GroupHome.svelte index 76be916..6d2613e 100644 --- a/src/components/dash/groups/GroupHome.svelte +++ b/src/components/dash/groups/GroupHome.svelte @@ -21,7 +21,7 @@
- {#if dash.groups.settings.filterMode === "advanced"} + {#if dash.groups.settings.filterMode === "advanced" && dash.user?.uuid === dash.system.uuid} {/if}
diff --git a/src/components/dash/members/MemberHome.svelte b/src/components/dash/members/MemberHome.svelte index e8ffb9c..168b7d7 100644 --- a/src/components/dash/members/MemberHome.svelte +++ b/src/components/dash/members/MemberHome.svelte @@ -21,7 +21,7 @@
- {#if dash.members.settings.filterMode === "advanced"} + {#if dash.members.settings.filterMode === "advanced" && dash.user?.uuid === dash.system.uuid} {/if} diff --git a/src/lib/dash/dash.svelte.ts b/src/lib/dash/dash.svelte.ts index 75418ae..48e69e6 100644 --- a/src/lib/dash/dash.svelte.ts +++ b/src/lib/dash/dash.svelte.ts @@ -359,7 +359,9 @@ export function createConfigState(config?: Config) { let privateMember = $state(config?.member_default_private) let privateGroup = $state(config?.group_default_private) let templates = $state(config?.description_templates ?? []) + let dash_views = $state(config?.dash_views) return { + dash_views, get member_default_private() { return privateMember }, diff --git a/src/routes/dash/+page.server.ts b/src/routes/dash/+page.server.ts index 05f9218..0ddf6a5 100644 --- a/src/routes/dash/+page.server.ts +++ b/src/routes/dash/+page.server.ts @@ -1,7 +1,7 @@ import { loadDash } from "$lib/dash/load.js" -export async function load({ cookies, fetch, url, parent }) { +export async function load({ cookies, url, parent, locals }) { const { apiBaseUrl } = await parent() - return await loadDash(fetch, cookies, url, apiBaseUrl) + return await loadDash(locals.api, cookies, url, apiBaseUrl) } diff --git a/src/routes/dash/[sid]/(dashboard)/+layout.svelte b/src/routes/dash/[sid]/(dashboard)/+layout.svelte index baeee39..e65b096 100644 --- a/src/routes/dash/[sid]/(dashboard)/+layout.svelte +++ b/src/routes/dash/[sid]/(dashboard)/+layout.svelte @@ -4,7 +4,7 @@ import { initDash } from "$lib/dash/dash.svelte.js" let { children, data } = $props() - initDash(data) + initDash({...data, user: dash.user})
diff --git a/src/routes/dash/[sid]/(dashboard)/config/+page.svelte b/src/routes/dash/[sid]/(dashboard)/config/+page.svelte index 363454c..2049909 100644 --- a/src/routes/dash/[sid]/(dashboard)/config/+page.svelte +++ b/src/routes/dash/[sid]/(dashboard)/config/+page.svelte @@ -1,6 +1,6 @@
diff --git a/src/routes/dash/g/[gid]/+page.svelte b/src/routes/dash/g/[gid]/+page.svelte index a9b4404..194d8af 100644 --- a/src/routes/dash/g/[gid]/+page.svelte +++ b/src/routes/dash/g/[gid]/+page.svelte @@ -6,7 +6,7 @@ let { data } = $props() - initDash(data) + initDash({...data, user: dash.user})
diff --git a/src/routes/dash/m/[mid]/+page.svelte b/src/routes/dash/m/[mid]/+page.svelte index af3f72e..fa66f8c 100644 --- a/src/routes/dash/m/[mid]/+page.svelte +++ b/src/routes/dash/m/[mid]/+page.svelte @@ -5,7 +5,7 @@ import { dash, initDash } from "$lib/dash/dash.svelte" let { data } = $props() - initDash(data) + initDash({...data, user: dash.user})
diff --git a/src/routes/view/+page.server.ts b/src/routes/view/+page.server.ts index b45a1d0..edb7164 100644 --- a/src/routes/view/+page.server.ts +++ b/src/routes/view/+page.server.ts @@ -30,7 +30,7 @@ export function load({ url }) { if (system) redirect( - 302, + 308, `/dash/${system}?${isPublic ? `public=true&` : ""}uri=${uri}&tab=${tab}&${url.searchParams.toString()}` ) } diff --git a/src/routes/view/[vid]/+page.server.ts b/src/routes/view/[vid]/+page.server.ts new file mode 100644 index 0000000..58d5504 --- /dev/null +++ b/src/routes/view/[vid]/+page.server.ts @@ -0,0 +1,25 @@ +import type { ApiError } from "$api" +import type { DashView } from "$api/types.js" +import { error, redirect } from "@sveltejs/kit" + +export async function load({ params, parent, locals }) { + const vid = params.vid + const api = locals.api + let value = "" + + try { + const resp = await api(`private/dash_view/${vid}`) + if (resp && resp.value && resp.value.startsWith("ey")) { + value = resp.value + } + } catch (e) { + const err = e as ApiError + error(404, err.message) + } + + if (value) { + redirect(308, `/view?uri=${value}`) + } else { + error(400, "Invalid view value") + } +}