diff --git a/Foxnouns.Frontend/src/lib/components/Error.svelte b/Foxnouns.Frontend/src/lib/components/Error.svelte index c9e2c0e..7817dfa 100644 --- a/Foxnouns.Frontend/src/lib/components/Error.svelte +++ b/Foxnouns.Frontend/src/lib/components/Error.svelte @@ -12,8 +12,6 @@ {#if error.code === ErrorCode.BadRequest} {$t("error.bad-request-header")} - {:else if error.status === 404} - {$t("error.not-found-header")} {:else} {$t("error.generic-header")} {/if} diff --git a/Foxnouns.Frontend/src/lib/components/editor/CustomPreferencesNotice.svelte b/Foxnouns.Frontend/src/lib/components/editor/CustomPreferencesNotice.svelte deleted file mode 100644 index 319c1da..0000000 --- a/Foxnouns.Frontend/src/lib/components/editor/CustomPreferencesNotice.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - -
- {$t("editor.custom-preference-notice")} - {$t("editor.custom-preference-notice-link")} -
diff --git a/Foxnouns.Frontend/src/lib/components/editor/LinksEditor.svelte b/Foxnouns.Frontend/src/lib/components/editor/LinksEditor.svelte index 4047880..f908e0e 100644 --- a/Foxnouns.Frontend/src/lib/components/editor/LinksEditor.svelte +++ b/Foxnouns.Frontend/src/lib/components/editor/LinksEditor.svelte @@ -2,16 +2,14 @@ import type { RawApiError } from "$api/error"; import IconButton from "$components/IconButton.svelte"; import { t } from "$lib/i18n"; - import ephemeralState from "$lib/state.svelte"; import FormStatusMarker from "./FormStatusMarker.svelte"; type Props = { - stateKey: string; currentLinks: string[]; save(links: string[]): Promise; form: { ok: boolean; error: RawApiError | null } | null; }; - let { stateKey, currentLinks, save, form }: Props = $props(); + let { currentLinks, save, form }: Props = $props(); let links = $state(currentLinks); let newEntry = $state(""); @@ -39,12 +37,6 @@ links = [...links, newEntry]; newEntry = ""; }; - - ephemeralState( - stateKey, - () => links, - (data) => (links = data), - );

