react-signal-forms
Version:
A forms library focusing on performance and modular extensibility.
82 lines • 3.38 kB
JavaScript
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