UNPKG

tibas-form-json-generator

Version:

Fully configured form generator via JSON data with a custom template for each attribute + onChange events.

163 lines 17.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/item-form/item-form.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ItemModel } from '../models/item.model'; import { AttributeModel } from '../models/attribute.model'; import swal from 'sweetalert2'; import { TranslateService } from '@ngx-translate/core'; /** * Created by TIBAS-Mohammed on 2020-07-4. */ export class ItemFormComponent { /** * @param {?} translateService */ constructor(translateService) { this.translateService = translateService; this.changedtrigger = new EventEmitter(); this.listSourceTypes = []; } /** * @return {?} */ ngOnInit() { } /** * @param {?} child * @return {?} */ additem(child) { this.item = new ItemModel(); /** @type {?} */ const rndm = Math.floor(Math.random() * (100 - 1 + 1)) + 1; this.item.code = child.code + '_' + (child.children.length + 1) + '_R' + rndm; child.attrValues.forEach((/** * @param {?} att * @return {?} */ att => { /** @type {?} */ let tpmAtt = new AttributeModel(); tpmAtt = Object.assign({}, att); tpmAtt.required = false; tpmAtt.value = ''; this.item.attrValues.push(tpmAtt); })); child.children.push(this.item); } /** * @param {?} item * @return {?} */ remove(item) { /** @type {?} */ const index = this.parentList.indexOf(item); if (index !== -1) { swal({ title: this.translateService.instant('toast.success.message.ARE_YOU_SURE'), text: this.translateService.instant('toast.success.message.DELETE_ITEM'), type: 'warning', showCancelButton: true, confirmButtonColor: 'rgba(249,58,58,0.84)', cancelButtonColor: 'rgba(48,133,214,0.88)', cancelButtonText: this.translateService.instant('toast.success.message.CANCEL'), confirmButtonText: this.translateService.instant('toast.success.message.YES_DELETE') }).then((/** * @param {?} result * @return {?} */ (result) => { if (result.value) { this.parentList.splice(index, 1); this.triggerchange(); } })); } } /** * @return {?} */ triggerchange() { this.changedtrigger.emit(true); } /** * @param {?} item * @return {?} */ moveup(item) { /** @type {?} */ const newIndex = this.parentList.indexOf(item, 0) - 1; /** @type {?} */ const oldIndex = this.parentList.indexOf(item, 0); if (newIndex >= this.parentList.length) { /** @type {?} */ let k = newIndex - this.parentList.length + 1; while (k--) { this.parentList.push(undefined); } } this.parentList.splice(newIndex, 0, this.parentList.splice(oldIndex, 1)[0]); } /** * @param {?} item * @return {?} */ movedown(item) { /** @type {?} */ const newIndex = this.parentList.indexOf(item, 0) + 1; /** @type {?} */ const oldIndex = this.parentList.indexOf(item, 0); if (newIndex >= this.parentList.length) { /** @type {?} */ let k = newIndex - this.parentList.length + 1; while (k--) { this.parentList.push(undefined); } } this.parentList.splice(newIndex, 0, this.parentList.splice(oldIndex, 1)[0]); } } ItemFormComponent.decorators = [ { type: Component, args: [{ selector: 'app-item-form,[app-item-form]', template: "<div class=\"row\">\n <div [ngStyle]=\"{'padding-left':'calc('+level+'% + 1%)'}\" class=\"col-5 item-label\">\n <div style=\"display: inline-block;\n width: 100%;\n white-space: nowrap!important;\n overflow: scroll;\">\n\n <i class=\"fa fa-plus faplusitem\" style=\"margin-right: 0.5rem;\n position: relative;\n top: -15px;color: #8897aa;\n cursor: pointer;\" *ngIf=\"mode=='EDIT'\" (click)=\"additem(child)\"></i>\n <i class=\"fa fa-minus faplusitem\" style=\"margin-right: 0.5rem;\n position: relative;\n top: -15px;color: #8897aa;\n cursor: pointer;\" *ngIf=\"mode=='EDIT'\" (click)=\"remove(child)\"></i>\n\n <div style=\"\n width: 7px;\n position: relative;\n top: -5px;\n display: inline-block;\n margin-right: 0.5rem;\"\n *ngIf=\"mode=='EDIT' && (parentList.indexOf(child,0)>0 || parentList.indexOf(child,0)<parentList.length-1)\"\n >\n <div>\n <i style=\"cursor: pointer;color: #8897aa;\" *ngIf=\"parentList.indexOf(child,0)>0\" (click)=\"moveup(child)\"\n class=\"fa fa-caret-up\"></i>\n </div>\n <div>\n <i style=\"cursor: pointer;color: #8897aa;\" *ngIf=\"parentList.indexOf(child,0)<parentList.length-1\"\n (click)=\"movedown(child)\" class=\"fa fa-caret-down\"></i>\n <i *ngIf=\"!(parentList.indexOf(child,0)<parentList.length-1)\" class=\"fa \"></i>\n </div>\n </div>\n\n <span style=\"display: inline-block;white-space: nowrap!important;width: 100%;margin-right: 1rem;padding: 1px;\"\n *ngIf=\"mode=='VIEW' || mode=='READ' || mode=='READWITHTAB'\">{{child.label}}</span>\n <app-label-edit *ngIf=\"mode=='EDIT'\" [label]=\"'Nom item'\" [(ngModel)]=\"child.label\"></app-label-edit>\n <select *ngIf=\"mode=='EDIT'\" class=\"additemselect attInput\" style=\"display: inline-block;width: 80px;position: relative;\n top: -17px;\" [(ngModel)]=\"child.categoryId\" [required]=\"true\"\n >\n <option value=\"\" selected disabled>Type</option>\n <option *ngFor=\"let type of listSourceTypes\"\n value=\"{{type.id}}\">{{type.name}}</option>\n </select>\n </div>\n </div>\n <!--<div class=\"col\" *ngFor=\"let attribute of child?.attrValues\">\n <input [disabled]=\"attribute.disable\" [hidden]=\"attribute.hidden\" [required]=\"attribute.required && !attribute.hidden\" *ngIf=\"attribute.typeSource=='FREE_ENTRY'\" [(ngModel)]=\"attribute.value\">\n <select [disabled]=\"attribute.disable\" [hidden]=\"attribute.hidden\" [required]=\"attribute.required\" [(ngModel)]=\"attribute.value\">\n <option *ngFor=\"let ref of attribute.refValues\" value=\"{{ref}}\" >{{ref}}</option>\n </select>\n </div>-->\n\n <div class=\"col\" [position]=\"'BODY'\" [mode]=\"mode\" dynamic-template [level]=\"level\"\n *ngFor=\"let attribute of child?.attrValues\" [template]=\"attribute.template\" (changedtrigger)=\"triggerchange()\"\n [attribute]=\"attribute\" [item]=\"child\"></div>\n</div>\n<div app-item-form *ngFor=\"let c of child?.children\" [parentList]=\"child.children\" (changedtrigger)=\"triggerchange()\"\n [listSourceTypes]=\"listSourceTypes\"\n [level]=\"level+1\" [mode]=\"mode\" [child]=\"c\"></div>\n\n", styles: [""] }] } ]; /** @nocollapse */ ItemFormComponent.ctorParameters = () => [ { type: TranslateService } ]; ItemFormComponent.propDecorators = { child: [{ type: Input }], level: [{ type: Input }], mode: [{ type: Input }], changedtrigger: [{ type: Output }], parentList: [{ type: Input }], listSourceTypes: [{ type: Input }] }; if (false) { /** @type {?} */ ItemFormComponent.prototype.child; /** @type {?} */ ItemFormComponent.prototype.level; /** @type {?} */ ItemFormComponent.prototype.mode; /** @type {?} */ ItemFormComponent.prototype.item; /** @type {?} */ ItemFormComponent.prototype.changedtrigger; /** @type {?} */ ItemFormComponent.prototype.parentList; /** @type {?} */ ItemFormComponent.prototype.listSourceTypes; /** * @type {?} * @private */ ItemFormComponent.prototype.translateService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RpYmFzLWZvcm0tanNvbi1nZW5lcmF0b3IvIiwic291cmNlcyI6WyJsaWIvaXRlbS1mb3JtL2l0ZW0tZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVVyRCxNQUFNLE9BQU8saUJBQWlCOzs7O0lBdUI1QixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVJ0RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBTTVELG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztJQUd0QyxDQUFDOzs7O0lBRUQsUUFBUTtJQUNSLENBQUM7Ozs7O0lBRUQsT0FBTyxDQUFDLEtBQWdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzs7Y0FDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxD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QyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFOztnQkFDbEMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQzs7O1lBaEdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsK0JBQStCO2dCQUN6Qyx1dEdBQXlDOzthQUUxQzs7OztZQVRPLGdCQUFnQjs7O29CQVlyQixLQUFLO29CQUdMLEtBQUs7bUJBR0wsS0FBSzs2QkFNTCxNQUFNO3lCQUdOLEtBQUs7OEJBR0wsS0FBSzs7OztJQWxCTixrQ0FDaUI7O0lBRWpCLGtDQUNjOztJQUVkLGlDQUNhOztJQUdiLGlDQUFnQjs7SUFFaEIsMkNBQzREOztJQUU1RCx1Q0FDd0I7O0lBRXhCLDRDQUNzQzs7Ozs7SUFFMUIsNkNBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJdGVtTW9kZWx9IGZyb20gJy4uL21vZGVscy9pdGVtLm1vZGVsJztcbmltcG9ydCB7QXR0cmlidXRlTW9kZWx9IGZyb20gJy4uL21vZGVscy9hdHRyaWJ1dGUubW9kZWwnO1xuaW1wb3J0IHtDYXRlZ29yeU1vZGVsfSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnkubW9kZWwnO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKiBDcmVhdGVkIGJ5IFRJQkFTLU1vaGFtbWVkIG9uIDIwMjAtMDctNC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWl0ZW0tZm9ybSxbYXBwLWl0ZW0tZm9ybV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSXRlbUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpXG4gIGNoaWxkOiBJdGVtTW9kZWw7XG5cbiAgQElucHV0KClcbiAgbGV2ZWw6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBtb2RlOiBzdHJpbmc7XG5cblxuICBpdGVtOiBJdGVtTW9kZWw7XG5cbiAgQE91dHB1dCgpXG4gIGNoYW5nZWR0cmlnZ2VyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpXG4gIHBhcmVudExpc3Q6IEl0ZW1Nb2RlbFtdO1xuXG4gIEBJbnB1dCgpXG4gIGxpc3RTb3VyY2VUeXBlczogQ2F0ZWdvcnlNb2RlbFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIGFkZGl0ZW0oY2hpbGQ6IEl0ZW1Nb2RlbCkge1xuICAgIHRoaXMuaXRlbSA9IG5ldyBJdGVtTW9kZWwoKTtcbiAgICBjb25zdCBybmRtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEwMCAtIDEgKyAxKSkgKyAxO1xuICAgIHRoaXMuaXRlbS5jb2RlID0gY2hpbGQuY29kZSArICdfJyArIChjaGlsZC5jaGlsZHJlbi5sZW5ndGggKyAxKSArICdfUicgKyBybmRtO1xuICAgIGNoaWxkLmF0dHJWYWx1ZXMuZm9yRWFjaChhdHQgPT4ge1xuICAgICAgbGV0IHRwbUF0dCA9IG5ldyBBdHRyaWJ1dGVNb2RlbCgpO1xuICAgICAgdHBtQXR0ID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0KTtcbiAgICAgIHRwbUF0dC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgdHBtQXR0LnZhbHVlID0gJyc7XG4gICAgICB0aGlzLml0ZW0uYXR0clZhbHVlcy5wdXNoKHRwbUF0dCk7XG4gICAgfSk7XG4gICAgY2hpbGQuY2hpbGRyZW4ucHVzaCh0aGlzLml0ZW0pO1xuICB9XG5cbiAgcmVtb3ZlKGl0ZW06IEl0ZW1Nb2RlbCkge1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLnBhcmVudExpc3QuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzd2FsKHtcbiAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0b2FzdC5zdWNjZXNzLm1lc3NhZ2UuQVJFX1lPVV9TVVJFJyksXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0b2FzdC5zdWNjZXNzLm1lc3NhZ2UuREVMRVRFX0lURU0nKSxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICdyZ2JhKDI0OSw1OCw1OCwwLjg0KScsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiAncmdiYSg0OCwxMzMsMjE0LDAuODgpJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3RvYXN0LnN1Y2Nlc3MubWVzc2FnZS5DQU5DRUwnKSxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0b2FzdC5zdWNjZXNzLm1lc3NhZ2UuWUVTX0RFTEVURScpXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgIHRoaXMucGFyZW50TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlcmNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyY2hhbmdlKCkge1xuICAgIHRoaXMuY2hhbmdlZHRyaWdnZXIuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG1vdmV1cChpdGVtOiBJdGVtTW9kZWwpIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMucGFyZW50TGlzdC5pbmRleE9mKGl0ZW0sIDApIC0gMTtcbiAgICBjb25zdCBvbGRJbmRleCA9IHRoaXMucGFyZW50TGlzdC5pbmRleE9mKGl0ZW0sIDApO1xuICAgIGlmIChuZXdJbmRleCA+PSB0aGlzLnBhcmVudExpc3QubGVuZ3RoKSB7XG4gICAgICBsZXQgayA9IG5ld0luZGV4IC0gdGhpcy5wYXJlbnRMaXN0Lmxlbmd0aCArIDE7XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHRoaXMucGFyZW50TGlzdC5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFyZW50TGlzdC5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMucGFyZW50TGlzdC5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKTtcbiAgfVxuXG5cbiAgbW92ZWRvd24oaXRlbTogSXRlbU1vZGVsKSB7XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLnBhcmVudExpc3QuaW5kZXhPZihpdGVtLCAwKSArIDE7XG4gICAgY29uc3Qgb2xkSW5kZXggPSB0aGlzLnBhcmVudExpc3QuaW5kZXhPZihpdGVtLCAwKTtcbiAgICBpZiAobmV3SW5kZXggPj0gdGhpcy5wYXJlbnRMaXN0Lmxlbmd0aCkge1xuICAgICAgbGV0IGsgPSBuZXdJbmRleCAtIHRoaXMucGFyZW50TGlzdC5sZW5ndGggKyAxO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB0aGlzLnBhcmVudExpc3QucHVzaCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhcmVudExpc3Quc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLnBhcmVudExpc3Quc3BsaWNlKG9sZEluZGV4LCAxKVswXSk7XG4gIH1cbn1cbiJdfQ==