npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@voxtecnologia/angular-forms

v2.1.6

Published

A Simple Angular Forms Generator

Downloads

77

Readme

AngularForms

A Simple Form Generator for Angular.

Table of Contents

Requirements

  • @angular/common: 4.0.0 or higher,
  • @angular/core: 4.0.0 or higher,
  • @angular/forms: 4.0.0 or higher,
  • @fagnerlima/ng-mask: 2.2.1 or higher,
  • @ngx-translate/core: 7.0.0 or higher,
  • rxjs: 5.4.2 or higher.

Usage

  1. Install AngularForms using npm:
npm i @voxtecnologia/angular-forms
  1. Import the styles.css:
node_modules/@voxtecnologia/angular-forms/assets/css/styles.css
  1. Import the AngularFormsModule into Module class.
import { AngularFormsModule } from '@voxtecnologia/angular-forms';

@NgModule({
  imports: [
    //...
    AngularFormsModule
  ],
  // ...
})
export class MyModule { }
  1. Insert the AngularFormsComponent into template.
<rb-angular-forms [groups]="customForm"></rb-angular-forms>

The customForm attribute represents the JSON coming from API. For example:

[
  {
    "code": "G-01",
    "description": "Fieldset Group",
    "type": "group",
    "questions": [
      {
        "name": "Q-0101",
        "description": "Checkbox Question 0101",
        "type": "checkbox",
        "defaultOption": "false",
        "validations": [
          { "type": "pattern", "message": "Required field.", "value": "true" }
        ]
      },
      {
        "name": "Q-0102",
        "description": "Radio Question 0102",
        "type": "radio",
        "options": ["Option 1", "Option 2"],
        "defaultOption": "Option 1",
        "validations": [
          { "type": "required", "message": "Required field." }
        ]
      },
      {
        "name": "Q-0103",
        "description": "Select Question 0103",
        "type": "select",
        "options": ["Option 1", "Option 2"],
        "editableOption": "Option 2",
        "placeholder": "Select",
        "validations": [
          { "type": "required", "message": "Required field." }
        ]
      },
      {
        "name": "Q-0104",
        "description": "Text Question 0104",
        "type": "text",
        "placeholder": "Text Question 0104",
        "validations": [
          { "type": "required", "message": "Required field." },
          { "type": "minlength", "message": "Min Length: 3", "value": 3 },
          { "type": "maxlength", "message": "Max Length: 10", "value": 10 }
        ]
      },
      {
        "name": "Q-0105",
        "description": "Text Question 0105",
        "type": "text",
        "placeholder": "Text Question 0105",
        "validations": [
          { "type": "required", "message": "Required field." },
          { "type": "pattern", "message": "Format: 00000-000", "value": "^\\d{5}-\\d{3}$" }
        ],
        "mask": "00000-000"
      },
      {
        "name": "Q-0106",
        "description": "TextArea Question 0106",
        "type": "textarea",
        "placeholder": "TextArea Question 0106",
        "validations": [
          { "type": "required", "message": "Required field." }
        ],
        "dependencies": [
          { "code": "Q-0103", "criteria": "equals", "expectedAnswer": "Option 1" }
        ]
      }
    ]
  },
  {
    "code": "G-02",
    "description": "DataTable Group",
    "type": "datatable",
    "validations": [
      { "type": "required", "message": "Min number of registers: 1." },
      { "type": "minlength", "message": "Min number of registers: 1.", "value": 1 },
      { "type": "maxlength", "message": "Max number of registers: 3.", "value": 3 }
    ],
    "questions": [
      [
        {
          "name": "Q-0201",
          "description": "Select Question 0201",
          "type": "select",
          "validations": [
            { "type": "required", "message": "Required field." }
          ],
          "options": ["Option 1", "Option 2", "Option 3"],
          "placeholder": "Select"
        },
        {
          "name": "Q-0202",
          "description": "Text Question 0202",
          "type": "text",
          "validations": [
            { "type": "required", "message": "Required field." }
          ],
          "placeholder": "Text Question 0202"
        }
      ],
      [
        {
          "name": "Q-0201",
          "description": "Select Question 0201",
          "type": "select",
          "validations": [
            { "type": "required", "message": "Required field." }
          ],
          "options": ["Option 1", "Option 2", "Option 3"],
          "placeholder": "Select",
          "answer": "Option 2"
        },
        {
          "name": "Q-0202",
          "description": "Text Question 0202",
          "type": "text",
          "validations": [
            { "type": "required", "message": "Required field." }
          ],
          "placeholder": "Text Question 0202",
          "answer": "Answer 0202"
        }
      ]
    ]
  }
]

