diff options
Diffstat (limited to 'client/src/routes/(app)')
| -rw-r--r-- | client/src/routes/(app)/+error.svelte | 5 | ||||
| -rw-r--r-- | client/src/routes/(app)/+layout.svelte | 12 | ||||
| -rw-r--r-- | client/src/routes/(app)/+layout.ts | 6 | ||||
| -rw-r--r-- | client/src/routes/(app)/+page.svelte | 25 | ||||
| -rw-r--r-- | client/src/routes/(app)/+page.ts | 38 |
5 files changed, 86 insertions, 0 deletions
diff --git a/client/src/routes/(app)/+error.svelte b/client/src/routes/(app)/+error.svelte new file mode 100644 index 0000000..63f3d66 --- /dev/null +++ b/client/src/routes/(app)/+error.svelte @@ -0,0 +1,5 @@ +<script lang="ts"> + import { page } from '$app/state'; +</script> + +<h1>{page.status} {page.error?.message}</h1> diff --git a/client/src/routes/(app)/+layout.svelte b/client/src/routes/(app)/+layout.svelte new file mode 100644 index 0000000..47dc736 --- /dev/null +++ b/client/src/routes/(app)/+layout.svelte @@ -0,0 +1,12 @@ +<script lang="ts"> + let { children } = $props(); +</script> + +<h1>eyeballs</h1> + +<nav> + <a href="/">Dashboard</a> + <a href="/settings">Settings</a> +</nav> + +{@render children()} diff --git a/client/src/routes/(app)/+layout.ts b/client/src/routes/(app)/+layout.ts new file mode 100644 index 0000000..08366b0 --- /dev/null +++ b/client/src/routes/(app)/+layout.ts @@ -0,0 +1,6 @@ +import type { LayoutLoad } from './$types'; + +export const load: LayoutLoad = () => { + // TODO: Decrypt sessioncookie if set, if not set, redirect to /login + return {}; +}; diff --git a/client/src/routes/(app)/+page.svelte b/client/src/routes/(app)/+page.svelte new file mode 100644 index 0000000..945945e --- /dev/null +++ b/client/src/routes/(app)/+page.svelte @@ -0,0 +1,25 @@ +<script lang="ts"> + import type { PageProps } from './$types'; + import ListPrevNext from '$lib/ListPrevNext.svelte'; + let { data }: PageProps = $props(); +</script> + +<h1>Reviews</h1> + +{#if data.reviews === undefined} + Select active project + + <ul> + {#each data.projects!!.projects as { id, title } (id)} + <li>{title}</li> + {/each} + </ul> + <ListPrevNext list={data.projects} query_offset="project_offset" /> +{:else} + <ul> + {#each data.reviews.reviews as { id, title } (id)} + <li>{title}</li> + {/each} + </ul> + <ListPrevNext list={data.reviews} /> +{/if} diff --git a/client/src/routes/(app)/+page.ts b/client/src/routes/(app)/+page.ts new file mode 100644 index 0000000..b6b923e --- /dev/null +++ b/client/src/routes/(app)/+page.ts @@ -0,0 +1,38 @@ +import { client } from '$lib/fetch-client'; +import { get_config } from '$lib/config'; +import type { PageLoad } from './$types'; + +function maybeInt(input: string | null, fallback: number): number { + if (input === null) return fallback; + try { + return parseInt(input); + } catch { + return fallback; + } +} + +export const load: PageLoad = async ({ fetch, url }) => { + const config = await get_config(); + if (config.active_project === undefined) { + const projects = await client.GET('/projects', { + params: { query: { offset: maybeInt(url.searchParams.get('projects_offset'), 0) } }, + fetch + }); + return { + projects: projects.data!!, + reviews: undefined + }; + } else { + const reviews = await client.GET('/project/{projectid}/reviews', { + params: { + path: { projectid: config.active_project }, + query: { offset: maybeInt(url.searchParams.get('reviews_offset'), 0) } + }, + fetch + }); + return { + projects: undefined, + reviews: reviews.data + }; + } +}; |
