Simple library for creating forms using typescript, inspired by @angular/forms
npm i intelligent-forms
-
- Forms are fully typed.
- Compile-Time Error Checking.
- Accurate Form Validation.
-
- Designed to adapt to a wide range of use cases and environments.
- Provides a flexible API that can be easily integrated into various projects, regardless of their size or complexity.
- Allows to configure components to fit specific needs, making it suitable for a variety of applications.
-
- Structured to ensure easy updates, debugging and long-term maintenance.
- Follows best practices and coding standards, making it easier to read and understand forms code.
-
- Built with extensibility in mind, allowing developers to extend functionality without modifying the core library.
- Components are modular and reusable across different projects and applications.
import { formBuilder } from 'intelligent-forms'
// Creating a class that implements ControlValueAccessor<ControlValue>
export class InputComponent implements ControlValueAccessor<string> {
public node: HTMLInputElement
constructor() {
this.node = document.createElement('input')
this.node.addEventListener('input', () => {
/**
* Call the method on input event to mark linked control as `dirty`
* and change the value of the linked control
*/
this.onChange(this.node.value)
})
this.node.addEventListener('blur', () => {
// Call the method on blur event to mark linked control as `touched`
this.onTouch()
})
}
// Forms API overrides this method, so you don't need to define it
public onChange(value: string): void {}
// Forms API overrides this method, so you don't need to define it
public onTouch(): void {}
/**
* Forms API using this method to write the value of the linked
* control to our class
*/
public writeValue(value: string): void {
this.node.value = value
}
}
// Create the validator to validate the value a control
function capitalizeValidator(control) {
return (/^[A-Z].*$/.test(control.value) ? null : 'message to show to the user in case of invalid value')
}
const name = new InputComponent()
const surname = new InputComponent()
/**
* Create the FormGroup with FormControls and bind the classes that
* implements ControlValueAccessor via FormBuilder.control() method,
* passing the classes as the third parameter
*/
const form = formBuilder.group({
name: formBuilder.control('', [], name),
surname: formBuilder.control('', [capitalizeValidator], surname),
})
const root = document.getElementById('app')
root?.append(name.node, surname.node)
Base class from which FormControl and FormGroup are inherited
Field | Description | Returned values |
---|---|---|
value |
Current value of the control. | ControlValue |
touched |
True if the control is marked as touched. A control is marked touched once the user has triggered a blur event on it. | boolean |
valid |
A control is valid when its status is 'VALID' . |
boolean |
status |
The validation status of the control. Status = 'VALID' when control value passed all the validation connected to it. |
'VALID' 'INVALID' |
disabled |
Returns a boolean indicating whether the control is disabled or not. True if the control is disabled, false otherwise. | boolean |
dirty |
True if the control is dirty, false otherwise. The control is dirty if the user has changed the value in the UI. | boolean |
errors |
Returns the array of validation errors for this control. Every error in the array is a message returned by the specific validator function provided to the control. | ValidationError[] |
validators |
Returns the array of validators for this control. | Validator<ControlValue>[] |
on() |
Subscribes to an event emitted by the control and executes the provided function when the event is triggered. | void |
addValidators() |
Adds the given validators to the list of validators for this control. Validators is executed then value changes and used to check is the control is valid or not. | void |
removeValidators() |
Removes the given validators from the list of validators for the control. | void |
setValidators() |
Sets the validators for the control. | void |
clearValidators() |
Removes all validators from the list of validators for the control. | void |
disable() |
Sets the disabled state of the control to true and triggers the disabledchange event if the control was previously enabled and the emitEvent option is set to true . |
void |
enable() |
Sets the disabled state of the control to false and triggers the disabledchange event if the control was previously disabled and the emitEvent option is set to true . |
void |
markAsTouched() |
Sets the touched state of the control to true and triggers the touchedchange event if the control was previously untouched and the emitEvent option is set to true . |
void |
markAsUntouched() |
Sets the touched state of the control to false and triggers the touchedchange event if the control was previously touched and the emitEvent option is set to true . |
void |
markAsDirty() |
Sets the dirty state of the control to true and triggers the pristinechange event if the control was previously pristine and the emitEvent option is set to true . |
void |
markAsPristine() |
Sets the dirty state of the control to false and triggers the pristinechange event if the control was previously dirty and the emitEvent option is set to true . |
void |
Tracks the value, validation status, touched state and dirty state of a form control. Inherited from AbstractControl
Field | Description | Returned values |
---|---|---|
setValue() |
Sets the value of the control, updates its status and emits valuechange and statuschange . |
void |
reset() |
Resets the form control by setting its value to the initial value, marking it as untouched and pristine. | void |
register() |
Registers the class that implements the ControlValueAccessor interface. with the form control. Overrides the onTouch and onChange methods of the given class. |
void |
Tracks the value and validity state of a group of FormControl
instances. A FormGroup
aggregates the values of each child FormControl
into one object, with each control name as the key. It calculates its status by reducing the status values of its children. For example, if one of the controls in a group is invalid, the entire group becomes invalid. Inherited from AbstractControl
Field | Description | Returned values |
---|---|---|
controls |
Get the controls of the form group (Object there keys are names of the controls in the group context and values are controls themselves). | Controls |
setValue() |
It accepts an object with control names as keys, and matches the values to the correct controls in the group. | void |
reset() |
Resets the form group by resetting all child controls, marking it as untouched and pristine, and updating the value and status. | void |
get() |
Retrieves the control with the specified name from the form group. | AbstractControl |
getControlName() |
Retrieves the name of the control in the form group that corresponds to the given control. | keyof Controls |
contains() |
Checks if the FormGroup contains the specified control or control name. | boolean |
addControl() |
Adds a control to the form group, updates the value and emits the valuechange and statuschange events if specified. |
void |
removeControl() |
Removes a control from the FormGroup and updates the value and status and emits the valuechange and statuschange events if specified. |
void |
replaceControl() |
Replaces a control in the form group with a new control, updates the value and status and emits the valuechange and statuschange events if specified. |
void |
disable() |
Sets the disabled state of the formGroup and all its children to true and triggers the disabledchange event if the control was previously enabled and the emitEvent option is set to true . |
void |
enable() |
Sets the disabled state of the formGroup and all its children to false and triggers the disabledchange event if the control was previously disabled and the emitEvent option is set to true . |
void |
markAsTouched() |
Sets the touched state of the FormGroup and all its child controls to true and triggers the touchedchange event if the control was previously untouched and the emitEvent option is set to true . |
void |
markAsUntouched() |
Sets the touched state of the FormGroup and all its child controls to false and triggers the touchedchange event if the control was previously touched and the emitEvent option is set to true . |
void |
markAsDirty() |
Sets the dirty state of the FormGroup and all its child controls to true and triggers the pristinechange event if the control was previously pristine and the emitEvent option is set to true . |
void |
markAsPristine() |
Sets the dirty state of the FormGroup and all its child controls to false and triggers the pristinechange event if the control was previously dirty and the emitEvent option is set to true . |
void |
The helper class that provides the easier interface to create FormGroup and FormControl classes.
Field | Description | Returned values |
---|---|---|
group() |
Creates a new FormGroup from the object there keys are names of the controls and values are one of this possible structures:
|
FormGroup |
control() |
Creates a new FormControl instance with the given initial value and optional validators. If an element is provided, the control is registered to the element. |
FormControl |