2.1.2 • Published 6 years ago

ngw-generic-forms v2.1.2

Weekly downloads
27
License
MIT
Repository
github
Last release
6 years ago

ngw-generic-forms

Forms that can be generated from a json object

Install with npm install --save 'ngw-generic-forms' or yarn add ngw-generic-form

What is ngw-generic-forms module

Use it if:

  • You need forms.
  • You need them quick.
  • All the forms you have follow more or less the same structure.

Here is a example of how you can use it:

 <generic-form #formVar [config]="myConfig" (submit)="doSomethingwithSubmit(formValues)"></generic-form>
 ...
 <ng-template #randomTemplate let-groupVar="group" let-config="config">
 <p>For some crazy reason I want this in the middle of my form</p>
 <div [formGroup]="groupVar">
 <input type="text" (change)="fileInputChanged()" [formControlName]="config.name" >
</div>
</ng-template>

In your component code prepare a config object that does the magic for you:

 this.myConfig = {
            type: 'container',
            cssClass: 'parent-container',
            errorMap: this.errorMessages,
            children: [
                {
                    type: 'input',
                    name: 'name',
                    inputType: 'text',
                    placeholder: 'Full name',
                    cssClass: 'input-name',
                    validators: [Validators.compose([
                        Validators.required,
                        ValidationUtil.userNameValidator,
                    ])]
                },
                {
                    type: 'template-field',
                    name: 'hello',
                    template: this.template
                },
                {
                    type: 'select',
                    name: 'food',
                    cssClass: 'select-food',
                    options: ['Pizza', 'Hot Dogs', 'Knakworstje', 'Coffee'],
                    placeholder: 'Favourite food'
                },
                {
                    type: 'container',
                    cssClass: 'firstChild',
                    children: [
                        {
                            type: 'input',
                            name: 'age',
                            placeholder: 'Age',
                            cssClass: 'age-holder'
                        }
                    ]
                }
            ]
        };

You can nest it any levels deep, to go a level deeper add a object of type container that will create a new container DOM node.

ParametersAllowed values and interpretation
typeDescribe the type of form element needed Allowed types: container,input,select,template
namename of the control in the form. (Not applicable for containers and template types)
errorMapKey value pairs. With keys as the names of the controls in the form, values as objects containing possible error keys and the error message to be displayed when that validation error occurs. (Only applicable on outermost container)
childrenOnly applicable on containers, list of all form elements in this container. (A container can also be a child of other containers)
inputTypeUsed with type: input to specify the input types. (Do not use input type file)
cssClassThe cssClass to be applied on this element/container
validatorsOnly applicable on form components, the validators to be applied to this form element.
templateprovide a template reference to inject into the form (use with type: template, template-field
optionsUsed along with type select to specify the options

In your component file you can use the template reference captured earlier to access other convineant apis:

    @ViewChild('formVar')
    private formVar;

In afterViewInit we can then use different methods:

  • this.formVar.setError(fieldName,error): set Erros on a specific field.
  • this.formVar.setCustomError(fieldName,error): set only customError, this is removed as soon as user changes the field.
  • this.formVar.valid: validity of the form.
  • this.formVar.value: get all the current values of the form
2.1.2

6 years ago

2.1.1

6 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.13

7 years ago

1.0.12

7 years ago

1.0.11

7 years ago

1.0.10

7 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago