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
+8 -1
View File
@@ -435,15 +435,22 @@ export function defaultSchemaParams<P>(
return out;
}
/**
* Пересчитывает дефолты от нового исходника, сохраняя значения пользователя.
* Поля из touched (изменённые вручную) не перезаписываются даже если у них
* source-дефолт — иначе загрузка нового файла сносила бы настроенные размеры.
*/
export function applySourceDefaults<P>(
schema: ToolSchema<P>,
values: Record<string, unknown>,
context: SchemaContext,
touched?: ReadonlySet<string>,
): Record<keyof P, unknown> {
const defaults = defaultSchemaParams(schema, context);
for (const key of Object.keys(schema.fields) as (keyof P)[]) {
const spec = schema.fields[key].spec;
if (spec.kind === "dimension" && spec.defaultFromSource) continue;
const fromSource = spec.kind === "dimension" && spec.defaultFromSource;
if (fromSource && !touched?.has(key as string)) continue;
if (Object.prototype.hasOwnProperty.call(values, key)) {
defaults[key] = values[key as string];
}