8.22.0 • Published 8 months ago

@covalent/dynamic-forms v8.22.0

Weekly downloads
967
License
MIT
Repository
github
Last release
8 months ago

td-dynamic-forms

API Summary

Inputs

  • elements: ITdDynamicElementConfig[]
    • JS Object that will render the elements depending on its config.
    • name property is required.

Properties (Read only)

Methods

  • refresh: function
    • Refreshes the form and rerenders all validator/element modifications

Setup

Import the CovalentDynamicFormsModule in your NgModule:

import { CovalentDynamicFormsModule } from '@covalent/dynamic-forms';
@NgModule({
  imports: [
    CovalentDynamicFormsModule,
    ...
  ],
  ...
})
export class MyModule {}

Usage

td-dynamic-forms element generates a form dynamically

Pass an array of javascript objects that implement ITdDynamicElementConfig with the information to be rendered to the elements attribute.

// Property values to be set in custom component
export interface ITdDynamicElementCustomConfig {
  [name: string]: any;
}

export interface ITdDynamicElementConfig {
  label?: string;
  name: string;
  hint?: string;
  type: TdDynamicType | TdDynamicElement | Type<any>;
  required = false;
  disabled?: boolean;
  min?: any;
  max?: any;
  minLength?: any;
  maxLength?: any;
  selections?: string[] | { value: any; label: string }[];
  multiple?: boolean;
  default?: any;
  flex?: number;
  validators?: ITdDynamicElementValidator[];
  customConfig?: ITdDynamicElementCustomConfig;
}

NOTE: For custom types, you need to implement a [control] property and use it in your underlying element.

Example for HTML usage:

<td-dynamic-forms [elements]="elements">
  <ng-template let-element ngFor [ngForOf]="elements">
    <ng-template let-control="control" [tdDynamicFormsError]="element.name">
      <span *ngIf="control.touched || !control.pristine">
        <span *ngIf="control.hasError('required')">Required</span>
        <span *ngIf="control.hasError('min')">Min value: {{element.min}}</span>
        <span *ngIf="control.hasError('max')">Max value: {{element.max}}</span>
        <span *ngIf="control.hasError('minlength')"
          >Min length value: {{element.minLength}}</span
        >
        <span *ngIf="control.hasError('maxlength')"
          >Max length value: {{element.minLength}}</span
        >
      </span>
    </ng-template>
  </ng-template>
</td-dynamic-forms>
import { ITdDynamicElementConfig, TdDynamicElement, TdDynamicType } from '@covalent/dynamic-forms';
...
/* CUSTOM TYPE */
  template: `<label>{{label}}</label>
              <input [formControl]="control">
              <div *ngIf="errorMessageTemplate && control.errors"
                  class="tc-red-600"
                  [style.font-size.%]="'70'">
                <ng-template
                  [ngTemplateOutlet]="errorMessageTemplate"
                  [ngTemplateOutletContext]="{control: control, errors: control.errors}">
                </ng-template>
              </div>`,
})
export class DynamicCustomComponent {
  /* control property needed to properly bind the underlying element */
  control: FormControl;

  /* map any of the properties you passed in the config */
  label: string;

  /* map the error message template and use it anywhere you need to */
  errorMessageTemplate: TemplateRef<any>;
}
...
})
export class Demo {
  elements: ITdDynamicElementConfig[] = [{
    name: 'input',
    hint: 'hint',
    type: TdDynamicElement.Input,
    required: true,
  }, {
    name: 'textLength',
    label: 'Text Length',
    type: TdDynamicElement.Input,
    minLength: 4,
    maxLength: 12,
  }, {
    name: 'number',
    type: TdDynamicType.Number,
    min: 10,
    max: 80,
  }, {
    name: 'slider',
    label: 'Label',
    type: TdDynamicElement.Slider,
    required: true,
  }, {
    name: 'boolean',
    type: TdDynamicType.Boolean,
    default: false,
    disabled: true,
  }, {
    name: 'select',
    type: TdDynamicElement.Select,
    required: true,
    multiple: false,
    selections: ['A','B','C'],
    default: 'A',
  }, {
    name: 'file-input',
    label: 'Label',
    type: TdDynamicElement.FileInput,
  }, {
    name: 'datepicker',
    label: 'Date',
    type: TdDynamicElement.Datepicker,
  }, {
    name: 'custom',
    label: 'Custom',
    type: DynamicCustomComponent,
    required: true,
  }];
}

Note: To use the datepicker you need to provide an implementation of DateAdapter.. click here for more information on the material datepicker(https://material.angular.io/components/datepicker/overview#choosing-a-date-implementation-and-date-format-settings)

Running unit tests

Run nx test angular-dynamic-forms to execute the unit tests.

8.22.0

8 months ago

8.21.2

8 months ago

8.21.1

9 months ago

8.21.0

9 months ago

8.20.2

10 months ago

8.20.3

10 months ago

8.20.4

10 months ago

8.20.5

10 months ago

8.20.6

10 months ago

8.20.7

10 months ago

8.20.8

9 months ago

8.19.1

10 months ago

8.19.0

10 months ago

8.12.2

1 year ago

8.12.3

1 year ago

8.13.0

1 year ago

8.14.0

1 year ago

8.14.2

11 months ago

8.14.1

1 year ago

8.14.4

11 months ago

8.14.3

11 months ago

8.15.0-beta.13

11 months ago

8.15.0-beta.12

11 months ago

8.15.0-beta.11

11 months ago

8.15.0-beta.10

11 months ago

8.15.0

11 months ago

8.15.0-beta.17

11 months ago

8.15.0-beta.16

11 months ago

8.15.0-beta.15

11 months ago

8.15.0-beta.14

11 months ago

4.17.3

11 months ago

4.17.4

11 months ago

4.17.0

11 months ago

4.17.1

11 months ago

8.16.0

11 months ago

8.16.1

11 months ago

8.17.1

11 months ago

8.17.0

11 months ago

8.20.0

10 months ago

8.20.1

10 months ago

8.15.0-beta.4

12 months ago

8.15.0-beta.3

12 months ago

8.15.0-beta.2

12 months ago

8.15.0-beta.1

12 months ago

8.15.0-beta.8

11 months ago

8.15.0-beta.7

11 months ago

8.15.0-beta.6

11 months ago

8.15.0-beta.5

12 months ago

8.15.0-beta.9

11 months ago

8.18.0

11 months ago

8.18.1

10 months ago

8.12.1

1 year ago

8.11.0

1 year ago

8.12.0

1 year ago

8.10.0

1 year ago

8.10.1

1 year ago

8.9.2

1 year ago

8.9.1

1 year ago

8.9.0

1 year ago

8.8.1

1 year ago

8.8.0

1 year ago

8.8.0-beta.1

1 year ago

8.7.0

1 year ago

8.6.1

1 year ago

8.6.0-beta.1

1 year ago

8.5.4

1 year ago

8.5.5

1 year ago

8.7.0-beta.9

1 year ago

8.7.0-beta.8

1 year ago

8.7.0-beta.7

1 year ago

8.7.0-beta.6

1 year ago

8.7.0-beta.5

1 year ago

8.7.0-beta.4

1 year ago

8.6.0

1 year ago

8.7.0-beta.3

1 year ago

8.7.0-beta.2

1 year ago

8.7.0-beta.1

1 year ago

8.5.3

1 year ago

8.5.2

1 year ago

8.5.1

1 year ago

8.4.0

1 year ago

8.5.0

1 year ago

8.3.1

1 year ago

8.4.0-beta.3

1 year ago

8.4.0-beta.2

1 year ago

8.4.0-beta.1

1 year ago

8.3.0

1 year ago

8.3.0-beta.3

1 year ago

8.3.0-beta.2

1 year ago

8.2.1

1 year ago

8.3.0-beta.1

1 year ago

8.2.0-beta.1

1 year ago

8.2.0

1 year ago

8.1.0

1 year ago

8.1.0-beta.9

1 year ago

8.1.0-beta.8

1 year ago

8.1.0-beta.7

1 year ago

8.1.0-beta.6

1 year ago

8.1.0-beta.5

1 year ago

8.1.0-beta.4

1 year ago

8.1.0-beta.3

1 year ago

8.1.0-beta.2

1 year ago

8.1.0-beta.1

1 year ago

7.5.0-beta.4

1 year ago

7.5.0-beta.5

1 year ago

8.0.0

1 year ago

7.4.7

1 year ago

7.4.6

1 year ago

7.4.5

1 year ago

7.4.4

2 years ago

7.4.3

2 years ago

7.5.0-beta.3

2 years ago

6.1.2

2 years ago

6.1.3

2 years ago

7.3.1

2 years ago

7.3.0

2 years ago

7.4.2

2 years ago

7.4.1

2 years ago

7.5.0-beta.2

2 years ago

7.5.0-beta.1

2 years ago

6.2.1

2 years ago

6.2.0

2 years ago

6.2.3

2 years ago

6.2.2

2 years ago

7.4.0-beta.1

2 years ago

7.4.0-beta.2

2 years ago

7.0.0

2 years ago

7.4.0

2 years ago

4.16.3

2 years ago

4.16.0

2 years ago

4.16.1

2 years ago

4.16.2

2 years ago

6.3.0

2 years ago

7.1.0-beta.2

2 years ago

7.1.0-beta.1

2 years ago

7.1.0-beta.3

2 years ago

7.1.1

2 years ago

7.1.0

2 years ago

6.4.0

2 years ago

6.3.0-beta.1

2 years ago

6.3.0-beta.2

2 years ago

6.3.0-beta.3

2 years ago

6.3.0-beta.4

2 years ago

7.2.0

2 years ago

6.1.0

2 years ago

6.1.1

2 years ago

6.0.0-beta.1

2 years ago

6.0.0-beta.2

2 years ago

5.1.0-beta.1

2 years ago

6.0.1

2 years ago

6.0.0

2 years ago

6.0.3

2 years ago

6.0.2

2 years ago

6.0.5

2 years ago

6.0.4

2 years ago

5.0.2

2 years ago

5.0.0-beta.1

2 years ago

5.0.1

2 years ago

5.0.0

2 years ago

4.16.0-beta.2

2 years ago

4.16.0-beta.1

2 years ago

4.10.2

3 years ago

4.14.0

3 years ago

4.13.0

3 years ago

4.12.3

3 years ago

4.12.0

3 years ago

4.12.1

3 years ago

4.12.2

3 years ago

4.15.0

3 years ago

4.11.0

3 years ago

4.8.0

3 years ago

4.7.0

3 years ago

4.7.1

3 years ago

4.6.1

3 years ago

4.6.0

3 years ago

4.6.2

3 years ago

4.5.0

3 years ago

4.4.0

3 years ago

3.2.2

3 years ago

3.2.1

3 years ago

3.2.0

3 years ago

3.2.4

3 years ago

3.2.3

3 years ago

4.3.0

3 years ago

4.2.1

3 years ago

4.1.9

3 years ago

4.1.11-develop.1

3 years ago

4.2.0

3 years ago

4.1.10

3 years ago

4.1.11

3 years ago

4.1.12

3 years ago

4.1.13

3 years ago

4.1.14

3 years ago

4.1.15

3 years ago

4.1.8

3 years ago

4.1.7

3 years ago

4.1.4

3 years ago

4.1.3

3 years ago

4.1.6

3 years ago

4.1.5

3 years ago

4.1.2

3 years ago

4.1.1

3 years ago

4.1.1-develop.1

3 years ago

4.1.0-develop.5

3 years ago

4.1.0-develop.6

3 years ago

4.1.0-develop.7

3 years ago

4.1.0-develop.8

3 years ago

4.1.0-develop.9

3 years ago

4.1.0-develop.2

3 years ago

4.1.0-develop.4

3 years ago

4.1.0-develop.11

3 years ago

4.1.0-develop.10

3 years ago

4.1.0

3 years ago

4.1.1-beta.3

3 years ago

4.1.1-next.1

3 years ago

4.0.0-beta.4

3 years ago

4.0.0-beta.2

3 years ago

0.0.1

3 years ago

4.0.0-alpha.0

3 years ago

4.0.0

3 years ago

3.1.2-beta.7

4 years ago

3.1.2

3 years ago

4.0.0-beta.1

3 years ago

3.1.2-beta.6

4 years ago

3.1.2-beta.4

4 years ago

3.1.1

4 years ago

3.1.1-beta.1

4 years ago

3.1.0

5 years ago

3.1.0-beta.2

5 years ago

3.0.1

5 years ago

3.1.0-beta.1

5 years ago

3.0.0

5 years ago

3.0.0-rc.2

5 years ago

3.0.0-rc.1

5 years ago

3.0.0-beta.3

5 years ago

3.0.0-beta.2

6 years ago

3.0.0-beta.1-2

6 years ago

3.0.0-beta.1-1

6 years ago

3.0.0-beta.1

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

2.0.0-rc.2

7 years ago

2.0.0-rc.1

7 years ago

2.0.0-beta.5

7 years ago

2.0.0-beta.4

7 years ago

2.0.0-beta.3

7 years ago

2.0.0-beta.2

7 years ago

1.0.1

7 years ago

2.0.0-beta.1

7 years ago

1.0.0

7 years ago

1.0.0-rc.5

7 years ago

1.0.0-rc.4

7 years ago

1.0.0-rc.3

7 years ago

1.0.0-rc.2

7 years ago

1.0.0-rc.1

8 years ago

1.0.0-rc.0

8 years ago

1.0.0-beta.8-1

8 years ago

1.0.0-beta.8

8 years ago

1.0.0-beta.7

8 years ago

1.0.0-beta.6

8 years ago

1.0.0-beta.5-1

8 years ago

1.0.0-beta.5

8 years ago

1.0.0-beta.4

8 years ago

1.0.0-beta.3-2

8 years ago

1.0.0-beta.3-1

8 years ago

1.0.0-beta.3

8 years ago

1.0.0-beta.2-1

8 years ago

1.0.0-beta.2

8 years ago

1.0.0-beta.1-1

8 years ago

1.0.0-beta.1

8 years ago

0.10.2

8 years ago

0.10.1

8 years ago

0.10.0

8 years ago