diff --git a/Foxnouns.Frontend/src/lib/components/editor/ProfileFlagsEditor.svelte b/Foxnouns.Frontend/src/lib/components/editor/ProfileFlagsEditor.svelte index 304ae88..5bd62fd 100644 --- a/Foxnouns.Frontend/src/lib/components/editor/ProfileFlagsEditor.svelte +++ b/Foxnouns.Frontend/src/lib/components/editor/ProfileFlagsEditor.svelte @@ -4,18 +4,16 @@ import FlagSearch from "$components/editor/FlagSearch.svelte"; import IconButton from "$components/IconButton.svelte"; import { t } from "$lib/i18n"; - import ephemeralState from "$lib/state.svelte"; import FlagButton from "./FlagButton.svelte"; import FormStatusMarker from "./FormStatusMarker.svelte"; type Props = { - stateKey: string; profileFlags: PrideFlag[]; allFlags: PrideFlag[]; save(flags: string[]): Promise; form: { ok: boolean; error: RawApiError | null } | null; }; - let { stateKey, profileFlags, allFlags, save, form }: Props = $props(); + let { profileFlags, allFlags, save, form }: Props = $props(); let flags = $state(profileFlags); @@ -42,12 +40,6 @@ }; const saveChanges = () => save(flags.map((f) => f.id)); - - ephemeralState( - stateKey, - () => flags, - (data) => (flags = data), - );
diff --git a/Foxnouns.Frontend/src/lib/i18n/locales/en.json b/Foxnouns.Frontend/src/lib/i18n/locales/en.json index 1c15a83..0c2f958 100644 --- a/Foxnouns.Frontend/src/lib/i18n/locales/en.json +++ b/Foxnouns.Frontend/src/lib/i18n/locales/en.json @@ -121,8 +121,7 @@ "500-description": "Something went wrong on the server. Please try again later.", "unknown-status-description": "Something went wrong, but we're not sure what. Please try again.", "error-id": "If you report this error to the developers, please give them this ID:", - "page-not-found": "No page exists at this URL.", - "not-found-header": "That page could not be found" + "page-not-found": "No page exists at this URL." }, "settings": { "general-information-tab": "General information", @@ -289,9 +288,7 @@ "custom-preference-size-small": "Small", "custom-preference-size": "Text size", "custom-preference-muted": "Show as muted text", - "custom-preference-favourite": "Treat like favourite", - "custom-preference-notice": "Want to edit your custom preferences?", - "custom-preference-notice-link": "Go to settings" + "custom-preference-favourite": "Treat like favourite" }, "cancel": "Cancel", "report": { diff --git a/Foxnouns.Frontend/src/lib/state.svelte.ts b/Foxnouns.Frontend/src/lib/state.svelte.ts deleted file mode 100644 index 8358bf3..0000000 --- a/Foxnouns.Frontend/src/lib/state.svelte.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { onMount, onDestroy } from "svelte"; -import { browser } from "$app/environment"; -import log from "./log"; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import type { Snapshot } from "@sveltejs/kit"; - -/** - * Store ephemeral state in sessionStorage to persist between navigations. - * Similar to {@link Snapshot}, but doesn't attach it to a history entry. - * @param key Unique key to use for this state. - * @param capture Function that returns the state to store. - * @param restore Function that takes the state that was stored previously and assigns it back to component variables. - */ -export default function ephemeralState( - key: string, - capture: () => T, - restore: (data: T) => void, -): void { - if (!browser) return; - - onMount(() => { - if (!("sessionStorage" in window)) return; - const rawData = sessionStorage.getItem("ephemeral-" + key); - if (!rawData) return; - - log.debug("Restoring data %s from session storage", key); - const data = JSON.parse(rawData) as T; - restore(data); - }); - - onDestroy(() => { - if (!("sessionStorage" in window)) return; - - log.debug("Saving data %s to session storage", key); - sessionStorage.setItem("ephemeral-" + key, JSON.stringify(capture())); - }); -} diff --git a/Foxnouns.Frontend/src/routes/settings/members/[id]/+page.svelte b/Foxnouns.Frontend/src/routes/settings/members/[id]/+page.svelte index 0e34638..64be86e 100644 --- a/Foxnouns.Frontend/src/routes/settings/members/[id]/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/members/[id]/+page.svelte @@ -15,7 +15,6 @@ import BioEditor from "$components/editor/BioEditor.svelte"; import { PUBLIC_BASE_URL } from "$env/static/public"; import { enhance } from "$app/forms"; - import ephemeralState from "$lib/state.svelte"; type Props = { data: PageData; form: ActionData }; let { data, form }: Props = $props(); @@ -62,12 +61,6 @@ // Bio is stored in a $state() so we have a markdown preview let bio = $state(data.member.bio || ""); - - ephemeralState( - "member-" + data.member.id + "-bio", - () => bio, - (data) => (bio = data), - ); {#if error} diff --git a/Foxnouns.Frontend/src/routes/settings/members/[id]/fields/+page.svelte b/Foxnouns.Frontend/src/routes/settings/members/[id]/fields/+page.svelte index 7e86851..491a45f 100644 --- a/Foxnouns.Frontend/src/routes/settings/members/[id]/fields/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/members/[id]/fields/+page.svelte @@ -2,11 +2,8 @@ import { apiRequest } from "$api"; import ApiError, { type RawApiError } from "$api/error"; import { mergePreferences, type User } from "$api/models/user"; - import CustomPreferencesNotice from "$components/editor/CustomPreferencesNotice.svelte"; import FieldsEditor from "$components/editor/FieldsEditor.svelte"; - import NoscriptWarning from "$components/editor/NoscriptWarning.svelte"; import log from "$lib/log"; - import ephemeralState from "$lib/state.svelte"; import type { PageData } from "./$types"; type Props = { data: PageData }; @@ -30,15 +27,6 @@ if (e instanceof ApiError) ok.error = e.obj; } }; - - ephemeralState( - "member-" + data.member.id + "-fields", - () => fields, - (data) => (fields = data), - ); - - - diff --git a/Foxnouns.Frontend/src/routes/settings/members/[id]/flags-links/+page.svelte b/Foxnouns.Frontend/src/routes/settings/members/[id]/flags-links/+page.svelte index e9e1c2d..b6aaadb 100644 --- a/Foxnouns.Frontend/src/routes/settings/members/[id]/flags-links/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/members/[id]/flags-links/+page.svelte @@ -41,16 +41,10 @@ - + diff --git a/Foxnouns.Frontend/src/routes/settings/members/[id]/names-pronouns/+page.svelte b/Foxnouns.Frontend/src/routes/settings/members/[id]/names-pronouns/+page.svelte index 9aa19bb..19ed7e5 100644 --- a/Foxnouns.Frontend/src/routes/settings/members/[id]/names-pronouns/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/members/[id]/names-pronouns/+page.svelte @@ -3,14 +3,12 @@ import ApiError, { type RawApiError } from "$api/error"; import type { Member } from "$api/models"; import { mergePreferences } from "$api/models/user"; - import CustomPreferencesNotice from "$components/editor/CustomPreferencesNotice.svelte"; import FieldEditor from "$components/editor/FieldEditor.svelte"; import FormStatusMarker from "$components/editor/FormStatusMarker.svelte"; import NoscriptWarning from "$components/editor/NoscriptWarning.svelte"; import PronounsEditor from "$components/editor/PronounsEditor.svelte"; import { t } from "$lib/i18n"; import log from "$lib/log"; - import ephemeralState from "$lib/state.svelte"; import type { PageData } from "./$types"; type Props = { data: PageData }; @@ -23,15 +21,6 @@ let allPreferences = $derived(mergePreferences(data.user.custom_preferences)); - ephemeralState( - "member-" + data.member.id + "-names-pronouns", - () => ({ names, pronouns }), - (data) => { - names = data.names; - pronouns = data.pronouns; - }, - ); - const update = async () => { try { const resp = await apiRequest("PATCH", `/users/@me/members/${data.member.id}`, { @@ -51,7 +40,6 @@ -
diff --git a/Foxnouns.Frontend/src/routes/settings/profile/bio/+page.svelte b/Foxnouns.Frontend/src/routes/settings/profile/bio/+page.svelte index 91e452b..19e04fb 100644 --- a/Foxnouns.Frontend/src/routes/settings/profile/bio/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/profile/bio/+page.svelte @@ -3,18 +3,11 @@ import type { ActionData, PageData } from "./$types"; import BioEditor from "$components/editor/BioEditor.svelte"; import { t } from "$lib/i18n"; - import ephemeralState from "$lib/state.svelte"; type Props = { data: PageData; form: ActionData }; let { data, form }: Props = $props(); let bio = $state(data.user.bio || ""); - - ephemeralState( - "user-bio", - () => bio, - (data) => (bio = data), - );

{$t("edit-profile.bio-tab")}

diff --git a/Foxnouns.Frontend/src/routes/settings/profile/fields/+page.svelte b/Foxnouns.Frontend/src/routes/settings/profile/fields/+page.svelte index 3f47f74..4c61a58 100644 --- a/Foxnouns.Frontend/src/routes/settings/profile/fields/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/profile/fields/+page.svelte @@ -2,11 +2,8 @@ import { apiRequest } from "$api"; import ApiError, { type RawApiError } from "$api/error"; import { mergePreferences, type User } from "$api/models/user"; - import CustomPreferencesNotice from "$components/editor/CustomPreferencesNotice.svelte"; import FieldsEditor from "$components/editor/FieldsEditor.svelte"; - import NoscriptWarning from "$components/editor/NoscriptWarning.svelte"; import log from "$lib/log"; - import ephemeralState from "$lib/state.svelte"; import type { PageData } from "./$types"; type Props = { data: PageData }; @@ -30,15 +27,6 @@ if (e instanceof ApiError) ok.error = e.obj; } }; - - ephemeralState( - "user-fields", - () => fields, - (data) => (fields = data), - ); - - - diff --git a/Foxnouns.Frontend/src/routes/settings/profile/flags-links/+page.svelte b/Foxnouns.Frontend/src/routes/settings/profile/flags-links/+page.svelte index b56d0c2..4b2b165 100644 --- a/Foxnouns.Frontend/src/routes/settings/profile/flags-links/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/profile/flags-links/+page.svelte @@ -41,16 +41,10 @@ - + diff --git a/Foxnouns.Frontend/src/routes/settings/profile/names-pronouns/+page.svelte b/Foxnouns.Frontend/src/routes/settings/profile/names-pronouns/+page.svelte index 2703748..e22c5d5 100644 --- a/Foxnouns.Frontend/src/routes/settings/profile/names-pronouns/+page.svelte +++ b/Foxnouns.Frontend/src/routes/settings/profile/names-pronouns/+page.svelte @@ -2,14 +2,12 @@ import { apiRequest } from "$api"; import ApiError, { type RawApiError } from "$api/error"; import { mergePreferences, type User } from "$api/models/user"; - import CustomPreferencesNotice from "$components/editor/CustomPreferencesNotice.svelte"; import FieldEditor from "$components/editor/FieldEditor.svelte"; import FormStatusMarker from "$components/editor/FormStatusMarker.svelte"; import NoscriptWarning from "$components/editor/NoscriptWarning.svelte"; import PronounsEditor from "$components/editor/PronounsEditor.svelte"; import { t } from "$lib/i18n"; import log from "$lib/log"; - import ephemeralState from "$lib/state.svelte"; import type { PageData } from "./$types"; type Props = { data: PageData }; @@ -20,15 +18,6 @@ let ok: { ok: boolean; error: RawApiError | null } | null = $state(null); let allPreferences = $derived(mergePreferences(data.user.custom_preferences)); - ephemeralState( - "user-names-pronouns", - () => ({ names, pronouns }), - (data) => { - names = data.names; - pronouns = data.pronouns; - }, - ); - const update = async () => { try { const resp = await apiRequest("PATCH", "/users/@me", { @@ -48,7 +37,6 @@ -