web/settings/advanced: add cache clearing, refactor data management

This commit is contained in:
wukko
2025-02-06 23:44:05 +06:00
parent cff47da742
commit 1f79bf6e52
8 changed files with 105 additions and 38 deletions

View File

@@ -0,0 +1,42 @@
<script lang="ts">
import { t } from "$lib/i18n/translations";
import { createDialog } from "$lib/state/dialogs";
import { clearQueue } from "$lib/state/queen-bee/queue";
import { clearCacheStorage, clearFileStorage } from "$lib/storage";
import IconFileShredder from "@tabler/icons-svelte/IconFileShredder.svelte";
import DataSettingsButton from "$components/settings/DataSettingsButton.svelte";
const clearDialog = () => {
createDialog({
id: "wipe-confirm",
type: "small",
icon: "warn-red",
title: $t("dialog.clear_cache.title"),
bodyText: $t("dialog.clear_cache.body"),
buttons: [
{
text: $t("button.cancel"),
main: false,
action: () => {},
},
{
text: $t("button.clear"),
color: "red",
main: true,
timeout: 2000,
action: async () => {
clearQueue();
await clearFileStorage();
await clearCacheStorage();
},
},
],
});
};
</script>
<DataSettingsButton id="clear-cache" click={clearDialog} danger>
<IconFileShredder />
{$t("button.clear_cache")}
</DataSettingsButton>

View File

@@ -0,0 +1,32 @@
<script lang="ts">
export let id: string;
export let click: () => void;
export let danger = false;
</script>
<button {id} class="button data-button" class:danger on:click={click}>
<slot></slot>
</button>
<style>
.data-button {
padding: 8px 14px;
width: max-content;
text-align: start;
}
.data-button :global(svg) {
stroke-width: 1.8px;
height: 21px;
width: 21px;
}
.data-button.danger {
background-color: var(--red);
color: var(--white);
}
.data-button.danger:hover {
background-color: var(--dark-red);
}
</style>

View File

@@ -5,7 +5,7 @@
import { validateSettings } from "$lib/settings/validate";
import { storedSettings, updateSetting, loadFromString } from "$lib/state/settings";
import ActionButton from "$components/buttons/ActionButton.svelte";
import DataSettingsButton from "$components/settings/DataSettingsButton.svelte";
import ResetSettingsButton from "$components/settings/ResetSettingsButton.svelte";
import IconFileExport from "@tabler/icons-svelte/IconFileExport.svelte";
@@ -95,16 +95,16 @@
</script>
<div class="button-row" id="settings-data-transfer">
<ActionButton id="import-settings" click={importSettings}>
<DataSettingsButton id="import-settings" click={importSettings}>
<IconFileImport />
{$t("button.import")}
</ActionButton>
</DataSettingsButton>
{#if $storedSettings.schemaVersion}
<ActionButton id="export-settings" click={exportSettings}>
<DataSettingsButton id="export-settings" click={exportSettings}>
<IconFileExport />
{$t("button.export")}
</ActionButton>
</DataSettingsButton>
{/if}
{#if $storedSettings.schemaVersion}

View File

@@ -3,15 +3,16 @@
import { createDialog } from "$lib/state/dialogs";
import { resetSettings } from "$lib/state/settings";
import IconTrash from "@tabler/icons-svelte/IconTrash.svelte";
import IconRestore from "@tabler/icons-svelte/IconRestore.svelte";
import DataSettingsButton from "$components/settings/DataSettingsButton.svelte";
const resetDialog = () => {
createDialog({
id: "wipe-confirm",
type: "small",
icon: "warn-red",
title: $t("dialog.reset.title"),
bodyText: $t("dialog.reset.body"),
title: $t("dialog.reset_settings.title"),
bodyText: $t("dialog.reset_settings.body"),
buttons: [
{
text: $t("button.cancel"),
@@ -30,26 +31,7 @@
};
</script>
<button id="setting-button-reset" class="button" on:click={resetDialog}>
<IconTrash />
<DataSettingsButton id="reset-settings" click={resetDialog} danger>
<IconRestore />
{$t("button.reset")}
</button>
<style>
#setting-button-reset {
background-color: var(--red);
color: var(--white);
width: max-content;
text-align: start;
}
#setting-button-reset:hover {
background-color: var(--dark-red);
}
#setting-button-reset :global(svg) {
stroke-width: 2px;
height: 24px;
width: 24px;
}
</style>
</DataSettingsButton>