screen

  1. Get form values by adding a local variable to the component and calling the getForm() method. For example:
<rb-angular-forms #angularForms [groups]="customForm"></rb-angular-forms>
<button (click)="print(angularForms.getForm())">Print Form</button>
export class MyComponent {

  print(value: any) {
    console.log(value);
  }
}

The output of getForm() is an object that contains:

  • valid: Informs if the forms is valid, that is, if it agrees with all the validations.
  • value: An object that contains the groups of questions with their respective answers. Groups and questions are represented by their respective code; and each question has its answer.

Example output:

{
  valid: false,
  value: {
    "G-01": [
      {
        "Q-101": "Option 1",
        "Q-102": "123"
      }
    ],
    "G-02": {
      "Q-201": "Option 1",
      "Q-202": "Option 2",
      "Q-203": null,
      "Q-204": null
    }
  }
}

AngularFormsComponent's public methods and properties:

| Method | Function | |-|-| | isValid() | Returns the status of form. | | isPristine() | Returns if the user has not yet changed some value in the form. | | isDirty() | Returns if the user has changed some value in the form. | | getAnswersGroups() | Returns only the answers grouped in yours respective Groups. | | getAnswers() | Returns only the answers of simple Questions and of DataTables (that is considered a Question). | | getForm() | Returns an object with two attributes: valid (return of isValid method) and value (return of getAnswersGroups method. | | submit() | Send the form, enabling the validation of all questions. | | formGroup | FormGroup's instance of the ReactiveForms. | | status | Returns the form's status: *LOADING, READY, ERROR or null. | | getGroupByCode(code) | Returns a Group according with code. |

  1. The AngularFormsComponent contains two output events:

| Output | Function | |-|-| | ready | When the form's build is finished. | | error | When occurs any error in form's build (throws the error object). |

<rb-angular-forms #angularForms [groups]="customForm" (ready)="onReady()" (error)="onError($event)"></rb-angular-forms>
  1. If you want only to show the answers from JSON, use the readOnly input with true value (your default value is false).
<rb-angular-forms #angularForms [groups]="customForm" [readOnly]="true"></rb-angular-forms>

screen

  1. For you config the language to be used by AngularForms, use the lang input. There are two langs available: en-US (default) and pt-BR.
<rb-angular-forms #angularForms [groups]="customForm" lang="pt-BR"></rb-angular-forms>

Groups

The Group represents a grouping of questions, which can be of two types: Fieldset and DataTable.

The Group contains the public method getQuestionByName, that returns a question according with name.

Fieldset

Fieldset is a grouping of questions that represents a simple fieldset of HTML. The value of your type is "group".

{
  "code": "G-01",
  "description": "Fieldset Group",
  "type": "group",
  "questions": [
    {
      "name": "Q-0101",
      "description": "Checkbox Question 0101",
      "type": "checkbox",
      "validations": []
    },
    {
      "name": "Q-0102",
      "description": "Select Question 0102",
      "type": "select",
      "options": ["Option 1", "Option 2"],
      "validations": []
    }
  ]
}

DataTable

DataTable is a grouping of questions that represents a data table, where you add many answers.

{
  "code": "G-01",
  "description": "DataTable Group",
  "type": "datatable",
  "questions": [
    [
      {
        "name": "Q-0101",
        "description": "Checkbox Question 0101",
        "type": "checkbox",
        "validations": []
      },
      {
        "name": "Q-0102",
        "description": "Select Question 0102",
        "type": "select",
        "options": ["Option 1", "Option 2"],
        "validations": []
      }
    ]
  ],
  "validations": []
}

Questions

Question represents a simple question, which can be of five types:

  • checkbox;
  • radio;
  • select;
  • text;
  • textarea.

The Question contains the public setter method description, that permits alter label of questions.

Checkbox

Checkbox represents a checkbox input from HTML.

{
  "name": "Q-01",
  "description": "Checkbox Question",
  "dependencies": [],
  "type": "checkbox",
  "answer": null,
  "validations": [],
  "disabled": false,
  "defaultOption": "false"
}

Radio

Radio represents a radio input from HTML.

{
  "name": "Q-01",
  "description": "Radio Question",
  "dependencies": [],
  "type": "radio",
  "answer": null,
  "validations": [],
  "disabled": false,
  "options": ["Option 1", "Option 2"],
  "defaultOption": null
}

Select

Select represents a select input from HTML.

{
  "name": "Q-01",
  "description": "Select Question",
  "dependencies": [],
  "type": "select",
  "answer": null,
  "validations": [],
  "disabled": false,
  "options": ["Option 1", "Option 2"],
  "defaultOption": null,
  "editableOption": "Option 2",
  "placeholder": "Select an option"
}

For the Radio and Select Questions, the option attribute can be a string array or an object array (Option Interface).

{
  // ...
  "options": [
    { "value": "op1", "description": "Option 1" },
    { "value": "op2", "description": "Option 2" }
  ]
  // ...
}

Text

Text represents a text input from HTML.

{
  "name": "Q-01",
  "description": "Text Question",
  "dependencies": [],
  "type": "text",
  "answer": null,
  "validations": [],
  "disabled": false,
  "mask": null,
  "placeholder": null
}

Masks

Mask is an attribute of Text Question that uses the patterns of the NgMask library.

{
  "name": "Q-01",
  "description": "Text Question",
  "dependencies": [],
  "type": "text",
  "answer": null,
  "validations": [],
  "mask": "integer(6)",
  "placeholder": null
}

Read more in https://fagnerlima.github.io/ng-mask/.

TextArea

TextArea represents a text input from HTML.

{
  "name": "Q-01",
  "description": "Text Question",
  "dependencies": [],
  "type": "textarea",
  "answer": null,
  "validations": [],
  "disabled": false,
  "placeholder": null
}

Validations

Validations can be used in Question and DataTable, which can be of seven types:

  • email;
  • max;
  • min;
  • maxlength;
  • minlength;
  • pattern;
  • required.

Email

E-mail validation.

{
  "type": "email",
  "message": "Email field."
}

Max

Max value validation for numbers.

{
  "type": "max",
  "message": "Max value: 100.",
  "value": 100
}

Min

Min value validation for numbers.

{
  "type": "min",
  "message": "Min value: 10.",
  "value": 10
}

MaxLength

Max length validation.

{
  "type": "maxlength",
  "message": "Max length: 12.",
  "value": 12
}

MinLength

Min length validation.

{
  "type": "minlength",
  "message": "Min length: 6.",
  "value": 6
}

Pattern

Regular expression validation.

{
  "type": "pattern",
  "message": "Pattern: 00000-000.",
  "value": "^\\d{5}-\\d{3}$"
}

Required

Obligatory field validation. The requiredTrue field is used for checkbox validation.

{
  "type": "required",
  "message": "Required field.",
  "requiredTrue": false
}

Dependencies

Dependencies are Questions that determine if a Question should be shown or no. The criterias can be of four types:

  • equals;
  • lessthan;
  • greaterthan;
  • notequals.
{
  "name": "Q-0106",
  "description": "Question TextArea 0106",
  "type": "textarea",
  "placeholder": "Question TextArea 0106",
  "validations": [
    { "type": "required", "message": "Required field." }
  ],
  "dependencies": [
    { "code": "Q-0103", "criteria": "equals", "expectedAnswer": "Option 1" },
    { "code": "Q-0104", "criteria": "greaterthan", "expectedAnswer": "10" }
  ]
}