From e37c73e33a4aaf7fb8d25b5af03627f20bcda19f Mon Sep 17 00:00:00 2001 From: Doog <157747121+doogongithub@users.noreply.github.com> Date: Sat, 24 Feb 2024 20:08:35 -0500 Subject: add gitignore --- fe/src/App.svelte | 147 +++----------------------------------------- fe/src/app.css | 2 +- fe/src/lib/DataView.svelte | 67 ++++++++++++++++++++ fe/src/lib/Layout.svelte | 57 +++++++++++++++++ fe/src/lib/LoginForm.svelte | 64 +++++++++++++++++++ fe/src/lib/Table.svelte | 61 +++++++++++++++--- fe/src/stores/auth.ts | 48 +++++++++++++++ 7 files changed, 300 insertions(+), 146 deletions(-) create mode 100644 fe/src/lib/DataView.svelte create mode 100644 fe/src/lib/Layout.svelte create mode 100644 fe/src/lib/LoginForm.svelte create mode 100644 fe/src/stores/auth.ts (limited to 'fe/src') diff --git a/fe/src/App.svelte b/fe/src/App.svelte index cc4e594..8811c52 100644 --- a/fe/src/App.svelte +++ b/fe/src/App.svelte @@ -1,146 +1,19 @@
- {#if !authenticated} - -
-
- - -
-
- - -
- {#if error} -

{error}

- {/if} - -
-
+ + {#if !$authenticated} + {:else} -
- -
-
- - - - - - -
- - - - {#await data} -

...fetching

- {:then data} - {#if data} -

Status

-

{data.status}

- -
-
- {:else} -

No data yet

- {/if} - {:catch errror} -

{error.message}

- {/await} + {/if} + diff --git a/fe/src/lib/LoginForm.svelte b/fe/src/lib/LoginForm.svelte new file mode 100644 index 0000000..22c0faf --- /dev/null +++ b/fe/src/lib/LoginForm.svelte @@ -0,0 +1,64 @@ + + + +
+
+ + +
+
+ + +
+ {#if error} +

{error}

+ {/if} + + +
diff --git a/fe/src/lib/Table.svelte b/fe/src/lib/Table.svelte index 2df9f8c..5572280 100644 --- a/fe/src/lib/Table.svelte +++ b/fe/src/lib/Table.svelte @@ -1,8 +1,38 @@
{#if title} @@ -11,16 +41,27 @@ {#if !noheader} - + {#each getDataKeys(data) as header} + + {/each} {/if} + {#if data} + {#each data as row} - + {#each getRow(row) as datum} + + + {/each} + {/each} + {:else} + + There is not data. + + {/if} {#if !nofooter} @@ -38,4 +79,8 @@ table { margin: 8px; border: solid 1px black; } + +th { + text-transform: capitalize; +} diff --git a/fe/src/stores/auth.ts b/fe/src/stores/auth.ts new file mode 100644 index 0000000..7e70cda --- /dev/null +++ b/fe/src/stores/auth.ts @@ -0,0 +1,48 @@ +import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; +import { writable, derived } from 'svelte/store'; + +type Nullable = T | null; + +interface User { + uuid: string; + username: string; +} + +interface TokenStore { + subscribe: (run: Subscriber>, invalidate: Invalidator>) => Unsubscriber, + authenticate: (newToken: string) => void, + unauthenticate: () => void +} + +function createTokenStore(): TokenStore { + const storedToken = localStorage.getItem("token"); + const { subscribe, set } = writable(storedToken); + + function authenticate(newToken: string): void { + try { + localStorage.setItem("token", newToken); + set(newToken); + } catch (e) { + console.error('error', e); + } + } + + function unauthenticate(): void { + localStorage.removeItem("token"); + set(null); + } + + return { + subscribe, + authenticate, + unauthenticate + }; +} + +function onTokenChange ($token: Nullable): boolean { + return $token ? true : false; +} + +export const token = createTokenStore(); +export const authenticated = derived(token, onTokenChange); +export const user = writable(null); -- cgit v1.1
- Data Header - {header}
Data{formatDatum(datum)}