diff --git a/src/lib/components/cards/DriverCard.svelte b/src/lib/components/cards/DriverCard.svelte index f8302ff..c935601 100644 --- a/src/lib/components/cards/DriverCard.svelte +++ b/src/lib/components/cards/DriverCard.svelte @@ -14,7 +14,7 @@ import { team_dropdown_options } from "$lib/dropdown"; import { get_driver_headshot_template } from "$lib/database"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import { error } from "@sveltejs/kit"; import type { PageData } from "../../../routes/data/season/drivers/$types"; @@ -43,7 +43,7 @@ // Reactive state let required: boolean = $derived(!driver); - let disabled: boolean = $derived(!data.admin); + let disabled: boolean = $derived(!pbUser?.admin); let firstname_input_value: string = $state(driver?.firstname ?? ""); let lastname_input_value: string = $state(driver?.lastname ?? ""); let code_input_value: string = $state(driver?.code ?? ""); diff --git a/src/lib/components/cards/RaceCard.svelte b/src/lib/components/cards/RaceCard.svelte index 5092be4..b571bde 100644 --- a/src/lib/components/cards/RaceCard.svelte +++ b/src/lib/components/cards/RaceCard.svelte @@ -13,7 +13,7 @@ import { get_race_pictogram_template } from "$lib/database"; import { format_date, isodatetimeformat } from "$lib/date"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import { error } from "@sveltejs/kit"; import type { PageData } from "../../../routes/data/season/races/$types"; @@ -50,7 +50,7 @@ // Reactive state let required: boolean = $derived(!race); - let disabled: boolean = $derived(!data.admin); + let disabled: boolean = $derived(!pbUser?.admin); let name_value: string = $state(race?.name ?? ""); let step_value: string = $state(race?.step.toString() ?? ""); let pxx_value: string = $state(race?.pxx.toString() ?? ""); diff --git a/src/lib/components/cards/RacePickCard.svelte b/src/lib/components/cards/RacePickCard.svelte index b50b7ef..73aa55f 100644 --- a/src/lib/components/cards/RacePickCard.svelte +++ b/src/lib/components/cards/RacePickCard.svelte @@ -11,7 +11,7 @@ import { DRIVER_HEADSHOT_HEIGHT, DRIVER_HEADSHOT_WIDTH } from "$lib/config"; import { driver_dropdown_options } from "$lib/dropdown"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import type { PageData } from "../../../routes/racepicks/$types"; interface RacePickCardProps { @@ -96,7 +96,7 @@ // Database actions const update_racepick = (create?: boolean): (() => Promise) => { const handler = async (): Promise => { - if (!data.user?.id || data.user.id === "") { + if (!pbUser?.id || pbUser.id === "") { toastStore.trigger(get_error_toast("Invalid user id!")); return; } @@ -114,7 +114,7 @@ } const racepick_data = { - user: data.user.id, + user: pbUser.id, race: data.currentrace.id, pxx: pxx_select_value, dnf: dnf_select_value, diff --git a/src/lib/components/cards/RaceResultCard.svelte b/src/lib/components/cards/RaceResultCard.svelte index a833fcb..f051cc4 100644 --- a/src/lib/components/cards/RaceResultCard.svelte +++ b/src/lib/components/cards/RaceResultCard.svelte @@ -12,7 +12,7 @@ import type { Driver, Race, RaceResult, Substitution } from "$lib/schema"; import { get_by_value } from "$lib/database"; import { race_dropdown_options } from "$lib/dropdown"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import { get_error_toast } from "$lib/toast"; import type { PageData } from "../../../routes/data/raceresults/$types"; @@ -51,7 +51,7 @@ // Reactive state let required: boolean = $derived(!result); - let disabled: boolean = $derived(!data.admin); // TODO: Datelock (prevent entering future result) + let disabled: boolean = $derived(!pbUser?.admin); // TODO: Datelock (prevent entering future result) let race_select_value: string = $state(result?.race ?? ""); let currentrace: Race | undefined = $derived( diff --git a/src/lib/components/cards/SeasonPickCard.svelte b/src/lib/components/cards/SeasonPickCard.svelte index 7f1f197..afbe94a 100644 --- a/src/lib/components/cards/SeasonPickCard.svelte +++ b/src/lib/components/cards/SeasonPickCard.svelte @@ -14,7 +14,7 @@ import { DRIVER_HEADSHOT_HEIGHT, DRIVER_HEADSHOT_WIDTH } from "$lib/config"; import { driver_dropdown_options, team_dropdown_options } from "$lib/dropdown"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import type { PageData } from "../../../routes/seasonpicks/$types"; interface SeasonPickCardProps { @@ -184,7 +184,7 @@ // Database actions const update_seasonpick = (create?: boolean): (() => Promise) => { const handler = async (): Promise => { - if (!data.user?.id || data.user.id === "") { + if (!pbUser?.id || pbUser.id === "") { toastStore.trigger(get_error_toast("Invalid user id!")); return; } @@ -229,7 +229,7 @@ } const seasonpick_data = { - user: data.user.id, + user: pbUser.id, hottake: hottake_value, wdcwinner: wdc_value, wccwinner: wcc_value, diff --git a/src/lib/components/cards/SubstitutionCard.svelte b/src/lib/components/cards/SubstitutionCard.svelte index 89379b9..419f282 100644 --- a/src/lib/components/cards/SubstitutionCard.svelte +++ b/src/lib/components/cards/SubstitutionCard.svelte @@ -11,7 +11,7 @@ import { DRIVER_HEADSHOT_HEIGHT, DRIVER_HEADSHOT_WIDTH } from "$lib/config"; import { driver_dropdown_options, race_dropdown_options } from "$lib/dropdown"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import type { PageData } from "../../../routes/data/season/substitutions/$types"; interface SubstitutionCardProps { @@ -43,7 +43,7 @@ // Reactive state let required: boolean = $derived(!substitution); - let disabled: boolean = $derived(!data.admin); + let disabled: boolean = $derived(!pbUser?.admin); let active_drivers: Driver[] = $derived((drivers ?? []).filter((d: Driver) => d.active)); let inactive_drivers: Driver[] = $derived((drivers ?? []).filter((d: Driver) => !d.active)); let substitute_value: string = $state(substitution?.substitute ?? ""); diff --git a/src/lib/components/cards/TeamCard.svelte b/src/lib/components/cards/TeamCard.svelte index b5db8c2..69469f6 100644 --- a/src/lib/components/cards/TeamCard.svelte +++ b/src/lib/components/cards/TeamCard.svelte @@ -17,7 +17,7 @@ } from "$lib/config"; import { get_team_banner_template, get_team_logo_template } from "$lib/database"; import { get_error_toast } from "$lib/toast"; - import { pb } from "$lib/pocketbase"; + import { pb, pbUser } from "$lib/pocketbase"; import { error } from "@sveltejs/kit"; import type { PageData } from "../../../routes/data/season/teams/$types"; @@ -46,7 +46,7 @@ // Reactive state let required: boolean = $derived(!team); - let disabled: boolean = $derived(!data.admin); + let disabled: boolean = $derived(!pbUser?.admin); let name_value: string = $state(team?.name ?? ""); let color_value: string = $state(team?.color ?? ""); let banner_value: FileList | undefined = $state(); diff --git a/src/lib/fetch.ts b/src/lib/fetch.ts index 7d1ad04..c82d96e 100644 --- a/src/lib/fetch.ts +++ b/src/lib/fetch.ts @@ -1,3 +1,4 @@ +import { get } from "svelte/store"; import { pb, pbUser } from "./pocketbase"; import type { CurrentPickedUser, diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index b2460c9..1954154 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -46,6 +46,7 @@ import { pb, pbUser, subscribe, unsubscribe } from "$lib/pocketbase"; import { AVATAR_HEIGHT, AVATAR_WIDTH } from "$lib/config"; import { error } from "@sveltejs/kit"; + import { get } from "svelte/store"; let { data, children }: { data: LayoutData; children: Snippet } = $props(); @@ -138,9 +139,9 @@ storePopup.set({ computePosition, autoUpdate, offset, shift, flip, arrow }); // Reactive state - let username_value: string = $state(data.user?.username ?? ""); - let firstname_value: string = $state(data.user?.firstname ?? ""); - let email_value: string = $state(data.user?.email ?? ""); + let username_value: string = $state(pbUser?.username ?? ""); + let firstname_value: string = $state(pbUser?.firstname ?? ""); + let email_value: string = $state(pbUser?.email ?? ""); let password_value: string = $state(""); let avatar_value: FileList | undefined = $state(); @@ -172,11 +173,12 @@ } catch (error) { toastStore.trigger(get_error_toast("" + error)); } + await invalidate("data:user"); drawerStore.close(); - username_value = data.user?.username ?? ""; - firstname_value = data.user?.firstname ?? ""; - email_value = data.user?.email ?? ""; + username_value = pbUser?.username ?? ""; + firstname_value = pbUser?.firstname ?? ""; + email_value = pbUser?.email ?? ""; password_value = ""; }; @@ -254,20 +256,20 @@ await login(); } else { - if (!data.user?.id || data.user.id === "") { + if (!pbUser?.id || pbUser.id === "") { toastStore.trigger(get_error_toast("Invalid user id!")); return; } - if (email_value && email_value.trim() !== data.user.email) { + if (email_value && email_value.trim() !== pbUser.email) { await pb.collection("users").requestEmailChange(email_value.trim()); toastStore.trigger(get_info_toast("Check your inbox!")); } - await pb.collection("users").update(data.user.id, { - username: username_value.trim().length > 0 ? username_value.trim() : data.user.username, + await pb.collection("users").update(pbUser.id, { + username: username_value.trim().length > 0 ? username_value.trim() : pbUser.username, firstname: - firstname_value.trim().length > 0 ? firstname_value.trim() : data.user.firstname, + firstname_value.trim().length > 0 ? firstname_value.trim() : pbUser.firstname, avatar: avatar_avif, }); @@ -455,7 +457,7 @@ - {:else if $drawerStore.id === "profile_drawer" && data.user} + {:else if $drawerStore.id === "profile_drawer" && pbUser} @@ -537,14 +539,14 @@ activate={$page.url.pathname.startsWith("/data")}>Data - {#if !data.user} + {#if !pbUser} {:else} { - depends("data:graphics", "data:user"); + depends("data:graphics"); return { + // NOTE: Don't do this! The user object will be updated after this, so it will be undefined! + // // User information (synchronous) - user: pbUser, - admin: pbUser?.admin ?? false, + // user: get(pbUser), + // admin: get(pbUser)?.admin ?? false, // Return static data graphics: await fetch_graphics(fetch), diff --git a/src/routes/racepicks/+page.svelte b/src/routes/racepicks/+page.svelte index d9e11b7..16d8f4b 100644 --- a/src/routes/racepicks/+page.svelte +++ b/src/routes/racepicks/+page.svelte @@ -22,6 +22,7 @@ import { format_date, shortdatetimeformat } from "$lib/date"; import type { CurrentPickedUser, RacePick } from "$lib/schema"; import { get_by_value, get_driver_headshot_template } from "$lib/database"; + import { pbUser } from "$lib/pocketbase"; let { data }: { data: PageData } = $props(); @@ -76,9 +77,8 @@
@@ -124,7 +124,7 @@
- {#if data.user} + {#if pbUser}

Your P{data.currentrace.pxx} Pick:

@@ -309,10 +309,8 @@ {@const picks = racepicks.filter((pick: RacePick) => pick.user === user.id)}
diff --git a/src/routes/seasonpicks/+page.svelte b/src/routes/seasonpicks/+page.svelte index 48e729c..9af2d6a 100644 --- a/src/routes/seasonpicks/+page.svelte +++ b/src/routes/seasonpicks/+page.svelte @@ -23,6 +23,7 @@ TEAM_BANNER_WIDTH, } from "$lib/config"; import Countdown from "$lib/components/Countdown.svelte"; + import { pbUser } from "$lib/pocketbase"; let { data }: { data: PageData } = $props(); @@ -69,12 +70,12 @@
- {#if data.user} + {#if pbUser} {@const teamwinners = data.seasonpick ? data.seasonpick.teamwinners .map((id: string) => get_by_value(drivers, "id", id) as Driver) @@ -345,8 +346,8 @@ : [undefined]}