Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
Handle disabled localStorage gracefully
Merged did:key:z6MkkfM3...sVz5 opened 1 year ago

Instead of failing with a cryptic error in the dev console, this commit allows the app to keep working and skips the localStorage persistance if no localStorage is available.

check check-visual check-unit-test check-http-client-unit-test check-radicle-httpd check-e2e check-build check-http

👉 Preview 👉 Workflow runs 👉 Branch on GitHub

3 files changed +31 -9 514359e1 a73c5490
modified src/lib/appearance.ts
@@ -20,7 +20,7 @@ export const codeFonts: {
];

function loadCodeFont(): CodeFont {
-
  const storedCodeFont = window.localStorage.getItem("codefont");
+
  const storedCodeFont = localStorage ? localStorage.getItem("codefont") : null;

  if (storedCodeFont === null) {
    return "jetbrains";
@@ -31,7 +31,7 @@ function loadCodeFont(): CodeFont {

function loadTheme(): Theme {
  const { matches } = window.matchMedia("(prefers-color-scheme: dark)");
-
  const storedTheme = window.localStorage.getItem("theme");
+
  const storedTheme = localStorage ? localStorage.getItem("theme") : null;

  if (storedTheme === null) {
    return matches ? "dark" : "light";
@@ -42,10 +42,22 @@ function loadTheme(): Theme {

export function storeTheme(newTheme: Theme): void {
  theme.set(newTheme);
-
  window.localStorage.setItem("theme", newTheme);
+
  if (localStorage) {
+
    localStorage.setItem("theme", newTheme);
+
  } else {
+
    console.warn(
+
      "localStorage isn't available, not able to persist the selected theme without it.",
+
    );
+
  }
}

export function storeCodeFont(newCodeFont: CodeFont): void {
  codeFont.set(newCodeFont);
-
  window.localStorage.setItem("codefont", newCodeFont);
+
  if (localStorage) {
+
    localStorage.setItem("codefont", newCodeFont);
+
  } else {
+
    console.warn(
+
      "localStorage isn't available, not able to persist the selected code font without it.",
+
    );
+
  }
}
modified src/lib/seeds.ts
@@ -17,11 +17,13 @@ export const configuredPreferredSeeds = storedWritable<BaseUrl[]>(
  "configuredPreferredSeeds",
  array(preferredSeedSchema),
  [],
+
  !localStorage,
);
const storedPreferredSeed = storedWritable<BaseUrl | undefined>(
  "preferredSeed",
  preferredSeedSchema,
  undefined,
+
  !localStorage,
);

export function addSeedsToConfiguredSeeds(newSeeds: BaseUrl[]) {
modified src/views/projects/Sidebar.svelte
@@ -21,14 +21,22 @@
  let expanded = collapsedOnly ? false : loadSidebarState();

  export function storeSidebarState(expanded: boolean): void {
-
    window.localStorage.setItem(
-
      SIDEBAR_STATE_KEY,
-
      expanded ? "expanded" : "collapsed",
-
    );
+
    if (localStorage) {
+
      localStorage.setItem(
+
        SIDEBAR_STATE_KEY,
+
        expanded ? "expanded" : "collapsed",
+
      );
+
    } else {
+
      console.warn(
+
        "localStorage isn't available, not able to persist the sidebar state without it.",
+
      );
+
    }
  }

  function loadSidebarState(): boolean {
-
    const storedSidebarState = window.localStorage.getItem(SIDEBAR_STATE_KEY);
+
    const storedSidebarState = localStorage
+
      ? localStorage.getItem(SIDEBAR_STATE_KEY)
+
      : null;

    if (storedSidebarState === null) {
      return true;