Form work
Some checks failed
Lint / lint (push) Failing after 14s

This commit is contained in:
Julien Valverdé
2025-04-16 04:35:22 +02:00
parent fc4295894f
commit 1bfbeba934
2 changed files with 13 additions and 6 deletions

View File

@@ -13,7 +13,13 @@ export interface GenericFormField<S extends Schema.Schema.Any> extends FormField
export interface TupleFormField<S extends Schema.Tuple<readonly Schema.Schema.AnyNoContext[]>> extends FormField<S> {
readonly _tag: "TupleFormField"
readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree<S["elements"][K]> }
readonly elements: { [K in keyof S]: FormTree.FormTree<S["elements"][K]> }
}
export interface Tuple2FormField<S extends Schema.Tuple2<Schema.Schema.Any, Schema.Schema.Any>> extends FormField<S> {
readonly _tag: "Tuple2FormField"
// readonly elements: readonly [FormTree.FormTree<S["elements"][0]>, FormTree.FormTree<S["elements"][0]>]
readonly elements: [...{ [K in keyof S["elements"]]: S["elements"][K] }]
}
export interface ArrayFormField<S extends Schema.Array$<Schema.Schema.AnyNoContext>> extends FormField<S> {

View File

@@ -2,20 +2,21 @@ import { Schema } from "effect"
import type * as FormField from "./FormField.js"
export type FormTree<S extends Schema.Schema<any>> = (
export type FormTree<S extends Schema.Schema.Any> = (
S extends Schema.Tuple<any> ? FormField.TupleFormField<S> :
S extends Schema.Array$<any> ? FormField.ArrayFormField<S> :
S extends Schema.Struct<any> ? FormField.StructFormField<S> :
FormField.GenericFormField<S>
)
const MySchema = Schema.Struct({
const User = Schema.Struct({
name: Schema.String,
symbol: Schema.SymbolFromSelf,
roles: Schema.Tuple(Schema.Literal("Admin"), Schema.Literal("Moderator"), Schema.Literal("User")),
values: Schema.Array(Schema.String),
})
type TestFormTree = FormTree<typeof MySchema>
type TestFormTree = FormTree<typeof User>
declare const testFormTree: TestFormTree
testFormTree.fields.values.elements
testFormTree.fields.roles.elements