diff --git a/src/entrypoints/popup/pages/settings/Settings.svelte b/src/entrypoints/popup/pages/settings/Settings.svelte index e5ce340..282177e 100644 --- a/src/entrypoints/popup/pages/settings/Settings.svelte +++ b/src/entrypoints/popup/pages/settings/Settings.svelte @@ -7,6 +7,7 @@ import HostsTable from '@/entrypoints/popup/pages/settings/HostsTable.svelte'; import PerSiteDisables from '@/entrypoints/popup/pages/settings/PerSiteDisables.svelte'; import { isMobile } from '@/entrypoints/popup/state'; + import { PerDomainSettings } from '@/lib/settings'; /* types */ interface Props { @@ -16,6 +17,8 @@ /* states */ let { onSettingsCloseRequest }: Props = $props(); let searchQuery = $state(''); + + onDestroy(PerDomainSettings.cleanEmpty);
diff --git a/src/entrypoints/popup/pages/site-config/SiteConfig.svelte b/src/entrypoints/popup/pages/site-config/SiteConfig.svelte index 4d564f1..75a1dbe 100644 --- a/src/entrypoints/popup/pages/site-config/SiteConfig.svelte +++ b/src/entrypoints/popup/pages/site-config/SiteConfig.svelte @@ -5,6 +5,7 @@ import PerSiteHostsList from '@/entrypoints/popup/pages/site-config/PerSiteHostsList.svelte'; import { listenTabMessages, sendTabMessageToActiveTab, TabMessageType } from '@/lib/communication'; import { hosts, type Host } from '@/lib/host'; + import { PerDomainSettings } from '@/lib/settings'; /* types */ interface Props { @@ -35,7 +36,10 @@ currentDomain = new URL(url).hostname; }); - onDestroy(cancel); + onDestroy(() => { + cancel(); + PerDomainSettings.cleanEmpty(); + });
diff --git a/src/lib/settings.ts b/src/lib/settings.ts index f94923b..7e6c103 100644 --- a/src/lib/settings.ts +++ b/src/lib/settings.ts @@ -108,4 +108,12 @@ export class PerDomainSettings { delete val[domain]; return val; }); + + static cleanEmpty = () => + this.storage.update((val) => { + for (const [domain, settings] of Object.entries(val)) { + if (!settings.allDisabled && settings.disabledHostIds.length === 0) delete val[domain]; + } + return val; + }); }