From b0b1d17e4ebc92fed539bd2dc820a03072c6825d Mon Sep 17 00:00:00 2001 From: Davide Di Pumpo Date: Wed, 3 Dec 2025 23:54:27 +0100 Subject: [PATCH 1/2] refactor: simplify metadata handling and improve field reactivity in OmegaForm components --- .../components/OmegaForm/OmegaFormStuff.ts | 31 +++++-------------- .../src/components/OmegaForm/OmegaInput.vue | 17 +++++++--- .../components/OmegaForm/OmegaTaggedUnion.vue | 1 - .../OmegaForm/OmegaTaggedUnionInternal.vue | 27 +++++----------- .../src/components/OmegaForm/useOmegaForm.ts | 19 ++---------- .../components/OmegaForm/useRegisterField.ts | 4 +-- 6 files changed, 31 insertions(+), 68 deletions(-) diff --git a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts index ba39036eb..2004a6d79 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts +++ b/packages/vue-components/src/components/OmegaForm/OmegaFormStuff.ts @@ -356,7 +356,6 @@ export const createMeta = ( if (property?._tag === "TypeLiteral" && "propertySignatures" in property) { return createMeta({ - parent, // Pass parent to maintain the key prefix for nested structures meta, propertySignatures: property.propertySignatures }) @@ -405,13 +404,7 @@ export const createMeta = ( property: p.type, meta: { required: isRequired, nullableOrUndefined } }) - // If parentMeta is a MetaRecord (nested structure from ExtendedClass), merge it - // Otherwise assign as single FieldMeta - if (parentMeta && typeof parentMeta === "object" && !("type" in parentMeta)) { - Object.assign(acc, parentMeta) - } else { - acc[key as NestedKeyOf] = parentMeta as FieldMeta - } + acc[key as NestedKeyOf] = parentMeta as FieldMeta } // Process each non-null type and merge their metadata @@ -708,17 +701,11 @@ const flattenMeta = (meta: MetaRecord | FieldMeta, parentKey: string = "") const metadataFromAst = ( schema: S.Schema -): { - meta: MetaRecord - defaultValues: Record - unionMeta: Record> - unionDefaultValues: Record> -} => { +): { meta: MetaRecord; defaultValues: Record; unionMeta: Record> } => { const ast = schema.ast const newMeta: MetaRecord = {} const defaultValues: Record = {} const unionMeta: Record> = {} - const unionDefaultValues: Record> = {} if (ast._tag === "Transformation" || ast._tag === "Refinement") { return metadataFromAst(S.make(ast.from)) @@ -763,9 +750,6 @@ const metadataFromAst = ( // Store per-tag metadata for reactive lookup if (tagValue) { unionMeta[tagValue] = flattenMeta(memberMeta) - // Create default values for this tag's schema - const memberSchema = S.make(memberType) - unionDefaultValues[tagValue] = defaultsValueFromSchema(memberSchema as any) } // Merge into result (for backward compatibility) @@ -782,7 +766,7 @@ const metadataFromAst = ( } as FieldMeta } - return { meta: newMeta, defaultValues, unionMeta, unionDefaultValues } + return { meta: newMeta, defaultValues, unionMeta } } } @@ -792,7 +776,7 @@ const metadataFromAst = ( }) if (Object.values(meta).every((value) => value && "type" in value)) { - return { meta: meta as MetaRecord, defaultValues, unionMeta, unionDefaultValues } + return { meta: meta as MetaRecord, defaultValues, unionMeta } } const flattenObject = ( @@ -812,7 +796,7 @@ const metadataFromAst = ( flattenObject(meta) } - return { meta: newMeta, defaultValues, unionMeta, unionDefaultValues } + return { meta: newMeta, defaultValues, unionMeta } } export const duplicateSchema = ( @@ -827,11 +811,10 @@ export const generateMetaFromSchema = ( schema: S.Schema meta: MetaRecord unionMeta: Record> - unionDefaultValues: Record> } => { - const { meta, unionDefaultValues, unionMeta } = metadataFromAst(schema) + const { meta, unionMeta } = metadataFromAst(schema) - return { schema, meta, unionMeta, unionDefaultValues } + return { schema, meta, unionMeta } } export const generateInputStandardSchemaFromFieldMeta = ( diff --git a/packages/vue-components/src/components/OmegaForm/OmegaInput.vue b/packages/vue-components/src/components/OmegaForm/OmegaInput.vue index c7b5fabb1..2bf17aa00 100644 --- a/packages/vue-components/src/components/OmegaForm/OmegaInput.vue +++ b/packages/vue-components/src/components/OmegaForm/OmegaInput.vue @@ -1,6 +1,7 @@