UNPKG

react-signal-forms

Version:

A forms library focusing on performance and modular extensibility.

82 lines 3.38 kB
import { signalForm } from "@/index"; import { required, validIf } from "@/rules"; import { describe, expect, expectTypeOf, test } from "vitest"; describe("Test field builder and collection types", () => { test("Test field builder and collection types.", () => { const fields = signalForm().withFields((field) => ({ ...field("hiddenField").asHidden(), ...field("textField", "My text field"), ...field("textField", { label: "My text field", defaultValue: "Default value", }), ...field("numberField", "My number field"), ...field("numberField", { label: "My number field", defaultValue: 1, }), ...field("selectField", "My select field").as({ options: [], }), ...field("selectField").as({ label: "My select field", options: [], }), ...field("selectField").as({ label: "My select field", options: [], rules: [ required(), validIf((context) => { expectTypeOf(context).toEqualTypeOf(); expectTypeOf(context.value).toBeString(); expectTypeOf(context.form).toEqualTypeOf(); return { validIf: true, errorMessage: "", }; }), ], }), })); console.log("fields:", fields); expect(fields.textField.name).toBe("textField"); expect(fields.selectField.name).toBe("selectField"); expectTypeOf(fields.selectField).toMatchTypeOf(); expectTypeOf(fields.selectField.rules).toEqualTypeOf(); }); test("Test array forms", () => { const fields = signalForm().withFields((field) => ({ ...field("arrayField").asArray({ // Field specs in array form. fields: (arrayField) => ({ ...arrayField("textFieldInArray", "Text field in array", { defaultValue: "Default value", rules: [required()], }), ...arrayField("booleanFieldInArray", "Boolean field in array"), }), // Default value of array. defaultValue: [ { textFieldInArray: "Item 1", booleanFieldInArray: true, }, { textFieldInArray: "Item 2", booleanFieldInArray: false, }, ], // Rules on array form. rules: [required()], }), })); console.log("fields:", fields); console.log("arrayField:", fields.arrayField); expectTypeOf(fields.arrayField).toEqualTypeOf(); expectTypeOf(fields.arrayField.fields).toEqualTypeOf(); expectTypeOf(fields.arrayField.fields.textFieldInArray).toEqualTypeOf(); expectTypeOf(fields.arrayField.fields.textFieldInArray.rules).toEqualTypeOf(); }); }); //# sourceMappingURL=fields.test-d.js.map