feat: touched fields dont reset on change source image

This commit is contained in:
2026-10-04 15:51:47 +05:00
parent 08608b878a
commit 5743b9fb3f
5 changed files with 46 additions and 8 deletions
@@ -20,6 +20,7 @@
type ToolSchema,
} from "$lib/registry-schema";
import { downloadZip } from "$lib/zip";
import { SvelteSet } from "svelte/reactivity";
interface Props {
page: Page;
@@ -38,6 +39,9 @@
const resultKind = $derived(tool.result ?? "image");
let values = $state<Record<string, unknown>>({});
// Поля, изменённые пользователем: при загрузке нового файла им не даём
// перезаписаться source-дефолтами. Reset снимает пометку.
const touched = new SvelteSet<string>();
let source = $state<PixelImage | null>(null);
let result = $state<PixelImage | null>(null);
let fileResult = $state<FileResult | null>(null);
@@ -67,10 +71,12 @@
}
function setValue(id: string, value: unknown) {
touched.add(id);
values = { ...values, [id]: value };
}
function reset() {
touched.clear();
values = schema
? defaultSchemaParams(schema, { source: source ?? undefined })
: {};
@@ -87,7 +93,12 @@
const decoded = await decodeFile(file);
source = decoded;
if (schema) {
values = applySourceDefaults(schema, values, { source: decoded });
values = applySourceDefaults(
schema,
values,
{ source: decoded },
touched,
);
}
} catch (e) {
displayError = toDisplayError(e);