@covalent/dynamic-forms 3.1.1-beta.1 → 3.1.2-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/covalent-dynamic-forms.umd.js +34 -6
- package/bundles/covalent-dynamic-forms.umd.js.map +1 -1
- package/bundles/covalent-dynamic-forms.umd.min.js +2 -2
- package/bundles/covalent-dynamic-forms.umd.min.js.map +1 -1
- package/covalent-dynamic-forms.metadata.json +1 -1
- package/dynamic-element.component.d.ts +4 -0
- package/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.d.ts +1 -0
- package/dynamic-elements/dynamic-file-input/dynamic-file-input.component.d.ts +1 -0
- package/dynamic-elements/dynamic-input/dynamic-input.component.d.ts +1 -0
- package/dynamic-elements/dynamic-select/dynamic-select.component.d.ts +1 -0
- package/dynamic-elements/dynamic-textarea/dynamic-textarea.component.d.ts +1 -0
- package/esm2015/covalent-dynamic-forms.js +1 -1
- package/esm2015/dynamic-element.component.js +12 -1
- package/esm2015/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.js +1 -1
- package/esm2015/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.js +5 -2
- package/esm2015/dynamic-elements/dynamic-file-input/dynamic-file-input.component.js +5 -2
- package/esm2015/dynamic-elements/dynamic-input/dynamic-input.component.js +5 -2
- package/esm2015/dynamic-elements/dynamic-select/dynamic-select.component.js +5 -2
- package/esm2015/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.js +1 -1
- package/esm2015/dynamic-elements/dynamic-slider/dynamic-slider.component.js +1 -1
- package/esm2015/dynamic-elements/dynamic-textarea/dynamic-textarea.component.js +5 -2
- package/esm2015/dynamic-forms.component.js +2 -2
- package/esm2015/dynamic-forms.module.js +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/public_api.js +1 -1
- package/esm2015/services/dynamic-forms.service.js +3 -1
- package/fesm2015/covalent-dynamic-forms.js +34 -6
- package/fesm2015/covalent-dynamic-forms.js.map +1 -1
- package/package.json +2 -2
- package/services/dynamic-forms.service.d.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("@angular/material/form-field"),require("@angular/material/input"),require("@angular/material/select"),require("@angular/material/checkbox"),require("@angular/material/slider"),require("@angular/material/slide-toggle"),require("@angular/material/icon"),require("@angular/material/button"),require("@angular/material/datepicker"),require("@covalent/core/common"),require("@covalent/core/file"),require("@angular/cdk/portal"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@covalent/dynamic-forms",["exports","@angular/core","@angular/common","@angular/forms","@angular/material/form-field","@angular/material/input","@angular/material/select","@angular/material/checkbox","@angular/material/slider","@angular/material/slide-toggle","@angular/material/icon","@angular/material/button","@angular/material/datepicker","@covalent/core/common","@covalent/core/file","@angular/cdk/portal","rxjs","rxjs/operators"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).covalent=e.covalent||{},e.covalent["dynamic-forms"]={}),e.ng.core,e.ng.common,e.ng.forms,e.ng.material.formField,e.ng.material.input,e.ng.material.select,e.ng.material.checkbox,e.ng.material.slider,e.ng.material.slideToggle,e.ng.material.icon,e.ng.material.button,e.ng.material.datepicker,e.covalent.core.common,e.covalent.core.file,e.ng.cdk.portal,e.rxjs,e.rxjs.operators)}(this,(function(e,t,n,r,a,i,o,l,m,s,c,d,p,u,f,y,
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("@angular/material/form-field"),require("@angular/material/input"),require("@angular/material/select"),require("@angular/material/checkbox"),require("@angular/material/slider"),require("@angular/material/slide-toggle"),require("@angular/material/icon"),require("@angular/material/button"),require("@angular/material/datepicker"),require("@covalent/core/common"),require("@covalent/core/file"),require("@angular/cdk/portal"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@covalent/dynamic-forms",["exports","@angular/core","@angular/common","@angular/forms","@angular/material/form-field","@angular/material/input","@angular/material/select","@angular/material/checkbox","@angular/material/slider","@angular/material/slide-toggle","@angular/material/icon","@angular/material/button","@angular/material/datepicker","@covalent/core/common","@covalent/core/file","@angular/cdk/portal","rxjs","rxjs/operators"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).covalent=e.covalent||{},e.covalent["dynamic-forms"]={}),e.ng.core,e.ng.common,e.ng.forms,e.ng.material.formField,e.ng.material.input,e.ng.material.select,e.ng.material.checkbox,e.ng.material.slider,e.ng.material.slideToggle,e.ng.material.icon,e.ng.material.button,e.ng.material.datepicker,e.covalent.core.common,e.covalent.core.file,e.ng.cdk.portal,e.rxjs,e.rxjs.operators)}(this,(function(e,t,n,r,a,i,o,l,m,s,c,d,p,u,f,h,y,g){"use strict";
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var x=function(e,t){return(x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function b(e,t){function n(){this.constructor=e}x(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}Object.create;function v(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}Object.create;var C=function(){this.label="",this.hint="",this.type=void 0,this.required=void 0,this.name="",this.min=void 0,this.max=void 0,this.minLength=void 0,this.maxLength=void 0,this.errorMessageTemplate=void 0};C.decorators=[{type:t.Component,args:[{selector:"td-dynamic-input",template:'<div class="td-dynamic-input-wrapper">\n <mat-form-field class="td-dynamic-input-field">\n <input\n #elementInput\n matInput\n [formControl]="control"\n [placeholder]="label"\n [type]="type"\n [required]="required"\n [attr.name]="name"\n [attr.min]="min"\n [attr.max]="max"\n [attr.minLength]="minLength"\n [attr.maxLength]="maxLength"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-input-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-input-wrapper .td-dynamic-input-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var _=function(){function e(){this.required=void 0,this.label="",this.name="",this.hint="",this.errorMessageTemplate=void 0}return e.prototype._handlefileDrop=function(e){this.control.setValue(e)},e}();_.decorators=[{type:t.Component,args:[{selector:"td-dynamic-file-input",template:'<div class="td-dynamic-file-input-wrapper">\n <mat-form-field\n tdFileDrop\n class="td-dynamic-file-input-field"\n floatLabel="never"\n [disabled]="control?.disabled"\n (fileDrop)="_handlefileDrop($event)"\n (click)="!control?.disabled && fileInput.inputElement.click()"\n (keyup.enter)="!control?.disabled && fileInput.inputElement.click()"\n (keyup.delete)="fileInput.clear()"\n (keyup.backspace)="fileInput.clear()"\n >\n <input\n matInput\n [value]="control?.value?.name"\n [placeholder]="label"\n [attr.name]="name"\n [disabled]="control?.disabled"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button mat-icon-button *ngIf="control.value" (click)="fileInput.clear()" (keyup.enter)="fileInput.clear()">\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class="td-file-input" #fileInput [formControl]="control">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n',styles:[".td-dynamic-file-input-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{-ms-flex:1;box-sizing:border-box;flex:1}.td-file-input{margin-left:10px}"]}]}];var w=function(){this.label="",this.hint="",this.name="",this.required=void 0,this.errorMessageTemplate=void 0};w.decorators=[{type:t.Component,args:[{selector:"td-dynamic-textarea",template:'<div class="td-dynamic-textarea-wrapper">\n <mat-form-field class="td-dynamic-textarea-field">\n <textarea\n #elementInput\n matInput\n [formControl]="control"\n [placeholder]="label"\n [required]="required"\n [attr.name]="name"\n rows="4"\n ></textarea>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-textarea-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-textarea-wrapper .td-dynamic-textarea-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var T=function(){this.label="",this.name="",this.hint="",this.required=!1};T.decorators=[{type:t.Component,args:[{selector:"td-dynamic-slide-toggle",template:'<div class="td-dynamic-slide-toggle-wrapper">\n <mat-slide-toggle [formControl]="control" [attr.name]="name" [required]="required">\n {{ label }}\n </mat-slide-toggle>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[""]}]}];var D=function(){this.label="",this.name="",this.hint="",this.required=!1};D.decorators=[{type:t.Component,args:[{selector:"td-dynamic-checkbox",template:'<div class="td-dynamic-checkbox-wrapper">\n <mat-checkbox [formControl]="control" [name]="name" [required]="required">\n {{ label }}\n </mat-checkbox>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[""]}]}];var k=function(){function e(e){this._changeDetectorRef=e,this.label="",this.required=void 0,this.name="",this.hint="",this.min=void 0,this.max=void 0}return e.prototype._handleBlur=function(){var e=this;setTimeout((function(){e._changeDetectorRef.markForCheck()}))},e}();k.decorators=[{type:t.Component,args:[{selector:"td-dynamic-slider",template:'<div\n class="td-dynamic-slider-wrapper mat-form-field mat-form-field-can-float mat-form-field-should-float"\n [class.mat-focused]="slider._isActive"\n>\n <span class="mat-form-field-label-wrapper">\n <label class="mat-form-field-label mat-primary td-slider-label">\n {{ label }}\n <span *ngIf="required && !control?.disabled" class="mat-form-field-required-marker">*</span>\n </label>\n </span>\n <div class="td-dynamic-slider-field">\n <mat-slider\n #slider\n class="td-dynamic-slider"\n [formControl]="control"\n [attr.name]="name"\n [min]="min"\n [max]="max"\n thumbLabel\n tickInterval="auto"\n [required]="required"\n (blur)="_handleBlur()"\n ></mat-slider>\n </div>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[":host .td-dynamic-slider-wrapper{display:block}.td-dynamic-slider-field{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row;position:relative}.td-dynamic-slider-field .td-dynamic-slider{-ms-flex:1;flex:1}"]}]}],k.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]};var F=function(){this.label="",this.hint="",this.name="",this.required=void 0,this.selections=void 0,this.multiple=void 0,this.errorMessageTemplate=void 0};F.decorators=[{type:t.Component,args:[{selector:"td-dynamic-select",template:'<div class="td-dynamic-select-wrapper">\n <mat-form-field class="td-dynamic-select-field">\n <mat-select\n [formControl]="control"\n [placeholder]="label"\n [required]="required"\n [attr.name]="name"\n [multiple]="multiple"\n >\n <mat-option *ngFor="let selection of selections" [value]="selection.value || selection">\n {{ selection.label || selection }}\n </mat-option>\n </mat-select>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-select-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-select-wrapper .td-dynamic-select-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var E=function(){this.label="",this.hint="",this.name="",this.type=void 0,this.required=void 0,this.min=void 0,this.max=void 0,this.errorMessageTemplate=void 0};E.decorators=[{type:t.Component,args:[{selector:"td-dynamic-datepicker",template:'<div class="td-dynamic-datepicker-wrapper">\n <mat-form-field class="td-dynamic-datepicker-field">\n <input\n #elementInput\n matInput\n [matDatepicker]="dynamicDatePicker"\n [formControl]="control"\n [placeholder]="label"\n [required]="required"\n [name]="name"\n [min]="min"\n [max]="max"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n <mat-datepicker-toggle matSuffix [for]="dynamicDatePicker"></mat-datepicker-toggle>\n <mat-datepicker #dynamicDatePicker></mat-datepicker>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-datepicker-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-datepicker-wrapper .td-dynamic-datepicker-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var M={Text:"text",Boolean:"boolean",Number:"number",Array:"array",Date:"date"},I={Input:"input",Datepicker:"datepicker",Password:"password",Textarea:"textarea",Slider:"slider",SlideToggle:"slide-toggle",Checkbox:"checkbox",Select:"select",FileInput:"file-input"};var q=/^[^0-9][^\@]*$/,O=function(){function e(){}return e.prototype.validateDynamicElementName=function(e){if(!q.test(e))throw new Error('Dynamic element name: "${name}" is not valid.')},e.prototype.getDynamicElement=function(e){switch(e){case M.Text:case M.Number:case I.Input:case I.Password:return C;case I.Textarea:return w;case M.Boolean:case I.SlideToggle:return T;case I.Checkbox:return D;case I.Slider:return k;case M.Array:case I.Select:return F;case I.FileInput:return _;case I.Datepicker:case M.Date:return E;default:throw new Error("Error: type "+e+" does not exist or not supported.")}},e.prototype.createFormControl=function(e){var t=this.createValidators(e);return new r.FormControl({value:e.default,disabled:e.disabled},t)},e.prototype.createValidators=function(e){var t;return e.required&&(t=r.Validators.required),(e.max||0===e.max)&&(t=r.Validators.compose([t,r.Validators.max(parseFloat(e.max))])),(e.min||0===e.min)&&(t=r.Validators.compose([t,r.Validators.min(parseFloat(e.min))])),(e.maxLength||0===e.maxLength)&&(t=r.Validators.compose([t,r.Validators.maxLength(parseFloat(e.maxLength))])),(e.minLength||0===e.minLength)&&(t=r.Validators.compose([t,r.Validators.minLength(parseFloat(e.minLength))])),e.validators&&e.validators.forEach((function(e){t=r.Validators.compose([t,e.validator])})),t},e}();function S(e){return e||new O}O.decorators=[{type:t.Injectable}];var R={provide:O,deps:[[new t.Optional,new t.SkipSelf,O]],useFactory:S},j=function(e){this._changeDetectorRef=e};var L=u.mixinControlValueAccessor(j),P=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.templateRef=t,r}return b(t,e),t}(y.TemplatePortalDirective);P.decorators=[{type:t.Directive,args:[{selector:"[tdDynamicFormsError]ng-template"}]}],P.ctorParameters=function(){return[{type:t.TemplateRef},{type:t.ViewContainerRef}]},P.propDecorators={tdDynamicFormsError:[{type:t.Input}]};var V=function(e){this.viewContainer=e};V.decorators=[{type:t.Directive,args:[{selector:"[tdDynamicContainer]"}]}],V.ctorParameters=function(){return[{type:t.ViewContainerRef}]};var A=function(e){function n(t,n,r){var a=e.call(this,r)||this;return a._componentFactoryResolver=t,a._dynamicFormsService=n,a.label="",a.hint="",a.name="",a.type=void 0,a.required=void 0,a.min=void 0,a.max=void 0,a.minLength=void 0,a.maxLength=void 0,a.selections=void 0,a.multiple=void 0,a.errorMessageTemplate=void 0,a}return b(n,e),Object.defineProperty(n.prototype,"maxAttr",{get:function(){return this.max},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"minAttr",{get:function(){return this.min},enumerable:!1,configurable:!0}),n.prototype.ngOnInit=function(){var e=this,n=this.type instanceof t.Type?this.type:this._dynamicFormsService.getDynamicElement(this.type),r=this._componentFactoryResolver.resolveComponentFactory(n).create(this.childElement.viewContainer.injector);this.childElement.viewContainer.insert(r.hostView),this._instance=r.instance,this._instance.control=this.dynamicControl,this._instance.label=this.label,this._instance.hint=this.hint,this._instance.name=this.name,this._instance.type=this.type,this._instance.value=this.value,this._instance.required=this.required,this._instance.min=this.min,this._instance.max=this.max,this._instance.minLength=this.minLength,this._instance.maxLength=this.maxLength,this._instance.selections=this.selections,this._instance.multiple=this.multiple,this._instance.errorMessageTemplate=this.errorMessageTemplate,this.customConfig&&Object.getOwnPropertyNames(this.customConfig).forEach((function(t){e._instance[t]=e.customConfig[t]}))},n.prototype.ngOnChanges=function(e){var t,n;if(this._instance)try{for(var r=v(Object.keys(e)),a=r.next();!a.done;a=r.next()){var i=a.value;this._instance[i]=e[i].currentValue}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},n}(L);A.decorators=[{type:t.Component,args:[{providers:[O,{provide:r.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return A})),multi:!0}],selector:"td-dynamic-element",template:"<div tdDynamicContainer></div>"}]}],A.ctorParameters=function(){return[{type:t.ComponentFactoryResolver},{type:O},{type:t.ChangeDetectorRef}]},A.propDecorators={dynamicControl:[{type:t.Input}],label:[{type:t.Input}],hint:[{type:t.Input}],name:[{type:t.Input}],type:[{type:t.Input}],required:[{type:t.Input}],min:[{type:t.Input}],max:[{type:t.Input}],minLength:[{type:t.Input}],maxLength:[{type:t.Input}],selections:[{type:t.Input}],multiple:[{type:t.Input}],customConfig:[{type:t.Input}],errorMessageTemplate:[{type:t.Input}],childElement:[{type:t.ViewChild,args:[V,{static:!0}]}],maxAttr:[{type:t.HostBinding,args:["attr.max"]}],minAttr:[{type:t.HostBinding,args:["attr.min"]}]};var z=function(){function e(e,t,n){this._formBuilder=e,this._dynamicFormsService=t,this._changeDetectorRef=n,this._renderedElements=[],this._templateMap=new Map,this._destroy$=new h.Subject,this._destroyControl$=new h.Subject,this.dynamicForm=this._formBuilder.group({})}return Object.defineProperty(e.prototype,"elements",{get:function(){return this._renderedElements},set:function(e){this._elements=e||[],this._rerenderElements()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"form",{get:function(){return this.dynamicForm},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!!this.dynamicForm&&this.dynamicForm.valid},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.dynamicForm?this.dynamicForm.value:{}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){var e,t;if(this.dynamicForm){var n={};try{for(var r=v(Object.keys(this.dynamicForm.controls)),a=r.next();!a.done;a=r.next()){var i=a.value;n[i]=this.dynamicForm.controls[i].errors}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return n}return{}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"controls",{get:function(){return this.dynamicForm?this.dynamicForm.controls:{}},enumerable:!1,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._updateErrorTemplates()},e.prototype.ngOnDestroy=function(){this._destroy$.next(),this._destroy$.complete(),this._destroyControl$.complete()},e.prototype.refresh=function(){this._rerenderElements(),this._updateErrorTemplates()},e.prototype.getErrorTemplateRef=function(e){return this._templateMap.get(e)},e.prototype._updateErrorTemplates=function(){var e,t;this._templateMap=new Map;try{for(var n=v(this._errorTemplates.toArray()),r=n.next();!r.done;r=n.next()){var a=r.value;this._templateMap.set(a.tdDynamicFormsError,a.templateRef)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype._rerenderElements=function(){var e=this;this._clearRemovedElements(),this._renderedElements=[];var t=[];this._elements.forEach((function(n){if(e._dynamicFormsService.validateDynamicElementName(n.name),t.indexOf(n.name)>-1)throw new Error('Dynamic element name: "'+n.name+'" is duplicated');t.push(n.name);var r=e.dynamicForm.get(n.name);r?(r.setValue(n.default),r.markAsPristine(),r.markAsUntouched(),n.disabled?r.disable():r.enable(),r.setValidators(e._dynamicFormsService.createValidators(n))):(e.dynamicForm.addControl(n.name,e._dynamicFormsService.createFormControl(n)),e._subscribeToControlStatusChanges(n.name)),e._renderedElements.push(Object.assign({},n))})),this._changeDetectorRef.detectChanges(),h.timer().toPromise().then((function(){e._changeDetectorRef.markForCheck()}))},e.prototype._clearRemovedElements=function(){var e=this;this._renderedElements=this._renderedElements.filter((function(t){return!e._elements.some((function(e){return e.name===t.name}))})),this._renderedElements.forEach((function(t){e._destroyControl$.next(t.name),e.dynamicForm.removeControl(t.name)}))},e.prototype._subscribeToControlStatusChanges=function(e){var t=this,n=this.controls[e],r=this._destroyControl$.pipe(g.filter((function(t){return t===e})));n.statusChanges.pipe(g.takeUntil(this._destroy$),g.takeUntil(r)).subscribe((function(){t._changeDetectorRef.markForCheck()}))},e}();z.decorators=[{type:t.Component,args:[{selector:"td-dynamic-forms",template:'<form [formGroup]="dynamicForm" novalidate>\n <div class="td-dynamic-form-wrapper">\n <ng-template let-element ngFor [ngForOf]="elements">\n <div\n class="td-dynamic-element-wrapper"\n [style.max-width.%]="element.flex ? element.flex : 100"\n [style.flex]="\'1 1 \' + (element.flex ? element.flex : 100) + \'%\'"\n [style.-ms-flex]="\'1 1 \' + (element.flex ? element.flex : 100) + \'%\'"\n [style.-webkit-box-flex]="1"\n >\n <td-dynamic-element\n #dynamicElement\n *ngIf="dynamicForm.controls[element.name]"\n [formControlName]="element.name"\n [dynamicControl]="dynamicForm.controls[element.name]"\n [id]="element.name"\n [name]="element.name"\n [label]="element.label || element.name"\n [hint]="element.hint"\n [type]="element.type"\n [required]="element.required"\n [min]="element.min"\n [max]="element.max"\n [minLength]="element.minLength"\n [maxLength]="element.maxLength"\n [selections]="element.selections"\n [multiple]="element.multiple"\n [customConfig]="element.customConfig"\n [errorMessageTemplate]="getErrorTemplateRef(element.name)"\n ></td-dynamic-element>\n </div>\n </ng-template>\n </div>\n <ng-content></ng-content>\n</form>\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".td-dynamic-form-wrapper{-ms-flex-align:center;-ms-flex-direction:row;-ms-flex-line-pack:center;-ms-flex-pack:start;-ms-flex-wrap:wrap;align-content:center;align-items:center;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;max-width:100%}.td-dynamic-form-wrapper ::ng-deep .mat-form-field-infix{width:auto}.td-dynamic-form-wrapper ::ng-deep .td-dynamic-element-hint{display:block;font-size:75%}.td-dynamic-form-wrapper .td-dynamic-element-wrapper{box-sizing:border-box;max-height:100%;padding:4px 4px 8px;position:relative}"]}]}],z.ctorParameters=function(){return[{type:r.FormBuilder},{type:O},{type:t.ChangeDetectorRef}]},z.propDecorators={_errorTemplates:[{type:t.ContentChildren,args:[P,{descendants:!0}]}],elements:[{type:t.Input,args:["elements"]}]};var N=[z,A,V,P],B=[C,_,w,T,D,k,F,E],$=function(){};$.decorators=[{type:t.NgModule,args:[{declarations:[N,B],imports:[n.CommonModule,r.ReactiveFormsModule,a.MatFormFieldModule,i.MatInputModule,o.MatSelectModule,l.MatCheckboxModule,m.MatSliderModule,s.MatSlideToggleModule,c.MatIconModule,d.MatButtonModule,p.MatDatepickerModule,u.CovalentCommonModule,f.CovalentFileModule],exports:[N,B],providers:[R]}]}],e.CovalentDynamicFormsModule=$,e.DYNAMIC_ELEMENT_NAME_REGEX=q,e.DYNAMIC_FORMS_PROVIDER=R,e.DYNAMIC_FORMS_PROVIDER_FACTORY=S,e.TdDynamicCheckboxComponent=D,e.TdDynamicDatepickerComponent=E,e.TdDynamicElement=I,e.TdDynamicElementBase=j,e.TdDynamicElementComponent=A,e.TdDynamicElementDirective=V,e.TdDynamicFileInputComponent=_,e.TdDynamicFormsComponent=z,e.TdDynamicFormsErrorTemplateDirective=P,e.TdDynamicFormsService=O,e.TdDynamicInputComponent=C,e.TdDynamicSelectComponent=F,e.TdDynamicSlideToggleComponent=T,e.TdDynamicSliderComponent=k,e.TdDynamicTextareaComponent=w,e.TdDynamicType=M,e._TdDynamicElementMixinBase=L,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
15
|
+
***************************************************************************** */var x=function(e,t){return(x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function b(e,t){function n(){this.constructor=e}x(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}Object.create;function v(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}Object.create;var _=function(){this.label="",this.hint="",this.type=void 0,this.required=void 0,this.name="",this.min=void 0,this.max=void 0,this.minLength=void 0,this.maxLength=void 0,this.errorMessageTemplate=void 0,this.placeholder=""};_.decorators=[{type:t.Component,args:[{selector:"td-dynamic-input",template:'<div class="td-dynamic-input-wrapper">\n <mat-form-field class="td-dynamic-input-field">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [formControl]="control"\n [placeholder]="placeholder"\n [type]="type"\n [required]="required"\n [attr.name]="name"\n [attr.min]="min"\n [attr.max]="max"\n [attr.minLength]="minLength"\n [attr.maxLength]="maxLength"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-input-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-input-wrapper .td-dynamic-input-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var C=function(){function e(){this.required=void 0,this.label="",this.name="",this.hint="",this.errorMessageTemplate=void 0,this.placeholder=""}return e.prototype._handlefileDrop=function(e){this.control.setValue(e)},e}();C.decorators=[{type:t.Component,args:[{selector:"td-dynamic-file-input",template:'<div class="td-dynamic-file-input-wrapper">\n <mat-form-field\n tdFileDrop\n class="td-dynamic-file-input-field"\n floatLabel="never"\n [disabled]="control?.disabled"\n (fileDrop)="_handlefileDrop($event)"\n (click)="!control?.disabled && fileInput.inputElement.click()"\n (keyup.enter)="!control?.disabled && fileInput.inputElement.click()"\n (keyup.delete)="fileInput.clear()"\n (keyup.backspace)="fileInput.clear()"\n >\n <mat-label>{{ label }}</mat-label>\n <input\n matInput\n [value]="control?.value?.name"\n [placeholder]="placeholder"\n [attr.name]="name"\n [disabled]="control?.disabled"\n readonly\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n <button mat-icon-button *ngIf="control.value" (click)="fileInput.clear()" (keyup.enter)="fileInput.clear()">\n <mat-icon>cancel</mat-icon>\n </button>\n <td-file-input class="td-file-input" #fileInput [formControl]="control">\n <mat-icon>folder</mat-icon>\n <span>{{ label }}</span>\n </td-file-input>\n</div>\n',styles:[".td-dynamic-file-input-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-file-input-wrapper .td-dynamic-file-input-field{-ms-flex:1;box-sizing:border-box;flex:1}.td-file-input{margin-left:10px}"]}]}];var w=function(){this.label="",this.hint="",this.name="",this.required=void 0,this.errorMessageTemplate=void 0,this.placeholder=""};w.decorators=[{type:t.Component,args:[{selector:"td-dynamic-textarea",template:'<div class="td-dynamic-textarea-wrapper">\n <mat-form-field class="td-dynamic-textarea-field">\n <mat-label>{{ label }}</mat-label>\n <textarea\n #elementInput\n matInput\n [formControl]="control"\n [placeholder]="placeholder"\n [required]="required"\n [attr.name]="name"\n rows="4"\n ></textarea>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-textarea-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-textarea-wrapper .td-dynamic-textarea-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var T=function(){this.label="",this.name="",this.hint="",this.required=!1};T.decorators=[{type:t.Component,args:[{selector:"td-dynamic-slide-toggle",template:'<div class="td-dynamic-slide-toggle-wrapper">\n <mat-slide-toggle [formControl]="control" [attr.name]="name" [required]="required">\n {{ label }}\n </mat-slide-toggle>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[""]}]}];var D=function(){this.label="",this.name="",this.hint="",this.required=!1};D.decorators=[{type:t.Component,args:[{selector:"td-dynamic-checkbox",template:'<div class="td-dynamic-checkbox-wrapper">\n <mat-checkbox [formControl]="control" [name]="name" [required]="required">\n {{ label }}\n </mat-checkbox>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[""]}]}];var k=function(){function e(e){this._changeDetectorRef=e,this.label="",this.required=void 0,this.name="",this.hint="",this.min=void 0,this.max=void 0}return e.prototype._handleBlur=function(){var e=this;setTimeout((function(){e._changeDetectorRef.markForCheck()}))},e}();k.decorators=[{type:t.Component,args:[{selector:"td-dynamic-slider",template:'<div\n class="td-dynamic-slider-wrapper mat-form-field mat-form-field-can-float mat-form-field-should-float"\n [class.mat-focused]="slider._isActive"\n>\n <span class="mat-form-field-label-wrapper">\n <label class="mat-form-field-label mat-primary td-slider-label">\n {{ label }}\n <span *ngIf="required && !control?.disabled" class="mat-form-field-required-marker">*</span>\n </label>\n </span>\n <div class="td-dynamic-slider-field">\n <mat-slider\n #slider\n class="td-dynamic-slider"\n [formControl]="control"\n [attr.name]="name"\n [min]="min"\n [max]="max"\n thumbLabel\n tickInterval="auto"\n [required]="required"\n (blur)="_handleBlur()"\n ></mat-slider>\n </div>\n <span class="mat-hint td-dynamic-element-hint">{{ hint }}</span>\n</div>\n',styles:[":host .td-dynamic-slider-wrapper{display:block}.td-dynamic-slider-field{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row;position:relative}.td-dynamic-slider-field .td-dynamic-slider{-ms-flex:1;flex:1}"]}]}],k.ctorParameters=function(){return[{type:t.ChangeDetectorRef}]};var F=function(){this.label="",this.hint="",this.name="",this.required=void 0,this.selections=void 0,this.multiple=void 0,this.errorMessageTemplate=void 0,this.placeholder=""};F.decorators=[{type:t.Component,args:[{selector:"td-dynamic-select",template:'<div class="td-dynamic-select-wrapper">\n <mat-form-field class="td-dynamic-select-field">\n <mat-label>{{ label }}</mat-label>\n <mat-select\n [formControl]="control"\n [placeholder]="placeholder"\n [required]="required"\n [attr.name]="name"\n [multiple]="multiple"\n >\n <mat-option *ngFor="let selection of selections" [value]="selection.value || selection">\n {{ selection.label || selection }}\n </mat-option>\n </mat-select>\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-select-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-select-wrapper .td-dynamic-select-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var E=function(){this.label="",this.hint="",this.name="",this.type=void 0,this.required=void 0,this.min=void 0,this.max=void 0,this.errorMessageTemplate=void 0,this.placeholder=""};E.decorators=[{type:t.Component,args:[{selector:"td-dynamic-datepicker",template:'<div class="td-dynamic-datepicker-wrapper">\n <mat-form-field class="td-dynamic-datepicker-field">\n <mat-label>{{ label }}</mat-label>\n <input\n #elementInput\n matInput\n [matDatepicker]="dynamicDatePicker"\n [formControl]="control"\n [placeholder]="placeholder"\n [required]="required"\n [name]="name"\n [min]="min"\n [max]="max"\n />\n <mat-hint>{{ hint }}</mat-hint>\n <mat-error>\n <ng-template\n [ngTemplateOutlet]="errorMessageTemplate"\n [ngTemplateOutletContext]="{ control: control, errors: control?.errors }"\n ></ng-template>\n </mat-error>\n <mat-datepicker-toggle matSuffix [for]="dynamicDatePicker"></mat-datepicker-toggle>\n <mat-datepicker #dynamicDatePicker></mat-datepicker>\n </mat-form-field>\n</div>\n',styles:[".td-dynamic-datepicker-wrapper{-ms-flex-direction:row;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row}.td-dynamic-datepicker-wrapper .td-dynamic-datepicker-field{-ms-flex:1;box-sizing:border-box;flex:1}"]}]}];var M={Text:"text",Boolean:"boolean",Number:"number",Array:"array",Date:"date"},I={Input:"input",Datepicker:"datepicker",Password:"password",Textarea:"textarea",Slider:"slider",SlideToggle:"slide-toggle",Checkbox:"checkbox",Select:"select",FileInput:"file-input"};var q=/^[^0-9][^\@]*$/,O=function(){function e(){}return e.prototype.validateDynamicElementName=function(e){if(!q.test(e))throw new Error('Dynamic element name: "${name}" is not valid.')},e.prototype.getDynamicElement=function(e){switch(e){case M.Text:case M.Number:case I.Input:case I.Password:return _;case I.Textarea:return w;case M.Boolean:case I.SlideToggle:return T;case I.Checkbox:return D;case I.Slider:return k;case M.Array:case I.Select:return F;case I.FileInput:return C;case I.Datepicker:case M.Date:return E;default:throw new Error("Error: type "+e+" does not exist or not supported.")}},e.prototype.createFormControl=function(e){var t=this.createValidators(e);return new r.FormControl({value:e.default,disabled:e.disabled},t)},e.prototype.createValidators=function(e){var t;return e.required&&(t=r.Validators.required),(e.max||0===e.max)&&(t=r.Validators.compose([t,r.Validators.max(parseFloat(e.max))])),(e.min||0===e.min)&&(t=r.Validators.compose([t,r.Validators.min(parseFloat(e.min))])),(e.maxLength||0===e.maxLength)&&(t=r.Validators.compose([t,r.Validators.maxLength(parseFloat(e.maxLength))])),(e.minLength||0===e.minLength)&&(t=r.Validators.compose([t,r.Validators.minLength(parseFloat(e.minLength))])),e.validators&&e.validators.forEach((function(e){t=r.Validators.compose([t,e.validator])})),t},e}();function S(e){return e||new O}O.decorators=[{type:t.Injectable}];var R={provide:O,deps:[[new t.Optional,new t.SkipSelf,O]],useFactory:S},j=function(e){this._changeDetectorRef=e};var L=u.mixinControlValueAccessor(j),P=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.templateRef=t,r}return b(t,e),t}(h.TemplatePortalDirective);P.decorators=[{type:t.Directive,args:[{selector:"[tdDynamicFormsError]ng-template"}]}],P.ctorParameters=function(){return[{type:t.TemplateRef},{type:t.ViewContainerRef}]},P.propDecorators={tdDynamicFormsError:[{type:t.Input}]};var V=function(e){this.viewContainer=e};V.decorators=[{type:t.Directive,args:[{selector:"[tdDynamicContainer]"}]}],V.ctorParameters=function(){return[{type:t.ViewContainerRef}]};var A=function(e){function n(t,n,r){var a=e.call(this,r)||this;return a._componentFactoryResolver=t,a._dynamicFormsService=n,a.label="",a.hint="",a.name="",a.type=void 0,a.required=void 0,a.min=void 0,a.max=void 0,a.minLength=void 0,a.maxLength=void 0,a.selections=void 0,a.multiple=void 0,a.errorMessageTemplate=void 0,a.placeholder="",a}return b(n,e),Object.defineProperty(n.prototype,"maxAttr",{get:function(){return this.max},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"minAttr",{get:function(){return this.min},enumerable:!1,configurable:!0}),n.prototype.ngOnInit=function(){var e=this,n=this.type instanceof t.Type?this.type:this._dynamicFormsService.getDynamicElement(this.type),r=this._componentFactoryResolver.resolveComponentFactory(n).create(this.childElement.viewContainer.injector);this.childElement.viewContainer.insert(r.hostView),this._instance=r.instance,this._instance.control=this.dynamicControl,this._instance.label=this.label,this._instance.hint=this.hint,this._instance.name=this.name,this._instance.type=this.type,this._instance.value=this.value,this._instance.required=this.required,this._instance.min=this.min,this._instance.max=this.max,this._instance.minLength=this.minLength,this._instance.maxLength=this.maxLength,this._instance.selections=this.selections,this._instance.multiple=this.multiple,this._instance.errorMessageTemplate=this.errorMessageTemplate,this._instance.placeholder=this.placeholder,this.customConfig&&Object.getOwnPropertyNames(this.customConfig).forEach((function(t){e._instance[t]=e.customConfig[t]}))},n.prototype.ngOnChanges=function(e){var t,n;if(this._instance)try{for(var r=v(Object.keys(e)),a=r.next();!a.done;a=r.next()){var i=a.value;this._instance[i]=e[i].currentValue}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},n}(L);A.decorators=[{type:t.Component,args:[{providers:[O,{provide:r.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return A})),multi:!0}],selector:"td-dynamic-element",template:"<div tdDynamicContainer></div>"}]}],A.ctorParameters=function(){return[{type:t.ComponentFactoryResolver},{type:O},{type:t.ChangeDetectorRef}]},A.propDecorators={dynamicControl:[{type:t.Input}],label:[{type:t.Input}],hint:[{type:t.Input}],name:[{type:t.Input}],type:[{type:t.Input}],required:[{type:t.Input}],min:[{type:t.Input}],max:[{type:t.Input}],minLength:[{type:t.Input}],maxLength:[{type:t.Input}],selections:[{type:t.Input}],multiple:[{type:t.Input}],customConfig:[{type:t.Input}],errorMessageTemplate:[{type:t.Input}],placeholder:[{type:t.Input}],childElement:[{type:t.ViewChild,args:[V,{static:!0}]}],maxAttr:[{type:t.HostBinding,args:["attr.max"]}],minAttr:[{type:t.HostBinding,args:["attr.min"]}]};var z=function(){function e(e,t,n){this._formBuilder=e,this._dynamicFormsService=t,this._changeDetectorRef=n,this._renderedElements=[],this._templateMap=new Map,this._destroy$=new y.Subject,this._destroyControl$=new y.Subject,this.dynamicForm=this._formBuilder.group({})}return Object.defineProperty(e.prototype,"elements",{get:function(){return this._renderedElements},set:function(e){this._elements=e||[],this._rerenderElements()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"form",{get:function(){return this.dynamicForm},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!!this.dynamicForm&&this.dynamicForm.valid},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.dynamicForm?this.dynamicForm.value:{}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){var e,t;if(this.dynamicForm){var n={};try{for(var r=v(Object.keys(this.dynamicForm.controls)),a=r.next();!a.done;a=r.next()){var i=a.value;n[i]=this.dynamicForm.controls[i].errors}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return n}return{}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"controls",{get:function(){return this.dynamicForm?this.dynamicForm.controls:{}},enumerable:!1,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._updateErrorTemplates()},e.prototype.ngOnDestroy=function(){this._destroy$.next(),this._destroy$.complete(),this._destroyControl$.complete()},e.prototype.refresh=function(){this._rerenderElements(),this._updateErrorTemplates()},e.prototype.getErrorTemplateRef=function(e){return this._templateMap.get(e)},e.prototype._updateErrorTemplates=function(){var e,t;this._templateMap=new Map;try{for(var n=v(this._errorTemplates.toArray()),r=n.next();!r.done;r=n.next()){var a=r.value;this._templateMap.set(a.tdDynamicFormsError,a.templateRef)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype._rerenderElements=function(){var e=this;this._clearRemovedElements(),this._renderedElements=[];var t=[];this._elements.forEach((function(n){if(e._dynamicFormsService.validateDynamicElementName(n.name),t.indexOf(n.name)>-1)throw new Error('Dynamic element name: "'+n.name+'" is duplicated');t.push(n.name);var r=e.dynamicForm.get(n.name);r?(r.setValue(n.default),r.markAsPristine(),r.markAsUntouched(),n.disabled?r.disable():r.enable(),r.setValidators(e._dynamicFormsService.createValidators(n))):(e.dynamicForm.addControl(n.name,e._dynamicFormsService.createFormControl(n)),e._subscribeToControlStatusChanges(n.name)),e._renderedElements.push(Object.assign({},n))})),this._changeDetectorRef.detectChanges(),y.timer().toPromise().then((function(){e._changeDetectorRef.markForCheck()}))},e.prototype._clearRemovedElements=function(){var e=this;this._renderedElements=this._renderedElements.filter((function(t){return!e._elements.some((function(e){return e.name===t.name}))})),this._renderedElements.forEach((function(t){e._destroyControl$.next(t.name),e.dynamicForm.removeControl(t.name)}))},e.prototype._subscribeToControlStatusChanges=function(e){var t=this,n=this.controls[e],r=this._destroyControl$.pipe(g.filter((function(t){return t===e})));n.statusChanges.pipe(g.takeUntil(this._destroy$),g.takeUntil(r)).subscribe((function(){t._changeDetectorRef.markForCheck()}))},e}();z.decorators=[{type:t.Component,args:[{selector:"td-dynamic-forms",template:'<form [formGroup]="dynamicForm" novalidate>\n <div class="td-dynamic-form-wrapper">\n <ng-template let-element ngFor [ngForOf]="elements">\n <div\n class="td-dynamic-element-wrapper"\n [style.max-width.%]="element.flex ? element.flex : 100"\n [style.flex]="\'1 1 \' + (element.flex ? element.flex : 100) + \'%\'"\n [style.-ms-flex]="\'1 1 \' + (element.flex ? element.flex : 100) + \'%\'"\n [style.-webkit-box-flex]="1"\n >\n <td-dynamic-element\n #dynamicElement\n *ngIf="dynamicForm.controls[element.name]"\n [formControlName]="element.name"\n [dynamicControl]="dynamicForm.controls[element.name]"\n [id]="element.name"\n [name]="element.name"\n [label]="element.label || element.name"\n [hint]="element.hint"\n [type]="element.type"\n [required]="element.required"\n [min]="element.min"\n [max]="element.max"\n [minLength]="element.minLength"\n [maxLength]="element.maxLength"\n [selections]="element.selections"\n [multiple]="element.multiple"\n [customConfig]="element.customConfig"\n [errorMessageTemplate]="getErrorTemplateRef(element.name)"\n [placeholder]="element.placeholder"\n ></td-dynamic-element>\n </div>\n </ng-template>\n </div>\n <ng-content></ng-content>\n</form>\n',changeDetection:t.ChangeDetectionStrategy.OnPush,styles:[".td-dynamic-form-wrapper{-ms-flex-align:center;-ms-flex-direction:row;-ms-flex-line-pack:center;-ms-flex-pack:start;-ms-flex-wrap:wrap;align-content:center;align-items:center;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;max-width:100%}.td-dynamic-form-wrapper ::ng-deep .mat-form-field-infix{width:auto}.td-dynamic-form-wrapper ::ng-deep .td-dynamic-element-hint{display:block;font-size:75%}.td-dynamic-form-wrapper .td-dynamic-element-wrapper{box-sizing:border-box;max-height:100%;padding:4px 4px 8px;position:relative}"]}]}],z.ctorParameters=function(){return[{type:r.FormBuilder},{type:O},{type:t.ChangeDetectorRef}]},z.propDecorators={_errorTemplates:[{type:t.ContentChildren,args:[P,{descendants:!0}]}],elements:[{type:t.Input,args:["elements"]}]};var N=[z,A,V,P],B=[_,C,w,T,D,k,F,E],$=function(){};$.decorators=[{type:t.NgModule,args:[{declarations:[N,B],imports:[n.CommonModule,r.ReactiveFormsModule,a.MatFormFieldModule,i.MatInputModule,o.MatSelectModule,l.MatCheckboxModule,m.MatSliderModule,s.MatSlideToggleModule,c.MatIconModule,d.MatButtonModule,p.MatDatepickerModule,u.CovalentCommonModule,f.CovalentFileModule],exports:[N,B],providers:[R]}]}],e.CovalentDynamicFormsModule=$,e.DYNAMIC_ELEMENT_NAME_REGEX=q,e.DYNAMIC_FORMS_PROVIDER=R,e.DYNAMIC_FORMS_PROVIDER_FACTORY=S,e.TdDynamicCheckboxComponent=D,e.TdDynamicDatepickerComponent=E,e.TdDynamicElement=I,e.TdDynamicElementBase=j,e.TdDynamicElementComponent=A,e.TdDynamicElementDirective=V,e.TdDynamicFileInputComponent=C,e.TdDynamicFormsComponent=z,e.TdDynamicFormsErrorTemplateDirective=P,e.TdDynamicFormsService=O,e.TdDynamicInputComponent=_,e.TdDynamicSelectComponent=F,e.TdDynamicSlideToggleComponent=T,e.TdDynamicSliderComponent=k,e.TdDynamicTextareaComponent=w,e.TdDynamicType=M,e._TdDynamicElementMixinBase=L,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
16
16
|
//# sourceMappingURL=covalent-dynamic-forms.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-input/dynamic-input.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-file-input/dynamic-file-input.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-textarea/dynamic-textarea.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-slider/dynamic-slider.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-select/dynamic-select.component.ts","../../../../src/platform/dynamic-forms/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.ts","../../../../src/platform/dynamic-forms/services/dynamic-forms.service.ts","../../../../src/platform/dynamic-forms/dynamic-element.component.ts","../../../../src/platform/dynamic-forms/dynamic-forms.component.ts","../../../../src/platform/dynamic-forms/dynamic-forms.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","TypeError","label","hint","type","undefined","required","name","min","max","minLength","maxLength","errorMessageTemplate","Component","args","selector","template","TdDynamicFileInputComponent","_handlefileDrop","control","setValue","TdDynamicSliderComponent","_changeDetectorRef","_handleBlur","_this","setTimeout","markForCheck","ChangeDetectorRef","selections","multiple","TdDynamicType","Text","Boolean","Number","Date","TdDynamicElement","Input","Datepicker","Password","Textarea","Slider","SlideToggle","Checkbox","Select","FileInput","DYNAMIC_ELEMENT_NAME_REGEX","TdDynamicFormsService","validateDynamicElementName","test","Error","getDynamicElement","element","TdDynamicInputComponent","TdDynamicTextareaComponent","TdDynamicSlideToggleComponent","TdDynamicCheckboxComponent","TdDynamicSelectComponent","TdDynamicDatepickerComponent","createFormControl","config","validator","createValidators","FormControl","default","disabled","Validators","compose","parseFloat","validators","forEach","validatorConfig","DYNAMIC_FORMS_PROVIDER_FACTORY","parent","Injectable","DYNAMIC_FORMS_PROVIDER","provide","deps","Optional","SkipSelf","useFactory","_TdDynamicElementMixinBase","mixinControlValueAccessor","TdDynamicElementBase","TdDynamicFormsErrorTemplateDirective","templateRef","viewContainerRef","_super","TemplatePortalDirective","Directive","TemplateRef","ViewContainerRef","viewContainer","TdDynamicElementComponent","_componentFactoryResolver","_dynamicFormsService","defineProperty","ngOnInit","component","Type","ref","resolveComponentFactory","childElement","injector","insert","hostView","_instance","instance","dynamicControl","customConfig","getOwnPropertyNames","ngOnChanges","changes","_b","keys","_c","prop","currentValue","providers","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ComponentFactoryResolver","ViewChild","TdDynamicElementDirective","static","HostBinding","TdDynamicFormsComponent","_formBuilder","_renderedElements","_templateMap","Map","_destroy$","Subject","_destroyControl$","dynamicForm","group","elements","_elements","_rerenderElements","valid","errors","controls","ngAfterContentInit","_updateErrorTemplates","ngOnDestroy","complete","refresh","getErrorTemplateRef","get","_errorTemplates","toArray","errorTemplate","set","tdDynamicFormsError","_clearRemovedElements","duplicates","elem","indexOf","push","dynamicElement","markAsPristine","markAsUntouched","disable","enable","setValidators","addControl","_subscribeToControlStatusChanges","assign","detectChanges","timer","toPromise","then","filter","renderedElement","some","removeControl","elementName","controlDestroyed$","pipe","destroyedElementName","statusChanges","takeUntil","subscribe","changeDetection","ChangeDetectionStrategy","OnPush","FormBuilder","ContentChildren","descendants","TD_DYNAMIC_FORMS","TD_DYNAMIC_FORMS_ENTRY_COMPONENTS","NgModule","declarations","imports","CommonModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","MatSelectModule","MatCheckboxModule","MatSliderModule","MatSlideToggleModule","MatIconModule","MatButtonModule","MatDatepickerModule","CovalentCommonModule","CovalentFileModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-input',\n styleUrls: ['./dynamic-input.component.scss'],\n templateUrl: './dynamic-input.component.html',\n})\nexport class TdDynamicInputComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n type: string = undefined;\n\n required: boolean = undefined;\n\n name: string = '';\n\n min: number = undefined;\n\n max: number = undefined;\n\n minLength: number = undefined;\n\n maxLength: number = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-file-input',\n styleUrls: ['./dynamic-file-input.component.scss'],\n templateUrl: './dynamic-file-input.component.html',\n})\nexport class TdDynamicFileInputComponent {\n control: FormControl;\n\n required: boolean = undefined;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n _handlefileDrop(value: File): void {\n this.control.setValue(value);\n }\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-textarea',\n styleUrls: ['./dynamic-textarea.component.scss'],\n templateUrl: './dynamic-textarea.component.html',\n})\nexport class TdDynamicTextareaComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n required: boolean = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n}\n","import { Component } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-slide-toggle',\n styleUrls: ['./dynamic-slide-toggle.component.scss'],\n templateUrl: './dynamic-slide-toggle.component.html',\n})\nexport class TdDynamicSlideToggleComponent {\n control: FormControl;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n required: boolean = false;\n}\n","import { Component } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-checkbox',\n styleUrls: ['./dynamic-checkbox.component.scss'],\n templateUrl: './dynamic-checkbox.component.html',\n})\nexport class TdDynamicCheckboxComponent {\n control: FormControl;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n required: boolean = false;\n}\n","import { Component, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-slider',\n styleUrls: ['./dynamic-slider.component.scss'],\n templateUrl: './dynamic-slider.component.html',\n})\nexport class TdDynamicSliderComponent {\n control: FormControl;\n\n label: string = '';\n\n required: boolean = undefined;\n\n name: string = '';\n\n hint: string = '';\n\n min: number = undefined;\n\n max: number = undefined;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n _handleBlur(): void {\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-select',\n styleUrls: ['./dynamic-select.component.scss'],\n templateUrl: './dynamic-select.component.html',\n})\nexport class TdDynamicSelectComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n required: boolean = undefined;\n\n selections: any[] = undefined;\n\n multiple: boolean = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-datepicker',\n styleUrls: ['./dynamic-datepicker.component.scss'],\n templateUrl: './dynamic-datepicker.component.html',\n})\nexport class TdDynamicDatepickerComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n type: string = undefined;\n\n required: boolean = undefined;\n\n min: number = undefined;\n\n max: number = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n}\n","import { Injectable, Provider, SkipSelf, Optional, Type } from '@angular/core';\nimport { Validators, ValidatorFn, FormControl, AbstractControl } from '@angular/forms';\n\nimport { TdDynamicInputComponent } from '../dynamic-elements/dynamic-input/dynamic-input.component';\nimport { TdDynamicFileInputComponent } from '../dynamic-elements/dynamic-file-input/dynamic-file-input.component';\nimport { TdDynamicTextareaComponent } from '../dynamic-elements/dynamic-textarea/dynamic-textarea.component';\nimport { TdDynamicSlideToggleComponent } from '../dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';\nimport { TdDynamicCheckboxComponent } from '../dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';\nimport { TdDynamicSliderComponent } from '../dynamic-elements/dynamic-slider/dynamic-slider.component';\nimport { TdDynamicSelectComponent } from '../dynamic-elements/dynamic-select/dynamic-select.component';\nimport { TdDynamicDatepickerComponent } from '../dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';\n\nexport enum TdDynamicType {\n Text = 'text',\n Boolean = 'boolean',\n Number = 'number',\n Array = 'array',\n Date = 'date',\n}\n\nexport enum TdDynamicElement {\n Input = 'input',\n Datepicker = 'datepicker',\n Password = 'password',\n Textarea = 'textarea',\n Slider = 'slider',\n SlideToggle = 'slide-toggle',\n Checkbox = 'checkbox',\n Select = 'select',\n FileInput = 'file-input',\n}\n\nexport interface ITdDynamicElementValidator {\n validator: ValidatorFn;\n}\n\n// Property values to be set in custom component\nexport interface ITdDynamicElementCustomConfig {\n [name: string]: any;\n}\n\nexport interface ITdDynamicElementConfig {\n label?: string;\n name: string;\n hint?: string;\n type: TdDynamicType | TdDynamicElement | Type<any>;\n required?: boolean;\n disabled?: boolean;\n min?: any;\n max?: any;\n minLength?: any;\n maxLength?: any;\n selections?: string[] | { value: any; label: string }[];\n multiple?: boolean;\n default?: any;\n flex?: number;\n validators?: ITdDynamicElementValidator[];\n customConfig?: ITdDynamicElementCustomConfig;\n}\n\nexport const DYNAMIC_ELEMENT_NAME_REGEX: RegExp = /^[^0-9][^\\@]*$/;\n\n@Injectable()\nexport class TdDynamicFormsService {\n /**\n * Method to validate if the [name] is a proper element name.\n * Throws error if name is not valid.\n */\n validateDynamicElementName(name: string): void {\n if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) {\n throw new Error('Dynamic element name: \"${name}\" is not valid.');\n }\n }\n\n /**\n * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]\n * Throws error if it does not exists or not supported.\n */\n getDynamicElement(element: TdDynamicElement | TdDynamicType | Type<any>): any {\n switch (element) {\n case TdDynamicType.Text:\n case TdDynamicType.Number:\n case TdDynamicElement.Input:\n case TdDynamicElement.Password:\n return TdDynamicInputComponent;\n case TdDynamicElement.Textarea:\n return TdDynamicTextareaComponent;\n case TdDynamicType.Boolean:\n case TdDynamicElement.SlideToggle:\n return TdDynamicSlideToggleComponent;\n case TdDynamicElement.Checkbox:\n return TdDynamicCheckboxComponent;\n case TdDynamicElement.Slider:\n return TdDynamicSliderComponent;\n case TdDynamicType.Array:\n case TdDynamicElement.Select:\n return TdDynamicSelectComponent;\n case TdDynamicElement.FileInput:\n return TdDynamicFileInputComponent;\n case TdDynamicElement.Datepicker:\n case TdDynamicType.Date:\n return TdDynamicDatepickerComponent;\n default:\n throw new Error(`Error: type ${element} does not exist or not supported.`);\n }\n }\n\n /**\n * Creates form control for element depending [ITdDynamicElementConfig] properties.\n */\n createFormControl(config: ITdDynamicElementConfig): FormControl {\n const validator: ValidatorFn = this.createValidators(config);\n return new FormControl({ value: config.default, disabled: config.disabled }, validator);\n }\n\n /**\n * Creates form validationdepending [ITdDynamicElementConfig] properties.\n */\n createValidators(config: ITdDynamicElementConfig): ValidatorFn {\n let validator: ValidatorFn;\n if (config.required) {\n validator = Validators.required;\n }\n if (config.max || config.max === 0) {\n validator = Validators.compose([validator, Validators.max(parseFloat(config.max))]);\n }\n if (config.min || config.min === 0) {\n validator = Validators.compose([validator, Validators.min(parseFloat(config.min))]);\n }\n if (config.maxLength || config.maxLength === 0) {\n validator = Validators.compose([validator, Validators.maxLength(parseFloat(config.maxLength))]);\n }\n if (config.minLength || config.minLength === 0) {\n validator = Validators.compose([validator, Validators.minLength(parseFloat(config.minLength))]);\n }\n // Add provided custom validators to the validator function\n if (config.validators) {\n config.validators.forEach((validatorConfig: ITdDynamicElementValidator) => {\n validator = Validators.compose([validator, validatorConfig.validator]);\n });\n }\n return validator;\n }\n}\n\nexport function DYNAMIC_FORMS_PROVIDER_FACTORY(parent: TdDynamicFormsService): TdDynamicFormsService {\n return parent || new TdDynamicFormsService();\n}\n\nexport const DYNAMIC_FORMS_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdDynamicFormsService,\n deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]],\n useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY,\n};\n","import {\n Component,\n Directive,\n Input,\n HostBinding,\n OnInit,\n SimpleChanges,\n OnChanges,\n TemplateRef,\n ChangeDetectorRef,\n Type,\n} from '@angular/core';\nimport { ViewChild, ViewContainerRef } from '@angular/core';\nimport { ComponentFactoryResolver, ComponentRef, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n\nimport { mixinControlValueAccessor, IControlValueAccessor } from '@covalent/core/common';\n\nimport {\n TdDynamicElement,\n TdDynamicType,\n TdDynamicFormsService,\n ITdDynamicElementCustomConfig,\n} from './services/dynamic-forms.service';\n\nexport class TdDynamicElementBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdDynamicElementMixinBase = mixinControlValueAccessor(TdDynamicElementBase);\n\n@Directive({ selector: '[tdDynamicFormsError]ng-template' })\nexport class TdDynamicFormsErrorTemplateDirective extends TemplatePortalDirective {\n @Input() tdDynamicFormsError: string;\n constructor(public templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[tdDynamicContainer]',\n})\nexport class TdDynamicElementDirective {\n constructor(public viewContainer: ViewContainerRef) {}\n}\n\n@Component({\n providers: [\n TdDynamicFormsService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDynamicElementComponent),\n multi: true,\n },\n ],\n selector: 'td-dynamic-element',\n template: '<div tdDynamicContainer></div>',\n})\nexport class TdDynamicElementComponent\n extends _TdDynamicElementMixinBase\n implements IControlValueAccessor, OnInit, OnChanges {\n private _instance: any;\n\n /**\n * Sets form control of the element.\n */\n @Input() dynamicControl: FormControl;\n\n /**\n * Sets label to be displayed.\n */\n @Input() label: string = '';\n\n /**\n * Sets hint to be displayed.\n */\n @Input() hint: string = '';\n\n /**\n * Sets name to be displayed as attribute.\n */\n @Input() name: string = '';\n\n /**\n * Sets type or element of element to be rendered.\n * Throws error if does not exist or no supported.\n */\n @Input() type: TdDynamicElement | TdDynamicType | Type<any> = undefined;\n\n /**\n * Sets required validation checkup (if supported by element).\n */\n @Input() required: boolean = undefined;\n\n /**\n * Sets min validation checkup (if supported by element).\n */\n @Input() min: number = undefined;\n\n /**\n * Sets max validation checkup (if supported by element).\n */\n @Input() max: number = undefined;\n\n /**\n * Sets minLength validation checkup (if supported by element).\n */\n @Input() minLength: number = undefined;\n\n /**\n * Sets maxLength validation checkup (if supported by element).\n */\n @Input() maxLength: number = undefined;\n\n /**\n * Sets selections for array elements (if supported by element).\n */\n @Input() selections: any[] = undefined;\n\n /**\n * Sets multiple property for array elements (if supported by element).\n */\n @Input() multiple: boolean = undefined;\n\n /**\n * Sets any additional properties on custom component.\n */\n @Input() customConfig: ITdDynamicElementCustomConfig;\n\n /**\n * Sets error message template so it can be injected into dynamic components.\n */\n @Input() errorMessageTemplate: TemplateRef<any> = undefined;\n\n @ViewChild(TdDynamicElementDirective, { static: true }) childElement: TdDynamicElementDirective;\n\n @HostBinding('attr.max')\n get maxAttr(): any {\n return this.max;\n }\n\n @HostBinding('attr.min')\n get minAttr(): any {\n return this.min;\n }\n\n constructor(\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _dynamicFormsService: TdDynamicFormsService,\n _changeDetectorRef: ChangeDetectorRef,\n ) {\n super(_changeDetectorRef);\n }\n\n ngOnInit(): void {\n const component: any =\n <any>this.type instanceof Type ? this.type : this._dynamicFormsService.getDynamicElement(this.type);\n const ref: ComponentRef<any> = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(this.childElement.viewContainer.injector);\n this.childElement.viewContainer.insert(ref.hostView);\n this._instance = ref.instance;\n this._instance.control = this.dynamicControl;\n this._instance.label = this.label;\n this._instance.hint = this.hint;\n this._instance.name = this.name;\n this._instance.type = this.type;\n this._instance.value = this.value;\n this._instance.required = this.required;\n this._instance.min = this.min;\n this._instance.max = this.max;\n this._instance.minLength = this.minLength;\n this._instance.maxLength = this.maxLength;\n this._instance.selections = this.selections;\n this._instance.multiple = this.multiple;\n this._instance.errorMessageTemplate = this.errorMessageTemplate;\n if (this.customConfig) {\n Object.getOwnPropertyNames(this.customConfig).forEach((name: string) => {\n this._instance[name] = this.customConfig[name];\n });\n }\n }\n\n /**\n * Reassign any inputs that have changed\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._instance) {\n for (const prop of Object.keys(changes)) {\n this._instance[prop] = changes[prop].currentValue;\n }\n }\n }\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChildren,\n TemplateRef,\n QueryList,\n AfterContentInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';\n\nimport { TdDynamicFormsService, ITdDynamicElementConfig } from './services/dynamic-forms.service';\nimport { TdDynamicFormsErrorTemplateDirective } from './dynamic-element.component';\n\nimport { timer, Subject, Observable } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\n\n@Component({\n selector: 'td-dynamic-forms',\n templateUrl: './dynamic-forms.component.html',\n styleUrls: ['./dynamic-forms.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDynamicFormsComponent implements AfterContentInit, OnDestroy {\n private _renderedElements: ITdDynamicElementConfig[] = [];\n private _elements: ITdDynamicElementConfig[];\n private _templateMap: Map<string, TemplateRef<any>> = new Map<string, TemplateRef<any>>();\n private _destroy$: Subject<any> = new Subject();\n private _destroyControl$: Subject<string> = new Subject();\n\n @ContentChildren(TdDynamicFormsErrorTemplateDirective, { descendants: true })\n _errorTemplates: QueryList<TdDynamicFormsErrorTemplateDirective>;\n dynamicForm: FormGroup;\n\n /**\n * elements: ITdDynamicElementConfig[]\n * JS Object that will render the elements depending on its config.\n * [name] property is required.\n */\n @Input('elements')\n set elements(elements: ITdDynamicElementConfig[]) {\n if (elements) {\n this._elements = elements;\n } else {\n this._elements = [];\n }\n this._rerenderElements();\n }\n get elements(): ITdDynamicElementConfig[] {\n return this._renderedElements;\n }\n\n /**\n * Getter property for dynamic [FormGroup].\n */\n get form(): FormGroup {\n return this.dynamicForm;\n }\n\n /**\n * Getter property for [valid] of dynamic [FormGroup].\n */\n get valid(): boolean {\n if (this.dynamicForm) {\n return this.dynamicForm.valid;\n }\n return false;\n }\n\n /**\n * Getter property for [value] of dynamic [FormGroup].\n */\n get value(): any {\n if (this.dynamicForm) {\n return this.dynamicForm.value;\n }\n return {};\n }\n\n /**\n * Getter property for [errors] of dynamic [FormGroup].\n */\n get errors(): { [name: string]: any } {\n if (this.dynamicForm) {\n const errors: { [name: string]: any } = {};\n for (const name of Object.keys(this.dynamicForm.controls)) {\n errors[name] = this.dynamicForm.controls[name].errors;\n }\n return errors;\n }\n return {};\n }\n\n /**\n * Getter property for [controls] of dynamic [FormGroup].\n */\n get controls(): { [key: string]: AbstractControl } {\n if (this.dynamicForm) {\n return this.dynamicForm.controls;\n }\n return {};\n }\n\n constructor(\n private _formBuilder: FormBuilder,\n private _dynamicFormsService: TdDynamicFormsService,\n private _changeDetectorRef: ChangeDetectorRef,\n ) {\n this.dynamicForm = this._formBuilder.group({});\n }\n\n ngAfterContentInit(): void {\n this._updateErrorTemplates();\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._destroyControl$.complete();\n }\n\n /**\n * Refreshes the form and rerenders all validator/element modifications.\n */\n refresh(): void {\n this._rerenderElements();\n this._updateErrorTemplates();\n }\n\n /**\n * Getter method for error template references\n */\n getErrorTemplateRef(name: string): TemplateRef<any> {\n return this._templateMap.get(name);\n }\n\n /**\n * Loads error templates and sets them in a map for faster access.\n */\n private _updateErrorTemplates(): void {\n this._templateMap = new Map<string, TemplateRef<any>>();\n for (const errorTemplate of this._errorTemplates.toArray()) {\n this._templateMap.set(errorTemplate.tdDynamicFormsError, errorTemplate.templateRef);\n }\n }\n\n private _rerenderElements(): void {\n this._clearRemovedElements();\n this._renderedElements = [];\n const duplicates: string[] = [];\n this._elements.forEach((elem: ITdDynamicElementConfig) => {\n this._dynamicFormsService.validateDynamicElementName(elem.name);\n if (duplicates.indexOf(elem.name) > -1) {\n throw new Error(`Dynamic element name: \"${elem.name}\" is duplicated`);\n }\n duplicates.push(elem.name);\n const dynamicElement: AbstractControl = this.dynamicForm.get(elem.name);\n if (!dynamicElement) {\n this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));\n this._subscribeToControlStatusChanges(elem.name);\n } else {\n dynamicElement.setValue(elem.default);\n dynamicElement.markAsPristine();\n dynamicElement.markAsUntouched();\n if (elem.disabled) {\n dynamicElement.disable();\n } else {\n dynamicElement.enable();\n }\n dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));\n }\n // copy objects so they are only changes when calling this method\n this._renderedElements.push(Object.assign({}, elem));\n });\n // call a change detection since the whole form might change\n this._changeDetectorRef.detectChanges();\n timer()\n .toPromise()\n .then(() => {\n // call a markForCheck so elements are rendered correctly in OnPush\n this._changeDetectorRef.markForCheck();\n });\n }\n\n private _clearRemovedElements(): void {\n this._renderedElements = this._renderedElements.filter(\n (renderedElement: ITdDynamicElementConfig) =>\n !this._elements.some((element: ITdDynamicElementConfig) => element.name === renderedElement.name),\n );\n // remove elements that were removed from the array\n this._renderedElements.forEach((elem: ITdDynamicElementConfig) => {\n this._destroyControl$.next(elem.name);\n this.dynamicForm.removeControl(elem.name);\n });\n }\n\n // Updates component when manually adding errors to controls\n private _subscribeToControlStatusChanges(elementName: string): void {\n const control: AbstractControl = this.controls[elementName];\n\n const controlDestroyed$: Observable<any> = this._destroyControl$.pipe(\n filter((destroyedElementName: string) => destroyedElementName === elementName),\n );\n\n control.statusChanges.pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\nimport { CovalentCommonModule } from '@covalent/core/common';\nimport { CovalentFileModule } from '@covalent/core/file';\n\nimport { TdDynamicFormsComponent } from './dynamic-forms.component';\nimport {\n TdDynamicElementComponent,\n TdDynamicElementDirective,\n TdDynamicFormsErrorTemplateDirective,\n} from './dynamic-element.component';\nimport { DYNAMIC_FORMS_PROVIDER } from './services/dynamic-forms.service';\n\nimport { TdDynamicInputComponent } from './dynamic-elements/dynamic-input/dynamic-input.component';\nimport { TdDynamicFileInputComponent } from './dynamic-elements/dynamic-file-input/dynamic-file-input.component';\nimport { TdDynamicTextareaComponent } from './dynamic-elements/dynamic-textarea/dynamic-textarea.component';\nimport { TdDynamicSlideToggleComponent } from './dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';\nimport { TdDynamicCheckboxComponent } from './dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';\nimport { TdDynamicSliderComponent } from './dynamic-elements/dynamic-slider/dynamic-slider.component';\nimport { TdDynamicSelectComponent } from './dynamic-elements/dynamic-select/dynamic-select.component';\nimport { TdDynamicDatepickerComponent } from './dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';\n\nconst TD_DYNAMIC_FORMS: Type<any>[] = [\n TdDynamicFormsComponent,\n TdDynamicElementComponent,\n TdDynamicElementDirective,\n TdDynamicFormsErrorTemplateDirective,\n];\n\nconst TD_DYNAMIC_FORMS_ENTRY_COMPONENTS: Type<any>[] = [\n TdDynamicInputComponent,\n TdDynamicFileInputComponent,\n TdDynamicTextareaComponent,\n TdDynamicSlideToggleComponent,\n TdDynamicCheckboxComponent,\n TdDynamicSliderComponent,\n TdDynamicSelectComponent,\n TdDynamicDatepickerComponent,\n];\n\n@NgModule({\n declarations: [TD_DYNAMIC_FORMS, TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatCheckboxModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatIconModule,\n MatButtonModule,\n MatDatepickerModule,\n CovalentCommonModule,\n CovalentFileModule,\n ],\n exports: [TD_DYNAMIC_FORMS, TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],\n providers: [DYNAMIC_FORMS_PROVIDER],\n})\nexport class CovalentDynamicFormsModule {}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../src/platform/dynamic-forms/dynamic-elements/dynamic-input/dynamic-input.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-file-input/dynamic-file-input.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-textarea/dynamic-textarea.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-checkbox/dynamic-checkbox.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-slider/dynamic-slider.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-select/dynamic-select.component.ts","../../src/platform/dynamic-forms/dynamic-elements/dynamic-datepicker/dynamic-datepicker.component.ts","../../../src/platform/dynamic-forms/services/dynamic-forms.service.ts","../../../../src/platform/dynamic-forms/dynamic-element.component.ts","../../../../src/platform/dynamic-forms/dynamic-forms.component.ts","../../../../src/platform/dynamic-forms/dynamic-forms.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","TypeError","label","hint","type","undefined","required","name","min","max","minLength","maxLength","errorMessageTemplate","placeholder","Component","args","selector","template","TdDynamicFileInputComponent","_handlefileDrop","control","setValue","TdDynamicSliderComponent","_changeDetectorRef","_handleBlur","_this","setTimeout","markForCheck","ChangeDetectorRef","selections","multiple","TdDynamicType","Text","Boolean","Number","Date","TdDynamicElement","Input","Datepicker","Password","Textarea","Slider","SlideToggle","Checkbox","Select","FileInput","DYNAMIC_ELEMENT_NAME_REGEX","TdDynamicFormsService","validateDynamicElementName","test","Error","getDynamicElement","element","TdDynamicInputComponent","TdDynamicTextareaComponent","TdDynamicSlideToggleComponent","TdDynamicCheckboxComponent","TdDynamicSelectComponent","TdDynamicDatepickerComponent","createFormControl","config","validator","createValidators","FormControl","default","disabled","Validators","compose","parseFloat","validators","forEach","validatorConfig","DYNAMIC_FORMS_PROVIDER_FACTORY","parent","Injectable","DYNAMIC_FORMS_PROVIDER","provide","deps","Optional","SkipSelf","useFactory","_TdDynamicElementMixinBase","mixinControlValueAccessor","TdDynamicElementBase","TdDynamicFormsErrorTemplateDirective","templateRef","viewContainerRef","_super","TemplatePortalDirective","Directive","TemplateRef","ViewContainerRef","viewContainer","TdDynamicElementComponent","_componentFactoryResolver","_dynamicFormsService","defineProperty","ngOnInit","component","Type","ref","resolveComponentFactory","childElement","injector","insert","hostView","_instance","instance","dynamicControl","customConfig","getOwnPropertyNames","ngOnChanges","changes","_b","keys","_c","prop","currentValue","providers","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","ComponentFactoryResolver","ViewChild","TdDynamicElementDirective","static","HostBinding","TdDynamicFormsComponent","_formBuilder","_renderedElements","_templateMap","Map","_destroy$","Subject","_destroyControl$","dynamicForm","group","elements","_elements","_rerenderElements","valid","errors","controls","ngAfterContentInit","_updateErrorTemplates","ngOnDestroy","complete","refresh","getErrorTemplateRef","get","_errorTemplates","toArray","errorTemplate","set","tdDynamicFormsError","_clearRemovedElements","duplicates","elem","indexOf","push","dynamicElement","markAsPristine","markAsUntouched","disable","enable","setValidators","addControl","_subscribeToControlStatusChanges","assign","detectChanges","timer","toPromise","then","filter","renderedElement","some","removeControl","elementName","controlDestroyed$","pipe","destroyedElementName","statusChanges","takeUntil","subscribe","changeDetection","ChangeDetectionStrategy","OnPush","FormBuilder","ContentChildren","descendants","TD_DYNAMIC_FORMS","TD_DYNAMIC_FORMS_ENTRY_COMPONENTS","NgModule","declarations","imports","CommonModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","MatSelectModule","MatCheckboxModule","MatSliderModule","MatSlideToggleModule","MatIconModule","MatButtonModule","MatDatepickerModule","CovalentCommonModule","CovalentFileModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-input',\n styleUrls: ['./dynamic-input.component.scss'],\n templateUrl: './dynamic-input.component.html',\n})\nexport class TdDynamicInputComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n type: string = undefined;\n\n required: boolean = undefined;\n\n name: string = '';\n\n min: number = undefined;\n\n max: number = undefined;\n\n minLength: number = undefined;\n\n maxLength: number = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n placeholder: string = '';\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-file-input',\n styleUrls: ['./dynamic-file-input.component.scss'],\n templateUrl: './dynamic-file-input.component.html',\n})\nexport class TdDynamicFileInputComponent {\n control: FormControl;\n\n required: boolean = undefined;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n placeholder: string = '';\n\n _handlefileDrop(value: File): void {\n this.control.setValue(value);\n }\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-textarea',\n styleUrls: ['./dynamic-textarea.component.scss'],\n templateUrl: './dynamic-textarea.component.html',\n})\nexport class TdDynamicTextareaComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n required: boolean = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n placeholder: string = '';\n}\n","import { Component } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-slide-toggle',\n styleUrls: ['./dynamic-slide-toggle.component.scss'],\n templateUrl: './dynamic-slide-toggle.component.html',\n})\nexport class TdDynamicSlideToggleComponent {\n control: FormControl;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n required: boolean = false;\n}\n","import { Component } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-checkbox',\n styleUrls: ['./dynamic-checkbox.component.scss'],\n templateUrl: './dynamic-checkbox.component.html',\n})\nexport class TdDynamicCheckboxComponent {\n control: FormControl;\n\n label: string = '';\n\n name: string = '';\n\n hint: string = '';\n\n required: boolean = false;\n}\n","import { Component, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-slider',\n styleUrls: ['./dynamic-slider.component.scss'],\n templateUrl: './dynamic-slider.component.html',\n})\nexport class TdDynamicSliderComponent {\n control: FormControl;\n\n label: string = '';\n\n required: boolean = undefined;\n\n name: string = '';\n\n hint: string = '';\n\n min: number = undefined;\n\n max: number = undefined;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n _handleBlur(): void {\n setTimeout(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-select',\n styleUrls: ['./dynamic-select.component.scss'],\n templateUrl: './dynamic-select.component.html',\n})\nexport class TdDynamicSelectComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n required: boolean = undefined;\n\n selections: any[] = undefined;\n\n multiple: boolean = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n placeholder: string = '';\n}\n","import { Component, TemplateRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'td-dynamic-datepicker',\n styleUrls: ['./dynamic-datepicker.component.scss'],\n templateUrl: './dynamic-datepicker.component.html',\n})\nexport class TdDynamicDatepickerComponent {\n control: FormControl;\n\n label: string = '';\n\n hint: string = '';\n\n name: string = '';\n\n type: string = undefined;\n\n required: boolean = undefined;\n\n min: number = undefined;\n\n max: number = undefined;\n\n errorMessageTemplate: TemplateRef<any> = undefined;\n\n placeholder: string = '';\n}\n","import { Injectable, Provider, SkipSelf, Optional, Type } from '@angular/core';\nimport { Validators, ValidatorFn, FormControl, AbstractControl } from '@angular/forms';\n\nimport { TdDynamicInputComponent } from '../dynamic-elements/dynamic-input/dynamic-input.component';\nimport { TdDynamicFileInputComponent } from '../dynamic-elements/dynamic-file-input/dynamic-file-input.component';\nimport { TdDynamicTextareaComponent } from '../dynamic-elements/dynamic-textarea/dynamic-textarea.component';\nimport { TdDynamicSlideToggleComponent } from '../dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';\nimport { TdDynamicCheckboxComponent } from '../dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';\nimport { TdDynamicSliderComponent } from '../dynamic-elements/dynamic-slider/dynamic-slider.component';\nimport { TdDynamicSelectComponent } from '../dynamic-elements/dynamic-select/dynamic-select.component';\nimport { TdDynamicDatepickerComponent } from '../dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';\n\nexport enum TdDynamicType {\n Text = 'text',\n Boolean = 'boolean',\n Number = 'number',\n Array = 'array',\n Date = 'date',\n}\n\nexport enum TdDynamicElement {\n Input = 'input',\n Datepicker = 'datepicker',\n Password = 'password',\n Textarea = 'textarea',\n Slider = 'slider',\n SlideToggle = 'slide-toggle',\n Checkbox = 'checkbox',\n Select = 'select',\n FileInput = 'file-input',\n}\n\nexport interface ITdDynamicElementValidator {\n validator: ValidatorFn;\n}\n\n// Property values to be set in custom component\nexport interface ITdDynamicElementCustomConfig {\n [name: string]: any;\n}\n\nexport interface ITdDynamicElementConfig {\n label?: string;\n name: string;\n hint?: string;\n type: TdDynamicType | TdDynamicElement | Type<any>;\n required?: boolean;\n disabled?: boolean;\n min?: any;\n max?: any;\n minLength?: any;\n maxLength?: any;\n selections?: string[] | { value: any; label: string }[];\n multiple?: boolean;\n default?: any;\n flex?: number;\n validators?: ITdDynamicElementValidator[];\n customConfig?: ITdDynamicElementCustomConfig;\n placeholder?: string;\n}\n\nexport const DYNAMIC_ELEMENT_NAME_REGEX: RegExp = /^[^0-9][^\\@]*$/;\n\n@Injectable()\nexport class TdDynamicFormsService {\n /**\n * Method to validate if the [name] is a proper element name.\n * Throws error if name is not valid.\n */\n validateDynamicElementName(name: string): void {\n if (!DYNAMIC_ELEMENT_NAME_REGEX.test(name)) {\n throw new Error('Dynamic element name: \"${name}\" is not valid.');\n }\n }\n\n /**\n * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]\n * Throws error if it does not exists or not supported.\n */\n getDynamicElement(element: TdDynamicElement | TdDynamicType | Type<any>): any {\n switch (element) {\n case TdDynamicType.Text:\n case TdDynamicType.Number:\n case TdDynamicElement.Input:\n case TdDynamicElement.Password:\n return TdDynamicInputComponent;\n case TdDynamicElement.Textarea:\n return TdDynamicTextareaComponent;\n case TdDynamicType.Boolean:\n case TdDynamicElement.SlideToggle:\n return TdDynamicSlideToggleComponent;\n case TdDynamicElement.Checkbox:\n return TdDynamicCheckboxComponent;\n case TdDynamicElement.Slider:\n return TdDynamicSliderComponent;\n case TdDynamicType.Array:\n case TdDynamicElement.Select:\n return TdDynamicSelectComponent;\n case TdDynamicElement.FileInput:\n return TdDynamicFileInputComponent;\n case TdDynamicElement.Datepicker:\n case TdDynamicType.Date:\n return TdDynamicDatepickerComponent;\n default:\n throw new Error(`Error: type ${element} does not exist or not supported.`);\n }\n }\n\n /**\n * Creates form control for element depending [ITdDynamicElementConfig] properties.\n */\n createFormControl(config: ITdDynamicElementConfig): FormControl {\n const validator: ValidatorFn = this.createValidators(config);\n return new FormControl({ value: config.default, disabled: config.disabled }, validator);\n }\n\n /**\n * Creates form validationdepending [ITdDynamicElementConfig] properties.\n */\n createValidators(config: ITdDynamicElementConfig): ValidatorFn {\n let validator: ValidatorFn;\n if (config.required) {\n validator = Validators.required;\n }\n if (config.max || config.max === 0) {\n validator = Validators.compose([validator, Validators.max(parseFloat(config.max))]);\n }\n if (config.min || config.min === 0) {\n validator = Validators.compose([validator, Validators.min(parseFloat(config.min))]);\n }\n if (config.maxLength || config.maxLength === 0) {\n validator = Validators.compose([validator, Validators.maxLength(parseFloat(config.maxLength))]);\n }\n if (config.minLength || config.minLength === 0) {\n validator = Validators.compose([validator, Validators.minLength(parseFloat(config.minLength))]);\n }\n // Add provided custom validators to the validator function\n if (config.validators) {\n config.validators.forEach((validatorConfig: ITdDynamicElementValidator) => {\n validator = Validators.compose([validator, validatorConfig.validator]);\n });\n }\n return validator;\n }\n}\n\nexport function DYNAMIC_FORMS_PROVIDER_FACTORY(parent: TdDynamicFormsService): TdDynamicFormsService {\n return parent || new TdDynamicFormsService();\n}\n\nexport const DYNAMIC_FORMS_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdDynamicFormsService,\n deps: [[new Optional(), new SkipSelf(), TdDynamicFormsService]],\n useFactory: DYNAMIC_FORMS_PROVIDER_FACTORY,\n};\n","import {\n Component,\n Directive,\n Input,\n HostBinding,\n OnInit,\n SimpleChanges,\n OnChanges,\n TemplateRef,\n ChangeDetectorRef,\n Type,\n} from '@angular/core';\nimport { ViewChild, ViewContainerRef } from '@angular/core';\nimport { ComponentFactoryResolver, ComponentRef, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n\nimport { mixinControlValueAccessor, IControlValueAccessor } from '@covalent/core/common';\n\nimport {\n TdDynamicElement,\n TdDynamicType,\n TdDynamicFormsService,\n ITdDynamicElementCustomConfig,\n} from './services/dynamic-forms.service';\n\nexport class TdDynamicElementBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdDynamicElementMixinBase = mixinControlValueAccessor(TdDynamicElementBase);\n\n@Directive({ selector: '[tdDynamicFormsError]ng-template' })\nexport class TdDynamicFormsErrorTemplateDirective extends TemplatePortalDirective {\n @Input() tdDynamicFormsError: string;\n constructor(public templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n\n@Directive({\n selector: '[tdDynamicContainer]',\n})\nexport class TdDynamicElementDirective {\n constructor(public viewContainer: ViewContainerRef) {}\n}\n\n@Component({\n providers: [\n TdDynamicFormsService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDynamicElementComponent),\n multi: true,\n },\n ],\n selector: 'td-dynamic-element',\n template: '<div tdDynamicContainer></div>',\n})\nexport class TdDynamicElementComponent\n extends _TdDynamicElementMixinBase\n implements IControlValueAccessor, OnInit, OnChanges\n{\n private _instance: any;\n\n /**\n * Sets form control of the element.\n */\n @Input() dynamicControl: FormControl;\n\n /**\n * Sets label to be displayed.\n */\n @Input() label: string = '';\n\n /**\n * Sets hint to be displayed.\n */\n @Input() hint: string = '';\n\n /**\n * Sets name to be displayed as attribute.\n */\n @Input() name: string = '';\n\n /**\n * Sets type or element of element to be rendered.\n * Throws error if does not exist or no supported.\n */\n @Input() type: TdDynamicElement | TdDynamicType | Type<any> = undefined;\n\n /**\n * Sets required validation checkup (if supported by element).\n */\n @Input() required: boolean = undefined;\n\n /**\n * Sets min validation checkup (if supported by element).\n */\n @Input() min: number = undefined;\n\n /**\n * Sets max validation checkup (if supported by element).\n */\n @Input() max: number = undefined;\n\n /**\n * Sets minLength validation checkup (if supported by element).\n */\n @Input() minLength: number = undefined;\n\n /**\n * Sets maxLength validation checkup (if supported by element).\n */\n @Input() maxLength: number = undefined;\n\n /**\n * Sets selections for array elements (if supported by element).\n */\n @Input() selections: any[] = undefined;\n\n /**\n * Sets multiple property for array elements (if supported by element).\n */\n @Input() multiple: boolean = undefined;\n\n /**\n * Sets any additional properties on custom component.\n */\n @Input() customConfig: ITdDynamicElementCustomConfig;\n\n /**\n * Sets error message template so it can be injected into dynamic components.\n */\n @Input() errorMessageTemplate: TemplateRef<any> = undefined;\n\n /**\n * Sets the placeholder message\n */\n @Input() placeholder: string = '';\n\n @ViewChild(TdDynamicElementDirective, { static: true }) childElement: TdDynamicElementDirective;\n\n @HostBinding('attr.max')\n get maxAttr(): any {\n return this.max;\n }\n\n @HostBinding('attr.min')\n get minAttr(): any {\n return this.min;\n }\n\n constructor(\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _dynamicFormsService: TdDynamicFormsService,\n _changeDetectorRef: ChangeDetectorRef,\n ) {\n super(_changeDetectorRef);\n }\n\n ngOnInit(): void {\n const component: any =\n <any>this.type instanceof Type ? this.type : this._dynamicFormsService.getDynamicElement(this.type);\n const ref: ComponentRef<any> = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(this.childElement.viewContainer.injector);\n this.childElement.viewContainer.insert(ref.hostView);\n this._instance = ref.instance;\n this._instance.control = this.dynamicControl;\n this._instance.label = this.label;\n this._instance.hint = this.hint;\n this._instance.name = this.name;\n this._instance.type = this.type;\n this._instance.value = this.value;\n this._instance.required = this.required;\n this._instance.min = this.min;\n this._instance.max = this.max;\n this._instance.minLength = this.minLength;\n this._instance.maxLength = this.maxLength;\n this._instance.selections = this.selections;\n this._instance.multiple = this.multiple;\n this._instance.errorMessageTemplate = this.errorMessageTemplate;\n this._instance.placeholder = this.placeholder;\n if (this.customConfig) {\n Object.getOwnPropertyNames(this.customConfig).forEach((name: string) => {\n this._instance[name] = this.customConfig[name];\n });\n }\n }\n\n /**\n * Reassign any inputs that have changed\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this._instance) {\n for (const prop of Object.keys(changes)) {\n this._instance[prop] = changes[prop].currentValue;\n }\n }\n }\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChildren,\n TemplateRef,\n QueryList,\n AfterContentInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';\n\nimport { TdDynamicFormsService, ITdDynamicElementConfig } from './services/dynamic-forms.service';\nimport { TdDynamicFormsErrorTemplateDirective } from './dynamic-element.component';\n\nimport { timer, Subject, Observable } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\n\n@Component({\n selector: 'td-dynamic-forms',\n templateUrl: './dynamic-forms.component.html',\n styleUrls: ['./dynamic-forms.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDynamicFormsComponent implements AfterContentInit, OnDestroy {\n private _renderedElements: ITdDynamicElementConfig[] = [];\n private _elements: ITdDynamicElementConfig[];\n private _templateMap: Map<string, TemplateRef<any>> = new Map<string, TemplateRef<any>>();\n private _destroy$: Subject<any> = new Subject();\n private _destroyControl$: Subject<string> = new Subject();\n\n @ContentChildren(TdDynamicFormsErrorTemplateDirective, { descendants: true })\n _errorTemplates: QueryList<TdDynamicFormsErrorTemplateDirective>;\n dynamicForm: FormGroup;\n\n /**\n * elements: ITdDynamicElementConfig[]\n * JS Object that will render the elements depending on its config.\n * [name] property is required.\n */\n @Input('elements')\n set elements(elements: ITdDynamicElementConfig[]) {\n if (elements) {\n this._elements = elements;\n } else {\n this._elements = [];\n }\n this._rerenderElements();\n }\n get elements(): ITdDynamicElementConfig[] {\n return this._renderedElements;\n }\n\n /**\n * Getter property for dynamic [FormGroup].\n */\n get form(): FormGroup {\n return this.dynamicForm;\n }\n\n /**\n * Getter property for [valid] of dynamic [FormGroup].\n */\n get valid(): boolean {\n if (this.dynamicForm) {\n return this.dynamicForm.valid;\n }\n return false;\n }\n\n /**\n * Getter property for [value] of dynamic [FormGroup].\n */\n get value(): any {\n if (this.dynamicForm) {\n return this.dynamicForm.value;\n }\n return {};\n }\n\n /**\n * Getter property for [errors] of dynamic [FormGroup].\n */\n get errors(): { [name: string]: any } {\n if (this.dynamicForm) {\n const errors: { [name: string]: any } = {};\n for (const name of Object.keys(this.dynamicForm.controls)) {\n errors[name] = this.dynamicForm.controls[name].errors;\n }\n return errors;\n }\n return {};\n }\n\n /**\n * Getter property for [controls] of dynamic [FormGroup].\n */\n get controls(): { [key: string]: AbstractControl } {\n if (this.dynamicForm) {\n return this.dynamicForm.controls;\n }\n return {};\n }\n\n constructor(\n private _formBuilder: FormBuilder,\n private _dynamicFormsService: TdDynamicFormsService,\n private _changeDetectorRef: ChangeDetectorRef,\n ) {\n this.dynamicForm = this._formBuilder.group({});\n }\n\n ngAfterContentInit(): void {\n this._updateErrorTemplates();\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._destroyControl$.complete();\n }\n\n /**\n * Refreshes the form and rerenders all validator/element modifications.\n */\n refresh(): void {\n this._rerenderElements();\n this._updateErrorTemplates();\n }\n\n /**\n * Getter method for error template references\n */\n getErrorTemplateRef(name: string): TemplateRef<any> {\n return this._templateMap.get(name);\n }\n\n /**\n * Loads error templates and sets them in a map for faster access.\n */\n private _updateErrorTemplates(): void {\n this._templateMap = new Map<string, TemplateRef<any>>();\n for (const errorTemplate of this._errorTemplates.toArray()) {\n this._templateMap.set(errorTemplate.tdDynamicFormsError, errorTemplate.templateRef);\n }\n }\n\n private _rerenderElements(): void {\n this._clearRemovedElements();\n this._renderedElements = [];\n const duplicates: string[] = [];\n this._elements.forEach((elem: ITdDynamicElementConfig) => {\n this._dynamicFormsService.validateDynamicElementName(elem.name);\n if (duplicates.indexOf(elem.name) > -1) {\n throw new Error(`Dynamic element name: \"${elem.name}\" is duplicated`);\n }\n duplicates.push(elem.name);\n const dynamicElement: AbstractControl = this.dynamicForm.get(elem.name);\n if (!dynamicElement) {\n this.dynamicForm.addControl(elem.name, this._dynamicFormsService.createFormControl(elem));\n this._subscribeToControlStatusChanges(elem.name);\n } else {\n dynamicElement.setValue(elem.default);\n dynamicElement.markAsPristine();\n dynamicElement.markAsUntouched();\n if (elem.disabled) {\n dynamicElement.disable();\n } else {\n dynamicElement.enable();\n }\n dynamicElement.setValidators(this._dynamicFormsService.createValidators(elem));\n }\n // copy objects so they are only changes when calling this method\n this._renderedElements.push(Object.assign({}, elem));\n });\n // call a change detection since the whole form might change\n this._changeDetectorRef.detectChanges();\n timer()\n .toPromise()\n .then(() => {\n // call a markForCheck so elements are rendered correctly in OnPush\n this._changeDetectorRef.markForCheck();\n });\n }\n\n private _clearRemovedElements(): void {\n this._renderedElements = this._renderedElements.filter(\n (renderedElement: ITdDynamicElementConfig) =>\n !this._elements.some((element: ITdDynamicElementConfig) => element.name === renderedElement.name),\n );\n // remove elements that were removed from the array\n this._renderedElements.forEach((elem: ITdDynamicElementConfig) => {\n this._destroyControl$.next(elem.name);\n this.dynamicForm.removeControl(elem.name);\n });\n }\n\n // Updates component when manually adding errors to controls\n private _subscribeToControlStatusChanges(elementName: string): void {\n const control: AbstractControl = this.controls[elementName];\n\n const controlDestroyed$: Observable<any> = this._destroyControl$.pipe(\n filter((destroyedElementName: string) => destroyedElementName === elementName),\n );\n\n control.statusChanges.pipe(takeUntil(this._destroy$), takeUntil(controlDestroyed$)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n","import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\n\nimport { CovalentCommonModule } from '@covalent/core/common';\nimport { CovalentFileModule } from '@covalent/core/file';\n\nimport { TdDynamicFormsComponent } from './dynamic-forms.component';\nimport {\n TdDynamicElementComponent,\n TdDynamicElementDirective,\n TdDynamicFormsErrorTemplateDirective,\n} from './dynamic-element.component';\nimport { DYNAMIC_FORMS_PROVIDER } from './services/dynamic-forms.service';\n\nimport { TdDynamicInputComponent } from './dynamic-elements/dynamic-input/dynamic-input.component';\nimport { TdDynamicFileInputComponent } from './dynamic-elements/dynamic-file-input/dynamic-file-input.component';\nimport { TdDynamicTextareaComponent } from './dynamic-elements/dynamic-textarea/dynamic-textarea.component';\nimport { TdDynamicSlideToggleComponent } from './dynamic-elements/dynamic-slide-toggle/dynamic-slide-toggle.component';\nimport { TdDynamicCheckboxComponent } from './dynamic-elements/dynamic-checkbox/dynamic-checkbox.component';\nimport { TdDynamicSliderComponent } from './dynamic-elements/dynamic-slider/dynamic-slider.component';\nimport { TdDynamicSelectComponent } from './dynamic-elements/dynamic-select/dynamic-select.component';\nimport { TdDynamicDatepickerComponent } from './dynamic-elements/dynamic-datepicker/dynamic-datepicker.component';\n\nconst TD_DYNAMIC_FORMS: Type<any>[] = [\n TdDynamicFormsComponent,\n TdDynamicElementComponent,\n TdDynamicElementDirective,\n TdDynamicFormsErrorTemplateDirective,\n];\n\nconst TD_DYNAMIC_FORMS_ENTRY_COMPONENTS: Type<any>[] = [\n TdDynamicInputComponent,\n TdDynamicFileInputComponent,\n TdDynamicTextareaComponent,\n TdDynamicSlideToggleComponent,\n TdDynamicCheckboxComponent,\n TdDynamicSliderComponent,\n TdDynamicSelectComponent,\n TdDynamicDatepickerComponent,\n];\n\n@NgModule({\n declarations: [TD_DYNAMIC_FORMS, TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatCheckboxModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatIconModule,\n MatButtonModule,\n MatDatepickerModule,\n CovalentCommonModule,\n CovalentFileModule,\n ],\n exports: [TD_DYNAMIC_FORMS, TD_DYNAMIC_FORMS_ENTRY_COMPONENTS],\n providers: [DYNAMIC_FORMS_PROVIDER],\n})\nexport class CovalentDynamicFormsModule {}\n"]}
|