8.12.0 • Published 3 days ago

@covalent/dynamic-forms v8.12.0

Weekly downloads
967
License
MIT
Repository
github
Last release
3 days 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.11.0

3 days ago

8.12.0

3 days ago

8.10.0

16 days ago

8.10.1

16 days ago

8.9.2

18 days ago

8.9.1

19 days ago

8.9.0

25 days ago

8.8.1

1 month ago

8.8.0

1 month ago

8.8.0-beta.1

1 month ago

8.7.0

1 month ago

8.6.1

1 month ago

8.6.0-beta.1

2 months ago

8.5.4

2 months ago

8.5.5

2 months ago

8.7.0-beta.9

2 months ago

8.7.0-beta.8

2 months ago

8.7.0-beta.7

2 months ago

8.7.0-beta.6

2 months ago

8.7.0-beta.5

2 months ago

8.7.0-beta.4

2 months ago

8.6.0

2 months ago

8.7.0-beta.3

2 months ago

8.7.0-beta.2

2 months ago

8.7.0-beta.1

2 months ago

8.5.3

2 months ago

8.5.2

2 months ago

8.5.1

2 months ago

8.4.0

2 months ago

8.5.0

2 months ago

8.3.1

2 months ago

8.4.0-beta.3

2 months ago

8.4.0-beta.2

2 months ago

8.4.0-beta.1

2 months ago

8.3.0

2 months ago

8.3.0-beta.3

2 months ago

8.3.0-beta.2

2 months ago

8.2.1

2 months ago

8.3.0-beta.1

2 months ago

8.2.0-beta.1

2 months ago

8.2.0

2 months ago

8.1.0

2 months ago

8.1.0-beta.9

3 months ago

8.1.0-beta.8

3 months ago

8.1.0-beta.7

3 months ago

8.1.0-beta.6

3 months ago

8.1.0-beta.5

3 months ago

8.1.0-beta.4

3 months ago

8.1.0-beta.3

3 months ago

8.1.0-beta.2

3 months ago

8.1.0-beta.1

3 months ago

7.5.0-beta.4

4 months ago

7.5.0-beta.5

4 months ago

8.0.0

4 months ago

7.4.7

4 months ago

7.4.6

4 months ago

7.4.5

4 months ago

7.4.4

5 months ago

7.4.3

5 months ago

7.5.0-beta.3

5 months ago

6.1.2

10 months ago

6.1.3

9 months ago

7.3.1

6 months ago

7.3.0

6 months ago

7.4.2

6 months ago

7.4.1

6 months ago

7.5.0-beta.2

5 months ago

7.5.0-beta.1

5 months ago

6.2.1

9 months ago

6.2.0

9 months ago

6.2.3

9 months ago

6.2.2

9 months ago

7.4.0-beta.1

6 months ago

7.4.0-beta.2

6 months ago

7.0.0

8 months ago

7.4.0

6 months ago

4.16.3

8 months ago

4.16.0

9 months ago

4.16.1

8 months ago

4.16.2

8 months ago

6.3.0

9 months ago

7.1.0-beta.2

7 months ago

7.1.0-beta.1

7 months ago

7.1.0-beta.3

6 months ago

7.1.1

8 months ago

7.1.0

8 months ago

6.4.0

8 months ago

6.3.0-beta.1

9 months ago

6.3.0-beta.2

9 months ago

6.3.0-beta.3

9 months ago

6.3.0-beta.4

9 months ago

7.2.0

6 months ago

6.1.0

10 months ago

6.1.1

10 months ago

6.0.0-beta.1

1 year ago

6.0.0-beta.2

12 months ago

5.1.0-beta.1

1 year ago

6.0.1

11 months ago

6.0.0

12 months ago

6.0.3

11 months ago

6.0.2

11 months ago

6.0.5

11 months ago

6.0.4

11 months ago

5.0.2

1 year ago

5.0.0-beta.1

1 year ago

5.0.1

1 year ago

5.0.0

1 year ago

4.16.0-beta.2

1 year ago

4.16.0-beta.1

