From 66de31706cebcd688aaad27eff02ee72d5c2f98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 15 Apr 2025 01:32:48 +0200 Subject: [PATCH] Form work --- packages/extension-form/src/internal/Form.ts | 42 +++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/extension-form/src/internal/Form.ts b/packages/extension-form/src/internal/Form.ts index 209ac4f..ad621d8 100644 --- a/packages/extension-form/src/internal/Form.ts +++ b/packages/extension-form/src/internal/Form.ts @@ -1,6 +1,46 @@ -import type { Schema } from "effect" +import { Schema, SubscriptionRef } from "effect" export interface Form { readonly schema: Schema.Schema } + + +export type FormTree> = ( + S extends Schema.Struct ? StructFormField : + S extends ScalarSchema ? ScalarFormField : + S["Type"] +) + + +export interface FormField> { + readonly value: SubscriptionRef.SubscriptionRef +} + +export interface ScalarFormField extends FormField { + readonly _tag: "ScalarFormField" + readonly schema: S +} + +export interface StructFormField> extends FormField { + readonly _tag: "StructFormField" + readonly schema: S + readonly fields: { [K in keyof S["fields"]]: FormTree } +} + + +export type ScalarSchema = ( + | Schema.String + | Schema.Number +) + + +const MySchema = Schema.Struct({ + name: Schema.String, + values: Schema.Array(Schema.String), +}) + +type TestFormTree = FormTree +declare const testFormTree: TestFormTree + +testFormTree.fields.name.value