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}
+
+ {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")
+ }
+}