1 year ago

4.10.2

1 year ago

4.14.0

1 year ago

4.13.0

1 year ago

4.12.3

1 year ago

4.12.0

1 year ago

4.12.1

1 year ago

4.12.2

1 year ago

4.15.0

1 year ago

4.11.0

1 year ago

4.8.0

2 years ago

4.7.0

2 years ago

4.7.1

2 years ago

4.6.1

2 years ago

4.6.0

2 years ago

4.6.2

2 years ago

4.5.0

2 years ago

4.4.0

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.2.4

2 years ago

3.2.3

2 years ago

4.3.0

2 years ago

4.2.1

2 years ago

4.1.9

2 years ago

4.1.11-develop.1

2 years ago

4.2.0

2 years ago

4.1.10

2 years ago

4.1.11

2 years ago

4.1.12

2 years ago

4.1.13

2 years ago

4.1.14

2 years ago

4.1.15

2 years ago

4.1.8

2 years ago

4.1.7

2 years ago

4.1.4

2 years ago

4.1.3

2 years ago

4.1.6

2 years ago

4.1.5

2 years ago

4.1.2

2 years ago

4.1.1

2 years ago

4.1.1-develop.1

2 years ago

4.1.0-develop.5

2 years ago

4.1.0-develop.6

2 years ago

4.1.0-develop.7

2 years ago

4.1.0-develop.8

2 years ago

4.1.0-develop.9

2 years ago

4.1.0-develop.2

2 years ago

4.1.0-develop.4

2 years ago

4.1.0-develop.11

2 years ago

4.1.0-develop.10

2 years ago

4.1.0

2 years ago

4.1.1-beta.3

2 years ago

4.1.1-next.1

2 years ago

4.0.0-beta.4

2 years ago

4.0.0-beta.2

2 years ago

0.0.1

2 years ago

4.0.0-alpha.0

2 years ago

4.0.0

2 years ago

3.1.2-beta.7

2 years ago

3.1.2

2 years ago

4.0.0-beta.1

2 years ago

3.1.2-beta.6

2 years ago

3.1.2-beta.4

3 years ago

3.1.1

3 years ago

3.1.1-beta.1

3 years ago

3.1.0

4 years ago

3.1.0-beta.2

4 years ago

3.0.1

4 years ago

3.1.0-beta.1

4 years ago

3.0.0

4 years ago

3.0.0-rc.2

4 years ago

3.0.0-rc.1

4 years ago

3.0.0-beta.3

4 years ago

3.0.0-beta.2

4 years ago

3.0.0-beta.1-2

5 years ago

3.0.0-beta.1-1

5 years ago

3.0.0-beta.1

5 years ago

2.1.1

5 years ago

2.1.0

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

2.0.0-rc.2

5 years ago

2.0.0-rc.1

5 years ago

2.0.0-beta.5

5 years ago

2.0.0-beta.4

5 years ago

2.0.0-beta.3

6 years ago

2.0.0-beta.2

6 years ago

1.0.1

6 years ago

2.0.0-beta.1

6 years ago

1.0.0

6 years ago

1.0.0-rc.5

6 years ago

1.0.0-rc.4

6 years ago

1.0.0-rc.3

6 years ago

1.0.0-rc.2

6 years ago

1.0.0-rc.1

6 years ago

1.0.0-rc.0

6 years ago

1.0.0-beta.8-1

7 years ago

1.0.0-beta.8

7 years ago

1.0.0-beta.7

7 years ago

1.0.0-beta.6

7 years ago

1.0.0-beta.5-1

7 years ago

1.0.0-beta.5

7 years ago

1.0.0-beta.4

7 years ago

1.0.0-beta.3-2

7 years ago

1.0.0-beta.3-1

7 years ago

1.0.0-beta.3

7 years ago

1.0.0-beta.2-1

7 years ago

1.0.0-beta.2

7 years ago

1.0.0-beta.1-1

7 years ago

1.0.0-beta.1

7 years ago

0.10.2

7 years ago

0.10.1

7 years ago

0.10.0

7 years ago