@noaestudio/forms
Version:
Dynamic forms extension for Covalent
122 lines (118 loc) • 11.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { AbstractControlValueAccessor } from '../abstract-control-value-accesor';
import { TranslateService } from '@ngx-translate/core';
import * as _isjson_ from 'is-json';
const /** @type {?} */ isJSON = _isjson_;
export const /** @type {?} */ SELECT_TOGGLE_INPUT_CONTROL_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TdDynamicSelectComponent),
multi: true,
};
export class TdDynamicSelectComponent extends AbstractControlValueAccessor {
/**
* @param {?} translator
*/
constructor(translator) {
super();
this.translator = translator;
this.label = '';
this.required = undefined;
this.selections = undefined;
this.selectComplex = false;
this.selectMultiple = false;
this.flex = 100;
this.flexPerc = this.flex / 100;
}
/**
* @return {?}
*/
ngOnInit() {
if (this.selections) {
this.selections.forEach(sel => {
if (sel.label) {
sel.label = this.translateLabel(sel.label);
}
});
}
}
/**
* @param {?} value
* @return {?}
*/
translateLabel(value) {
let /** @type {?} */ selectedLang = this.translator.currentLang;
let /** @type {?} */ defaultLang = this.translator.defaultLang;
if (isJSON(value)) {
let /** @type {?} */ json = JSON.parse(value);
if (json[selectedLang]) {
return json[selectedLang];
}
else if (json[defaultLang]) {
return json[defaultLang];
}
else {
for (let /** @type {?} */ entry in json) {
return json[entry];
}
}
}
else {
return this.translator.instant(value);
}
}
}
TdDynamicSelectComponent.decorators = [
{ type: Component, args: [{
providers: [SELECT_TOGGLE_INPUT_CONTROL_VALUE_ACCESSOR],
selector: 'td-dynamic-select',
styles: [`.td-dynamic-select-wrapper{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-select-wrapper .td-dynamic-select-field{-ms-flex:1;flex:1;box-sizing:border-box}`],
template: `<div class="td-dynamic-select-wrapper">
<mat-form-field *ngIf="!selectComplex" class="td-dynamic-select-field">
<mat-select [(ngModel)]="value" [placeholder]="label" [required]="required">
<mat-option *ngFor="let selection of selections" [value]="selection.value || selection">{{selection.label || selection}}</mat-option>
</mat-select>
</mat-form-field>
<ng-select style="padding-bottom: 2.25em;" *ngIf="selectComplex" [(ngModel)]="value" placeholder="{{label + (required ? ' *' : '')}}" [required]="required" [multiple]="selectMultiple" [items]="selections"
[searchable]="true" bindLabel="label" bindValue="value" appendTo="body" [style.flex]="flexPerc">
</ng-select>
</div>
`,
},] },
];
/** @nocollapse */
TdDynamicSelectComponent.ctorParameters = () => [
{ type: TranslateService, },
];
function TdDynamicSelectComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TdDynamicSelectComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TdDynamicSelectComponent.ctorParameters;
/** @type {?} */
TdDynamicSelectComponent.prototype.control;
/** @type {?} */
TdDynamicSelectComponent.prototype.label;
/** @type {?} */
TdDynamicSelectComponent.prototype.required;
/** @type {?} */
TdDynamicSelectComponent.prototype.selections;
/** @type {?} */
TdDynamicSelectComponent.prototype.selectComplex;
/** @type {?} */
TdDynamicSelectComponent.prototype.selectMultiple;
/** @type {?} */
TdDynamicSelectComponent.prototype.flex;
/** @type {?} */
TdDynamicSelectComponent.prototype.flexPerc;
/** @type {?} */
TdDynamicSelectComponent.prototype.translator;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvdmFsZW50L2R5bmFtaWMtZm9ybXMvIiwic291cmNlcyI6WyJkeW5hbWljLWVsZW1lbnRzL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sS0FBSyxRQUFRLE1BQU0sU0FBUyxDQUFDO0FBRXBDLHVCQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFFeEIsTUFBTSxDQUFDLHVCQUFNLDBDQUEwQyxHQUFRO0lBQzlELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztJQUN2RCxLQUFLLEVBQUUsSUFBSTtDQUNYLENBQUM7QUFxQkYsTUFBTSwrQkFBZ0MsU0FBUSw0QkFBNEI7Ozs7SUFrQnpFLFlBQW9CLFVBQTRCO1FBQy9DLEtBQUssRUFBRSxDQUFDO1FBRFcsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7cUJBZGhDLEVBQUU7d0JBRUUsU0FBUzswQkFFVCxTQUFTOzZCQUVILEtBQUs7OEJBRUosS0FBSztvQkFFaEIsR0FBRzt3QkFFQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUc7S0FJbEM7Ozs7SUFFRCxRQUFRO1FBQ1AsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNmLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzNDO2FBQ0QsQ0FBQyxDQUFDO1NBQ0g7S0FDRDs7Ozs7SUFFTSxjQUFjLENBQUMsS0FBYTtRQUNsQyxxQkFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDL0MscUJBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBRTlDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFN0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxDQUFDLENBQUM7Z0JBQ0wsR0FBRyxDQUFDLENBQUMscUJBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25CO2FBQ0Q7U0FDRDtRQUNELElBQUksQ0FBQyxDQUFDO1lBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RDOzs7O1lBeEVGLFNBQVMsU0FBQztnQkFDVixTQUFTLEVBQUUsQ0FBRSwwQ0FBMEMsQ0FBRTtnQkFDekQsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsTUFBTSxFQUFFLENBQUMsME5BQTBOLENBQUM7Z0JBQ3BPLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztDQWFWO2FBQ0E7Ozs7WUE5QlEsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vYWJzdHJhY3QtY29udHJvbC12YWx1ZS1hY2Nlc29yJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbmltcG9ydCAqIGFzIF9pc2pzb25fIGZyb20gJ2lzLWpzb24nO1xyXG5cclxuY29uc3QgaXNKU09OID0gX2lzanNvbl87XHJcblxyXG5leHBvcnQgY29uc3QgU0VMRUNUX1RPR0dMRV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcblx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcblx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGREeW5hbWljU2VsZWN0Q29tcG9uZW50KSxcclxuXHRtdWx0aTogdHJ1ZSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHByb3ZpZGVyczogWyBTRUxFQ1RfVE9HR0xFX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IgXSxcclxuXHRzZWxlY3RvcjogJ3RkLWR5bmFtaWMtc2VsZWN0JyxcclxuXHRzdHlsZXM6IFtgLnRkLWR5bmFtaWMtc2VsZWN0LXdyYXBwZXJ7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94fS50ZC1keW5hbWljLXNlbGVjdC13cmFwcGVyIC50ZC1keW5hbWljLXNlbGVjdC1maWVsZHstbXMtZmxleDoxO2ZsZXg6MTtib3gtc2l6aW5nOmJvcmRlci1ib3h9YF0sXHJcblx0dGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1zZWxlY3Qtd3JhcHBlclwiPlxyXG5cclxuXHQ8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhc2VsZWN0Q29tcGxleFwiIGNsYXNzPVwidGQtZHluYW1pYy1zZWxlY3QtZmllbGRcIj5cclxuXHRcdDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwidmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwibGFiZWxcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cclxuXHRcdFx0PG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25zXCIgW3ZhbHVlXT1cInNlbGVjdGlvbi52YWx1ZSB8fCBzZWxlY3Rpb25cIj57e3NlbGVjdGlvbi5sYWJlbCB8fCBzZWxlY3Rpb259fTwvbWF0LW9wdGlvbj5cclxuXHRcdDwvbWF0LXNlbGVjdD5cclxuXHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuXHQ8bmctc2VsZWN0IHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIuMjVlbTtcIiAqbmdJZj1cInNlbGVjdENvbXBsZXhcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7e2xhYmVsICsgKHJlcXVpcmVkID8gJyAqJyA6ICcnKX19XCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW211bHRpcGxlXT1cInNlbGVjdE11bHRpcGxlXCIgW2l0ZW1zXT1cInNlbGVjdGlvbnNcIlxyXG5cdFx0IFtzZWFyY2hhYmxlXT1cInRydWVcIiBiaW5kTGFiZWw9XCJsYWJlbFwiIGJpbmRWYWx1ZT1cInZhbHVlXCIgYXBwZW5kVG89XCJib2R5XCIgW3N0eWxlLmZsZXhdPVwiZmxleFBlcmNcIj5cclxuXHQ8L25nLXNlbGVjdD5cclxuXHJcbjwvZGl2PlxyXG5gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGREeW5hbWljU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcblx0Y29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG5cdGxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcblx0cmVxdWlyZWQ6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG5cdHNlbGVjdGlvbnM6IGFueVtdID0gdW5kZWZpbmVkO1xyXG5cclxuXHRzZWxlY3RDb21wbGV4IDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRzZWxlY3RNdWx0aXBsZSA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0ZmxleCA6IG51bWJlciA9IDEwMDtcclxuXHJcblx0ZmxleFBlcmMgOiBudW1iZXIgPSB0aGlzLmZsZXggLyAxMDA7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRvcjogVHJhbnNsYXRlU2VydmljZSkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0aWYgKHRoaXMuc2VsZWN0aW9ucykge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbnMuZm9yRWFjaCggc2VsID0+IHtcclxuXHRcdFx0XHRpZiAoc2VsLmxhYmVsKSB7XHJcblx0XHRcdFx0XHRzZWwubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZUxhYmVsKHNlbC5sYWJlbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyB0cmFuc2xhdGVMYWJlbCh2YWx1ZTogc3RyaW5nKSA6IHN0cmluZyB7XHJcblx0XHRsZXQgc2VsZWN0ZWRMYW5nID0gdGhpcy50cmFuc2xhdG9yLmN1cnJlbnRMYW5nO1xyXG5cdFx0bGV0IGRlZmF1bHRMYW5nID0gdGhpcy50cmFuc2xhdG9yLmRlZmF1bHRMYW5nO1xyXG5cclxuXHRcdGlmIChpc0pTT04odmFsdWUpKSB7XHJcblx0XHRcdGxldCBqc29uID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblxyXG5cdFx0XHRpZiAoanNvbltzZWxlY3RlZExhbmddKSB7XHJcblx0XHRcdFx0cmV0dXJuIGpzb25bc2VsZWN0ZWRMYW5nXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChqc29uW2RlZmF1bHRMYW5nXSkge1xyXG5cdFx0XHRcdHJldHVybiBqc29uW2RlZmF1bHRMYW5nXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGxldCBlbnRyeSBpbiBqc29uKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ganNvbltlbnRyeV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRvci5pbnN0YW50KHZhbHVlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19