From 7aef7ae796a635ddc1240f535aea6e0078ebaed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 17 Apr 2025 01:09:01 +0200 Subject: [PATCH] Form work --- .../extension-form/src/internal/FormField.ts | 17 ++++++++++++----- .../extension-form/src/internal/FormTree.ts | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/extension-form/src/internal/FormField.ts b/packages/extension-form/src/internal/FormField.ts index 21447a0..fce5fa2 100644 --- a/packages/extension-form/src/internal/FormField.ts +++ b/packages/extension-form/src/internal/FormField.ts @@ -11,15 +11,22 @@ export interface GenericFormField extends FormField readonly value: S["Type"] } -export interface TupleFormField> extends FormField { +export interface TupleFormField> extends FormField { readonly _tag: "TupleFormField" - readonly elements: { [K in keyof S]: FormTree.FormTree } + readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree< + S["elements"][K] extends Schema.Schema.Any + ? S["elements"][K] + : never + > } } export interface Tuple2FormField> extends FormField { readonly _tag: "Tuple2FormField" - // readonly elements: readonly [FormTree.FormTree, FormTree.FormTree] - readonly elements: [...{ [K in keyof S["elements"]]: S["elements"][K] }] + readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree< + S["elements"][K] extends Schema.Schema.Any + ? S["elements"][K] + : never + > } } export interface ArrayFormField> extends FormField { @@ -33,5 +40,5 @@ export interface StructFormField> extends FormField { readonly _tag: "StructFormField" - readonly fields: { [K in keyof S["fields"]]: FormTree.FormTree } + readonly fields: { readonly [K in keyof S["fields"]]: FormTree.FormTree } } diff --git a/packages/extension-form/src/internal/FormTree.ts b/packages/extension-form/src/internal/FormTree.ts index 9178055..e33ef0b 100644 --- a/packages/extension-form/src/internal/FormTree.ts +++ b/packages/extension-form/src/internal/FormTree.ts @@ -4,6 +4,7 @@ import type * as FormField from "./FormField.js" export type FormTree = ( S extends Schema.Tuple ? FormField.TupleFormField : + S extends Schema.Tuple2 ? FormField.Tuple2FormField : S extends Schema.Array$ ? FormField.ArrayFormField : S extends Schema.Struct ? FormField.StructFormField : FormField.GenericFormField