tnx-shared 5.1.344 → 5.1.345
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/tnx-shared.umd.js +184 -19
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/form-schema.d.ts +4 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/address/address.component.d.ts +1 -0
- package/components/address/address.component.d.ts.map +1 -1
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts +1 -0
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +2 -0
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/check-box-list/check-box-list.component.d.ts +1 -0
- package/components/check-box-list/check-box-list.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts.map +1 -1
- package/components/congviec-picker/congviec-picker.component.d.ts +1 -0
- package/components/congviec-picker/congviec-picker.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +7 -0
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/datetime-picker/datetime-picker.component.d.ts +1 -0
- package/components/datetime-picker/datetime-picker.component.d.ts.map +1 -1
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts +1 -0
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +1 -0
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker.component.d.ts +1 -0
- package/components/entity-picker/entity-picker.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-upload/file-upload.component.d.ts +1 -0
- package/components/file-upload/file-upload.component.d.ts.map +1 -1
- package/components/mask/mask.component.d.ts +1 -0
- package/components/mask/mask.component.d.ts.map +1 -1
- package/components/number-picker-range/number-picker-range.component.d.ts +1 -0
- package/components/number-picker-range/number-picker-range.component.d.ts.map +1 -1
- package/components/radio-button-list/radio-button-list.component.d.ts +1 -0
- package/components/radio-button-list/radio-button-list.component.d.ts.map +1 -1
- package/components/reference-textbox/reference-textbox.component.d.ts +2 -1
- package/components/reference-textbox/reference-textbox.component.d.ts.map +1 -1
- package/components/service-file-upload/service-file-upload.component.d.ts +1 -0
- package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
- package/components/tn-color-picker/tn-color-picker.component.d.ts +1 -0
- package/components/tn-color-picker/tn-color-picker.component.d.ts.map +1 -1
- package/components/tn-tabview/tn-tabview.component.d.ts +7 -1
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -0
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/components/user-picker/user-picker.component.d.ts +1 -0
- package/components/user-picker/user-picker.component.d.ts.map +1 -1
- package/components/vanban-picker/vanban-picker.component.d.ts +1 -0
- package/components/vanban-picker/vanban-picker.component.d.ts.map +1 -1
- package/esm2015/classes/form-schema.js +4 -1
- package/esm2015/components/address/address.component.js +4 -1
- package/esm2015/components/autocomplete-datasource/autocomplete-datasource.component.js +4 -1
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +13 -7
- package/esm2015/components/check-box-list/check-box-list.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.js +4 -1
- package/esm2015/components/congviec-picker/congviec-picker.component.js +4 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +64 -8
- package/esm2015/components/datetime-picker/datetime-picker.component.js +4 -1
- package/esm2015/components/datetime-picker-range/datetime-picker-range.component.js +5 -2
- package/esm2015/components/dropdown/dropdown.component.js +4 -1
- package/esm2015/components/entity-picker/entity-picker.component.js +4 -1
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +4 -1
- package/esm2015/components/file-upload/file-upload.component.js +4 -1
- package/esm2015/components/mask/mask.component.js +4 -1
- package/esm2015/components/number-picker-range/number-picker-range.component.js +5 -2
- package/esm2015/components/radio-button-list/radio-button-list.component.js +4 -1
- package/esm2015/components/reference-textbox/reference-textbox.component.js +6 -3
- package/esm2015/components/service-file-upload/service-file-upload.component.js +4 -1
- package/esm2015/components/tn-color-picker/tn-color-picker.component.js +4 -2
- package/esm2015/components/tn-tabview/tn-tabview.component.js +32 -5
- package/esm2015/components/tn-tinymce/tn-tinymce.component.js +4 -1
- package/esm2015/components/user-picker/user-picker.component.js +4 -1
- package/esm2015/components/vanban-picker/vanban-picker.component.js +4 -1
- package/fesm2015/tnx-shared.js +175 -21
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -1691,6 +1691,7 @@
|
|
|
1691
1691
|
__extends(TableSchema, _super);
|
|
1692
1692
|
function TableSchema(init) {
|
|
1693
1693
|
var _this = _super.call(this) || this;
|
|
1694
|
+
_this.autoGenerateId = false;
|
|
1694
1695
|
_this.showNumber = true;
|
|
1695
1696
|
_this.showFunction = true;
|
|
1696
1697
|
_this.showFooter = true;
|
|
@@ -1961,6 +1962,8 @@
|
|
|
1961
1962
|
var TabViewData = /** @class */ (function () {
|
|
1962
1963
|
function TabViewData(init) {
|
|
1963
1964
|
this.hidden = false;
|
|
1965
|
+
this.alwayRender = false;
|
|
1966
|
+
this.useScrollbar = false; // Config để xác định có sử dụng custom-scrollbar không, nếu không thì dùng scrollbar mặc định của trình duyệt
|
|
1964
1967
|
for (var key in init) {
|
|
1965
1968
|
this[key] = init[key];
|
|
1966
1969
|
}
|
|
@@ -15858,8 +15861,10 @@
|
|
|
15858
15861
|
return [3 /*break*/, 4];
|
|
15859
15862
|
}
|
|
15860
15863
|
}
|
|
15861
|
-
else
|
|
15862
|
-
|
|
15864
|
+
else {
|
|
15865
|
+
if (childNode['_hidden'] || childNode.control['_hidden'])
|
|
15866
|
+
return [3 /*break*/, 4];
|
|
15867
|
+
}
|
|
15863
15868
|
return [4 /*yield*/, this.validate(childNode, true)];
|
|
15864
15869
|
case 2:
|
|
15865
15870
|
if (!(_g.sent())) {
|
|
@@ -16046,6 +16051,13 @@
|
|
|
16046
16051
|
});
|
|
16047
16052
|
});
|
|
16048
16053
|
};
|
|
16054
|
+
CrudFormComponent.prototype.handleLoadedControl = function (_component, control, parentPath) {
|
|
16055
|
+
var parentNode = this._rootNode.getNodeByPath(parentPath);
|
|
16056
|
+
var currentNode = parentNode.getChildNode(control.field);
|
|
16057
|
+
if (_component && currentNode) {
|
|
16058
|
+
currentNode._component = _component;
|
|
16059
|
+
}
|
|
16060
|
+
};
|
|
16049
16061
|
CrudFormComponent.prototype.handleControlReadyEvent = function (control, parentPath) {
|
|
16050
16062
|
return __awaiter(this, void 0, void 0, function () {
|
|
16051
16063
|
var parentNode;
|
|
@@ -16533,7 +16545,11 @@
|
|
|
16533
16545
|
index = tableNode.childNodes.length;
|
|
16534
16546
|
parentPath = tablePath + '[' + index + ']';
|
|
16535
16547
|
data = {};
|
|
16548
|
+
if (control.autoGenerateId) {
|
|
16549
|
+
data.id = this._commonService.guid();
|
|
16550
|
+
}
|
|
16536
16551
|
try {
|
|
16552
|
+
// Thêm id để ngăn render liên tục
|
|
16537
16553
|
for (_d = __values(control.rowTemplate), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
16538
16554
|
subControl = _e.value;
|
|
16539
16555
|
this.initControlDefaultValue(data, subControl, parentPath);
|
|
@@ -16858,7 +16874,7 @@
|
|
|
16858
16874
|
|| (parentModel._status[control.field].hidden === undefined
|
|
16859
16875
|
&& (control.hidden
|
|
16860
16876
|
|| (control.hiddenCheck && control.hiddenCheck(this._minimizedData, currentNode))));
|
|
16861
|
-
|
|
16877
|
+
currentNode['_hidden'] = !!result;
|
|
16862
16878
|
return result;
|
|
16863
16879
|
};
|
|
16864
16880
|
CrudFormComponent.prototype.getContextTd = function (control, data, index, tablePath) {
|
|
@@ -16937,7 +16953,7 @@
|
|
|
16937
16953
|
CrudFormComponent.decorators = [
|
|
16938
16954
|
{ type: i0.Component, args: [{
|
|
16939
16955
|
selector: 'crud-form',
|
|
16940
|
-
template: "<div [class]=\"_styleClass\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input [placeholder]=\"control.placeholder\"\r\n [required]=\"control.validators && control.validators.required\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText\r\n [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText [type]=\"control.dataFormat\"\r\n [(ngModel)]=\"data[control.field]\" [max]=\"control.max\" [min]=\"control.min\"\r\n [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'reference-text'\">\r\n <reference-textbox [control]=\"control\" [value]=\"data[control.field]\"></reference-textbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [autoFormat]=\"control.autoFormat\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText type=\"tel\"\r\n [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" type=\"tel\" pInputText\r\n [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce *ngIf=\"!checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [height]=\"control.height ? control.height : 250\" [languageCode]=\"control.languageCode\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\">\r\n </tn-tinymce>\r\n <div *ngIf=\"checkDisabled(data, control)\" class=\"html-box\"\r\n [innerHTML]=\"data[control.field] ? (data[control.field] | safeHtml) : ''\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\" [(ngModel)]=\"data[control.field]\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [(ngModel)]=\"data[control.field]\" [disabled]=\"control.disabled\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"control.entityKey ? control.entityKey : data[control.entityKeyField]\"\r\n [readonly]=\"control.disabled\" [layout]=\"control.layout\" [maxFileSize]=\"control.maxFileSize\"\r\n [inTaiLieu]=\"control.inTaiLieu\" [inTaiLieuChung]=\"control.inTaiLieuChung\"\r\n [copyToFolderId]=\"control.copyToFolderId\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\" (onSelected)=\"control.onSelected($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [readOnlyValues]=\"data[control.field + '_readOnly']\" [(ngModel)]=\"data[control.field]\"\r\n [multiple]=\"control.multiple\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n <!-- <tn-checkbox [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></tn-checkbox> -->\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\" [readOnly]=\"control.readOnly\"\r\n [loaiVanBan]=\"control.loaiVanBan\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <div>\r\n <tn-mask [suffix]=\"'%'\" [placeholder]=\"control.placeholder\" [maskType]=\"'int'\"\r\n [autoFormat]=\"control.autoFormat\" [min]=\"0\" [max]=\"100\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n <p-slider [step]=\"1\" [min]=\"0\" [max]=\"100\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onSlideEnd)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-slider>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table class=\"new-table scr-table table-control\" [value]=\"data[control.field]\"\r\n [columns]=\"control.headerTemplate\" [responsive]=\"true\" [scrollable]=\"false\"\r\n [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template pTemplate=\"colgroup\">\r\n <colgroup>\r\n <col *ngIf=\"control.showNumber\" style=\"width: 40px\" />\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <col [style.width]=\"subControl.width\" />\r\n </ng-container>\r\n <col *ngIf=\"control.enableReorderRow\" style=\"width: 30px\" />\r\n <col *ngIf=\"control.showFunction\" [style.width]=\"control.widthFunctionColumn\" />\r\n </colgroup>\r\n </ng-template>\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\" class=\"table-function column-function\">\r\n <div class=\"cell-header-function\"><span>Ch\u1EE9c n\u0103ng</span></div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td *ngIf=\"control.showNumber\" class=\"stt\"\r\n style=\"text-align: center; vertical-align: inherit\">\r\n <span>\r\n {{ri + 1}}\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\"\r\n [ngStyle]=\"{'text-align': getTextAlign(subControl.textAlign), 'vertical-align': 'inherit'}\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-template [ngIf]=\"getControlType(subControl) != 'column'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template [ngIf]=\"getControlType(subControl) == 'column'\">\r\n <span>{{_modelData[control.field][ri][subControl.field]}}</span>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"control.showFunction\" style=\"text-align: center\"\r\n class=\"column-function text-center\">\r\n <div *ngIf=\"!control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-save\" [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-pencil\" [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton\r\n class=\"p-button-text p-button-danger p-button-rounded\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n </div>\r\n <div *ngIf=\"control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: _modelData[control.field][ri], rowIndex: ri, path: path, control: control}\">\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.summaryTemplate\" pTemplate=\"summary\" let-rowData>\r\n <ng-container *ngTemplateOutlet=\"control.summaryTemplate; context: {rowData: rowData}\">\r\n </ng-container>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span *ngIf=\"control.showDialog\" style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\" [ngTemplateOutletContext]=\"{\r\n crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #templateCongViecForm let-control=\"control\">\r\n <base-congviec-form [control]=\"control\" [parentSetting]=\"congViecSetting\" [tenCongViec]=\"control.data.tenCongViec\">\r\n </base-congviec-form>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>",
|
|
16956
|
+
template: "<div [class]=\"_styleClass\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input [placeholder]=\"control.placeholder\"\r\n [required]=\"control.validators && control.validators.required\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText\r\n [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText [type]=\"control.dataFormat\"\r\n [(ngModel)]=\"data[control.field]\" [max]=\"control.max\" [min]=\"control.min\"\r\n [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'reference-text'\">\r\n <reference-textbox [control]=\"control\" [value]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"></reference-textbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [autoFormat]=\"control.autoFormat\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText type=\"tel\"\r\n [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" type=\"tel\" pInputText\r\n [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce *ngIf=\"!checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n [height]=\"control.height ? control.height : 250\" [languageCode]=\"control.languageCode\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-tinymce>\r\n <div *ngIf=\"checkDisabled(data, control)\" class=\"html-box\"\r\n [innerHTML]=\"data[control.field] ? (data[control.field] | safeHtml) : ''\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [disabled]=\"control.disabled\" [control]=\"control\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"control.entityKey ? control.entityKey : data[control.entityKeyField]\"\r\n [readonly]=\"control.disabled\" [layout]=\"control.layout\" [maxFileSize]=\"control.maxFileSize\"\r\n [inTaiLieu]=\"control.inTaiLieu\" [inTaiLieuChung]=\"control.inTaiLieuChung\"\r\n [copyToFolderId]=\"control.copyToFolderId\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onSelected)=\"control.onSelected($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [readOnlyValues]=\"data[control.field + '_readOnly']\" [(ngModel)]=\"data[control.field]\"\r\n [multiple]=\"control.multiple\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n <!-- <tn-checkbox [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></tn-checkbox> -->\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [readOnly]=\"control.readOnly\" [loaiVanBan]=\"control.loaiVanBan\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <div>\r\n <tn-mask [suffix]=\"'%'\" [placeholder]=\"control.placeholder\" [maskType]=\"'int'\"\r\n [autoFormat]=\"control.autoFormat\" [min]=\"0\" [max]=\"100\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n <p-slider [step]=\"1\" [min]=\"0\" [max]=\"100\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onSlideEnd)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-slider>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table class=\"new-table scr-table table-control\" [value]=\"data[control.field]\"\r\n [columns]=\"control.headerTemplate\" [responsive]=\"true\" [scrollable]=\"false\"\r\n [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template pTemplate=\"colgroup\">\r\n <colgroup>\r\n <col *ngIf=\"control.showNumber\" style=\"width: 40px\" />\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <col [style.width]=\"subControl.width\" />\r\n </ng-container>\r\n <col *ngIf=\"control.enableReorderRow\" style=\"width: 30px\" />\r\n <col *ngIf=\"control.showFunction\" [style.width]=\"control.widthFunctionColumn\" />\r\n </colgroup>\r\n </ng-template>\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\" class=\"table-function column-function\">\r\n <div class=\"cell-header-function\"><span>Ch\u1EE9c n\u0103ng</span></div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td *ngIf=\"control.showNumber\" class=\"stt\"\r\n style=\"text-align: center; vertical-align: inherit\">\r\n <span>\r\n {{ri + 1}}\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\"\r\n [ngStyle]=\"{'text-align': getTextAlign(subControl.textAlign), 'vertical-align': 'inherit'}\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-template [ngIf]=\"getControlType(subControl) != 'column'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template [ngIf]=\"getControlType(subControl) == 'column'\">\r\n <span>{{_modelData[control.field][ri][subControl.field]}}</span>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"control.showFunction\" style=\"text-align: center\"\r\n class=\"column-function text-center\">\r\n <div *ngIf=\"!control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-save\" [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-pencil\" [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton\r\n class=\"p-button-text p-button-danger p-button-rounded\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n </div>\r\n <div *ngIf=\"control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: _modelData[control.field][ri], rowIndex: ri, path: path, control: control}\">\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.summaryTemplate\" pTemplate=\"summary\" let-rowData>\r\n <ng-container *ngTemplateOutlet=\"control.summaryTemplate; context: {rowData: rowData}\">\r\n </ng-container>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span *ngIf=\"control.showDialog\" style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\" [ngTemplateOutletContext]=\"{\r\n crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #templateCongViecForm let-control=\"control\">\r\n <base-congviec-form [control]=\"control\" [parentSetting]=\"congViecSetting\" [tenCongViec]=\"control.data.tenCongViec\">\r\n </base-congviec-form>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>",
|
|
16941
16957
|
providers: [ComponentContextService],
|
|
16942
16958
|
styles: [".label-only{font-weight:700;margin-bottom:1em}div.label{position:relative}div.label .star-required{color:red;padding-left:.2em;padding-top:.3em;position:absolute}div.type-container.not-show-in-box-holder{padding:0}.--table-schema-footer{align-items:center;background:#f8f9fa;border:1px solid #e9ecef;color:#495057;display:flex;font-weight:600;padding:.5em}.show-in-box{border:1px solid #ced4da;border-radius:5px}.not-show-in-box{padding:0}.view-mode div.label{padding-bottom:3px}.view-mode div.label label{font-size:.85em;font-weight:700}.view-mode>span:not(:empty){display:inline-block;padding:5px 0;width:100%}.view-mode.type-table div.label+div{padding:5px 0}td>.view-mode{display:inline-block;padding:.25rem .5rem}td>.view-mode .view-mode{padding:0}.crud-form-control div[role=checkbox-alone]{margin-top:24px}.crud-form-control div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control .label+div[role=checkbox-alone]{margin-top:11px}.crud-form-control.type-table div[role=checkbox-alone]{margin-top:6px;text-align:center}.crud-form-control.type-table div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control.type-table div[role=checkbox-alone].align-left{text-align:left}.crud-form-control.type-title{border-bottom:1px solid #cfcfcf;color:#025ba7;font-size:1.2rem;font-weight:700;margin-bottom:5px;padding:5px;text-transform:uppercase}.crud-form-control.type-title>.label{margin-bottom:0}.control-description{color:#6c757d;font-size:.8rem;margin-bottom:5px;margin-left:10px}.cell-header-function{align-items:center;display:flex}.cell-header-function>span{flex:1 1;text-align:center}.cell-header-function button{height:24px;margin:0;padding:0;width:24px}::ng-deep .crud-form-control .tn-check-box-list{margin-top:5px}::ng-deep .crud-form-control>div.label{font-size:.9em;height:1.15em;margin-bottom:5px}::ng-deep .crud-form-control>div.label+*{width:100%}::ng-deep .crud-form-control>.error-container .error-item{-webkit-animation:shrink .1s;animation:shrink .1s;min-height:20px;overflow:visible;padding-top:5px}::ng-deep .crud-form-control>.error-container .error-item .error-content{-webkit-animation:fadeIn .1s;animation:fadeIn .1s;color:red;display:flex;font-size:.9em;position:relative}::ng-deep .crud-form-control>.error-container .error-item .error-content i{display:flex;font-size:.9em;padding-top:1px}::ng-deep .crud-form-control>.error-container .error-item .error-content span{display:flex;padding-left:5px}::ng-deep .crud-form-control.no-label>div.label{display:none}::ng-deep .crud-form-control.error .p-dropdown,::ng-deep .crud-form-control.error .p-inputtext,::ng-deep .crud-form-control.error .p-multiselect,::ng-deep .crud-form-control.error .tn-dropdown,::ng-deep .crud-form-control.error input,::ng-deep .crud-form-control.error select,::ng-deep .crud-form-control.error textarea{border-color:#ff5722!important}::ng-deep .crud-form-control.error .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error .p-inputtext:enabled:focus,::ng-deep .crud-form-control.error .tn-dropdown:not(.p-disabled).p-focus{box-shadow:0 0 0 .2rem #ffc4b3}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-multiselect,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .tn-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) input,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) select,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) textarea{border-color:#ced4da!important}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown.tn-dropdown.p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa}@-webkit-keyframes fadeIn{0%{opacity:0;top:-25px}to{opacity:1;top:0}}@keyframes fadeIn{0%{opacity:0;top:-25px}to{opacity:1;top:0}}@-webkit-keyframes shrink{0%{height:0}to{height:20px}}@keyframes shrink{0%{height:0}to{height:20px}}@media screen and (min-width:40.063em){.label-right{padding-left:2em}}::ng-deep crud-form .crud-form-container{padding:.5rem .5rem 0}::ng-deep crud-form .p-datatable .p-datatable-tbody tr td.control-inside,::ng-deep crud-form .p-datatable .p-datatable-tbody tr td.control-inside .show-in-box:not(.crud-form-control),::ng-deep crud-form base-congviec-form crud-form>.crud-form-container{padding:0}:host ::ng-deep .tox-tinymce{border:none;border-top:1px solid #ccc;overflow:unset}:host ::ng-deep .tox-tinymce .tox-editor-container{overflow:unset}:host ::ng-deep .tox-tinymce .tox-toolbar{border:1px solid #ccc;border-bottom:none}:host ::ng-deep .tox-tinymce .tox-edit-area{border:1px solid #ccc}:host ::ng-deep .tox-tinymce .tox-edit-area iframe{box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}:host ::ng-deep .tox-tinymce .tox-menubar{border:1px solid #ccc}:host ::ng-deep .tox .tox-edit-area.tinymce-focus{border:1px solid #66afe9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px 0 #66afe9;transition:box-shadow .3s,border-color .3s;transition-delay:0s,0s;transition-duration:.3s,.3s;transition-property:box-shadow,border-color;transition-timing-function:ease,ease}:host ::ng-deep .rq .tox .tox-edit-area{border-left-color:#ff4c46}.no-value{font-size:.8em}:host ::ng-deep .table-schema-paging{display:block;margin-bottom:40px}"]
|
|
16943
16959
|
},] }
|
|
@@ -17030,7 +17046,12 @@
|
|
|
17030
17046
|
}
|
|
17031
17047
|
else {
|
|
17032
17048
|
if (!this.schemaPath) {
|
|
17033
|
-
|
|
17049
|
+
Object.keys(schemas).forEach(function (key) {
|
|
17050
|
+
var item = schemas[key];
|
|
17051
|
+
if (item.uniqueField == item.field) {
|
|
17052
|
+
keysPlus.push(key);
|
|
17053
|
+
}
|
|
17054
|
+
});
|
|
17034
17055
|
}
|
|
17035
17056
|
}
|
|
17036
17057
|
this.keysPlus = keysPlus;
|
|
@@ -17062,6 +17083,22 @@
|
|
|
17062
17083
|
}
|
|
17063
17084
|
finally { if (e_32) throw e_32.error; }
|
|
17064
17085
|
}
|
|
17086
|
+
// Sau khi đã init xong node cho row thì fire event cho các control trong row
|
|
17087
|
+
// Thường dùng với mục đích cần disabled, hidden các control của row khi có nhu cầu
|
|
17088
|
+
try {
|
|
17089
|
+
this.childNodes.forEach(function (_) {
|
|
17090
|
+
if (_.control && _.control.onRowNodeFinishInit) {
|
|
17091
|
+
var eventData = new EventData({
|
|
17092
|
+
sourceNode: _,
|
|
17093
|
+
currentNode: _,
|
|
17094
|
+
eventType: 'rowFinishInit'
|
|
17095
|
+
});
|
|
17096
|
+
_.control.onRowNodeFinishInit(eventData);
|
|
17097
|
+
}
|
|
17098
|
+
});
|
|
17099
|
+
}
|
|
17100
|
+
catch (err) {
|
|
17101
|
+
}
|
|
17065
17102
|
}
|
|
17066
17103
|
else if (isArray(model)) {
|
|
17067
17104
|
var i = 0;
|
|
@@ -17151,6 +17188,16 @@
|
|
|
17151
17188
|
enumerable: false,
|
|
17152
17189
|
configurable: true
|
|
17153
17190
|
});
|
|
17191
|
+
Object.defineProperty(ControlTreeNode.prototype, "component", {
|
|
17192
|
+
get: function () {
|
|
17193
|
+
return this._component;
|
|
17194
|
+
},
|
|
17195
|
+
set: function (val) {
|
|
17196
|
+
this._component = val;
|
|
17197
|
+
},
|
|
17198
|
+
enumerable: false,
|
|
17199
|
+
configurable: true
|
|
17200
|
+
});
|
|
17154
17201
|
ControlTreeNode.prototype.setHidden = function (field, hidden) {
|
|
17155
17202
|
var _this = this;
|
|
17156
17203
|
if (hidden === void 0) { hidden = true; }
|
|
@@ -17164,13 +17211,31 @@
|
|
|
17164
17211
|
}
|
|
17165
17212
|
};
|
|
17166
17213
|
ControlTreeNode.prototype.setHiddenField = function (field, hidden) {
|
|
17214
|
+
this.setPrivateStatus(field, 'hidden', hidden);
|
|
17215
|
+
};
|
|
17216
|
+
ControlTreeNode.prototype.setDisabled = function (field, disabled) {
|
|
17217
|
+
var _this = this;
|
|
17218
|
+
if (disabled === void 0) { disabled = true; }
|
|
17219
|
+
if (Array.isArray(field)) {
|
|
17220
|
+
field.forEach(function (f) {
|
|
17221
|
+
_this.setDisabledField(f, disabled);
|
|
17222
|
+
});
|
|
17223
|
+
}
|
|
17224
|
+
else {
|
|
17225
|
+
this.setDisabledField(field, disabled);
|
|
17226
|
+
}
|
|
17227
|
+
};
|
|
17228
|
+
ControlTreeNode.prototype.setDisabledField = function (field, disabled) {
|
|
17229
|
+
this.setPrivateStatus(field, 'disabled', disabled);
|
|
17230
|
+
};
|
|
17231
|
+
ControlTreeNode.prototype.setPrivateStatus = function (field, prop, value) {
|
|
17167
17232
|
if (field.indexOf('.') > -1) {
|
|
17168
17233
|
var childNode = this.getNodeByPath(this.modelPath + "." + field);
|
|
17169
17234
|
var lastField = field.split('.').pop();
|
|
17170
|
-
childNode.parentNode.data._status[lastField]
|
|
17235
|
+
childNode.parentNode.data._status[lastField][prop] = value;
|
|
17171
17236
|
}
|
|
17172
17237
|
else {
|
|
17173
|
-
this.data._status[field]
|
|
17238
|
+
this.data._status[field][prop] = value;
|
|
17174
17239
|
}
|
|
17175
17240
|
};
|
|
17176
17241
|
ControlTreeNode.prototype.getNodeByPath = function (modelPath) {
|
|
@@ -26043,6 +26108,7 @@
|
|
|
26043
26108
|
_this._showSubLabel = true;
|
|
26044
26109
|
_this.readyToReload = false;
|
|
26045
26110
|
_this._readyStatus = {};
|
|
26111
|
+
_this.onInit = new i0.EventEmitter();
|
|
26046
26112
|
_this.onSelect = new i0.EventEmitter();
|
|
26047
26113
|
_this.dataChange = new i0.EventEmitter();
|
|
26048
26114
|
_this.onReady = new i0.EventEmitter();
|
|
@@ -26159,6 +26225,7 @@
|
|
|
26159
26225
|
if (this.viewMode) {
|
|
26160
26226
|
this.getModelText();
|
|
26161
26227
|
}
|
|
26228
|
+
this.onInit.emit(this);
|
|
26162
26229
|
};
|
|
26163
26230
|
AddressComponent.prototype.setDisabledControl = function () {
|
|
26164
26231
|
var disabled = this._disabled ? true : null;
|
|
@@ -26264,6 +26331,7 @@
|
|
|
26264
26331
|
viewMode: [{ type: i0.Input }],
|
|
26265
26332
|
data: [{ type: i0.Input }],
|
|
26266
26333
|
showSubLabel: [{ type: i0.Input }],
|
|
26334
|
+
onInit: [{ type: i0.Output }],
|
|
26267
26335
|
onSelect: [{ type: i0.Output }],
|
|
26268
26336
|
dataChange: [{ type: i0.Output }],
|
|
26269
26337
|
onReady: [{ type: i0.Output }]
|
|
@@ -26331,6 +26399,7 @@
|
|
|
26331
26399
|
this._deviceDetectorService = _deviceDetectorService;
|
|
26332
26400
|
this.dataSource = [];
|
|
26333
26401
|
this.control = new AutoCompleteControlSchema();
|
|
26402
|
+
this.onInit = new i0.EventEmitter();
|
|
26334
26403
|
this.onValueChanged = new i0.EventEmitter();
|
|
26335
26404
|
this.lstDataSuggest = [];
|
|
26336
26405
|
this.hideTransitionOptions = '195ms ease-in';
|
|
@@ -26348,6 +26417,7 @@
|
|
|
26348
26417
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
26349
26418
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
26350
26419
|
}
|
|
26420
|
+
this.onInit.emit(this);
|
|
26351
26421
|
};
|
|
26352
26422
|
AutocompleteDatasourceComponent.prototype.handleBlur = function (event) {
|
|
26353
26423
|
if (this.selectedValueBefore != this.selectedValue) {
|
|
@@ -26438,6 +26508,7 @@
|
|
|
26438
26508
|
AutocompleteDatasourceComponent.propDecorators = {
|
|
26439
26509
|
suggestions: [{ type: i0.Input }],
|
|
26440
26510
|
control: [{ type: i0.Input }],
|
|
26511
|
+
onInit: [{ type: i0.Output }],
|
|
26441
26512
|
onValueChanged: [{ type: i0.Output }]
|
|
26442
26513
|
};
|
|
26443
26514
|
|
|
@@ -26488,6 +26559,7 @@
|
|
|
26488
26559
|
height: 900,
|
|
26489
26560
|
maximize: true
|
|
26490
26561
|
});
|
|
26562
|
+
_this.onInit = new i0.EventEmitter();
|
|
26491
26563
|
_this.onSelect = new i0.EventEmitter();
|
|
26492
26564
|
_this.onUnSelect = new i0.EventEmitter();
|
|
26493
26565
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -26526,6 +26598,7 @@
|
|
|
26526
26598
|
this.buildFilterKeyword();
|
|
26527
26599
|
this.buildSettingEntityPicker();
|
|
26528
26600
|
this.updateFuncCheckReadOnlyItem();
|
|
26601
|
+
this.onInit.emit(this);
|
|
26529
26602
|
};
|
|
26530
26603
|
AutoCompletePickerComponent.prototype.updateFuncCheckReadOnlyItem = function () {
|
|
26531
26604
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -27028,14 +27101,17 @@
|
|
|
27028
27101
|
this.getDataSelectedValue(obj)
|
|
27029
27102
|
.then(function (res) {
|
|
27030
27103
|
_this.updateSelectedValue();
|
|
27031
|
-
|
|
27032
|
-
_this.isFiredReady = true;
|
|
27033
|
-
// Hàm ready này chỉ CẦN DÙNG trong trường hợp autocomplete-picker có value => Dùng để lấy dữ liệu các component con
|
|
27034
|
-
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
27035
|
-
_this.onReady.emit();
|
|
27036
|
-
}
|
|
27104
|
+
_this.checkFireReady();
|
|
27037
27105
|
});
|
|
27038
27106
|
};
|
|
27107
|
+
AutoCompletePickerComponent.prototype.checkFireReady = function () {
|
|
27108
|
+
if (!this.isFiredReady && this.hasValue) {
|
|
27109
|
+
this.isFiredReady = true;
|
|
27110
|
+
// Hàm ready này chỉ CẦN DÙNG trong trường hợp autocomplete-picker có value => Dùng để lấy dữ liệu các component con
|
|
27111
|
+
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
27112
|
+
this.onReady.emit();
|
|
27113
|
+
}
|
|
27114
|
+
};
|
|
27039
27115
|
AutoCompletePickerComponent.prototype.registerOnChange = function (fn) {
|
|
27040
27116
|
this.onChangeBase = fn;
|
|
27041
27117
|
};
|
|
@@ -27070,6 +27146,7 @@
|
|
|
27070
27146
|
disabled: [{ type: i0.Input }],
|
|
27071
27147
|
popupSize: [{ type: i0.Input }],
|
|
27072
27148
|
readOnlyValues: [{ type: i0.Input }],
|
|
27149
|
+
onInit: [{ type: i0.Output }],
|
|
27073
27150
|
onSelect: [{ type: i0.Output }],
|
|
27074
27151
|
onUnSelect: [{ type: i0.Output }],
|
|
27075
27152
|
onChanged: [{ type: i0.Output }],
|
|
@@ -29507,6 +29584,7 @@
|
|
|
29507
29584
|
this._dropDownService = _dropDownService;
|
|
29508
29585
|
this._deviceDetectorService = _deviceDetectorService;
|
|
29509
29586
|
this._styleClass = 'p-grid tn-check-box-list';
|
|
29587
|
+
this.onInit = new i0.EventEmitter();
|
|
29510
29588
|
this.onSelect = new i0.EventEmitter();
|
|
29511
29589
|
this.onReady = new i0.EventEmitter();
|
|
29512
29590
|
this.dataSourceInternal = [];
|
|
@@ -29565,6 +29643,7 @@
|
|
|
29565
29643
|
if (this.control.pColClass) {
|
|
29566
29644
|
this.classCheckBox += " p-col-" + this.control.pColClass;
|
|
29567
29645
|
}
|
|
29646
|
+
this.onInit.emit(this);
|
|
29568
29647
|
};
|
|
29569
29648
|
CheckBoxListComponent.prototype.bindDataSource = function (serviceUri, baseService) {
|
|
29570
29649
|
var _this = this;
|
|
@@ -29698,6 +29777,7 @@
|
|
|
29698
29777
|
control: [{ type: i0.Input }],
|
|
29699
29778
|
dataSource: [{ type: i0.Input }],
|
|
29700
29779
|
disabled: [{ type: i0.Input }],
|
|
29780
|
+
onInit: [{ type: i0.Output }],
|
|
29701
29781
|
onSelect: [{ type: i0.Output }],
|
|
29702
29782
|
onReady: [{ type: i0.Output }]
|
|
29703
29783
|
};
|
|
@@ -29788,6 +29868,7 @@
|
|
|
29788
29868
|
_this._coCauToChucService = _coCauToChucService;
|
|
29789
29869
|
_this._translateService = _translateService;
|
|
29790
29870
|
_this.disabled = false;
|
|
29871
|
+
_this.onInit = new i0.EventEmitter();
|
|
29791
29872
|
_this.onChanged = new i0.EventEmitter();
|
|
29792
29873
|
_this.onSelect = new i0.EventEmitter();
|
|
29793
29874
|
_this.onUnSelect = new i0.EventEmitter();
|
|
@@ -29819,6 +29900,7 @@
|
|
|
29819
29900
|
sort: false
|
|
29820
29901
|
})
|
|
29821
29902
|
], mdWidth: 12 }));
|
|
29903
|
+
this.onInit.emit(this);
|
|
29822
29904
|
};
|
|
29823
29905
|
CoCauToChucPickerListComponent.prototype.handleFocus = function (evt) {
|
|
29824
29906
|
this.onFocus.emit(evt);
|
|
@@ -29875,6 +29957,7 @@
|
|
|
29875
29957
|
control: [{ type: i0.Input }],
|
|
29876
29958
|
disabled: [{ type: i0.Input }],
|
|
29877
29959
|
readOnlyValues: [{ type: i0.Input }],
|
|
29960
|
+
onInit: [{ type: i0.Output }],
|
|
29878
29961
|
onChanged: [{ type: i0.Output }],
|
|
29879
29962
|
onSelect: [{ type: i0.Output }],
|
|
29880
29963
|
onUnSelect: [{ type: i0.Output }],
|
|
@@ -29899,6 +29982,7 @@
|
|
|
29899
29982
|
this.showClear = false;
|
|
29900
29983
|
this.disabledParentItem = true;
|
|
29901
29984
|
this.rootParentId = null;
|
|
29985
|
+
this.onInit = new i0.EventEmitter();
|
|
29902
29986
|
this.onChanged = new i0.EventEmitter();
|
|
29903
29987
|
this.guidEmpty = '00000000-0000-0000-0000-000000000000';
|
|
29904
29988
|
this.flashCacheParent = [];
|
|
@@ -29936,6 +30020,7 @@
|
|
|
29936
30020
|
if (this.control)
|
|
29937
30021
|
this.control._component = this;
|
|
29938
30022
|
this.bindingUser();
|
|
30023
|
+
this.onInit.emit(this);
|
|
29939
30024
|
};
|
|
29940
30025
|
CoCauToChucPickerComponent.prototype.bindingUser = function () {
|
|
29941
30026
|
var _this = this;
|
|
@@ -30084,6 +30169,7 @@
|
|
|
30084
30169
|
showClear: [{ type: i0.Input }],
|
|
30085
30170
|
disabledParentItem: [{ type: i0.Input }],
|
|
30086
30171
|
rootParentId: [{ type: i0.Input }],
|
|
30172
|
+
onInit: [{ type: i0.Output }],
|
|
30087
30173
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }]
|
|
30088
30174
|
};
|
|
30089
30175
|
|
|
@@ -34110,12 +34196,14 @@
|
|
|
34110
34196
|
function CongViecPickerComponent(_injector, _notifierService) {
|
|
34111
34197
|
var _this = _super.call(this, _injector) || this;
|
|
34112
34198
|
_this._notifierService = _notifierService;
|
|
34199
|
+
_this.onInit = new i0.EventEmitter();
|
|
34113
34200
|
_this.onChanged = new i0.EventEmitter();
|
|
34114
34201
|
_this.idCongViecs = [];
|
|
34115
34202
|
_this.formState = exports.FormState;
|
|
34116
34203
|
return _this;
|
|
34117
34204
|
}
|
|
34118
34205
|
CongViecPickerComponent.prototype.ngOnInit = function () {
|
|
34206
|
+
this.onInit.emit(this);
|
|
34119
34207
|
};
|
|
34120
34208
|
CongViecPickerComponent.prototype.handleIdsChange = function (ids) {
|
|
34121
34209
|
this.idCongViecs = ids;
|
|
@@ -34165,6 +34253,7 @@
|
|
|
34165
34253
|
]; };
|
|
34166
34254
|
CongViecPickerComponent.propDecorators = {
|
|
34167
34255
|
control: [{ type: i0.Input }],
|
|
34256
|
+
onInit: [{ type: i0.Output }],
|
|
34168
34257
|
onChanged: [{ type: i0.Output }]
|
|
34169
34258
|
};
|
|
34170
34259
|
|
|
@@ -34767,11 +34856,13 @@
|
|
|
34767
34856
|
var DatetimePickerRangeComponent = /** @class */ (function () {
|
|
34768
34857
|
function DatetimePickerRangeComponent() {
|
|
34769
34858
|
this.control = new DateTimeRangeControlSchema();
|
|
34859
|
+
this.onInit = new i0.EventEmitter();
|
|
34770
34860
|
this.onClose = new i0.EventEmitter();
|
|
34771
34861
|
this.onChanged = new i0.EventEmitter();
|
|
34772
34862
|
this._controlModelData = [undefined, undefined];
|
|
34773
34863
|
}
|
|
34774
34864
|
DatetimePickerRangeComponent.prototype.ngOnInit = function () {
|
|
34865
|
+
this.onInit.emit(this);
|
|
34775
34866
|
};
|
|
34776
34867
|
DatetimePickerRangeComponent.prototype.clear = function () {
|
|
34777
34868
|
var re = (this._controlModelData[0] != null) || (this._controlModelData[1] != null);
|
|
@@ -34824,6 +34915,7 @@
|
|
|
34824
34915
|
DatetimePickerRangeComponent.propDecorators = {
|
|
34825
34916
|
control: [{ type: i0.Input }],
|
|
34826
34917
|
disabled: [{ type: i0.Input }],
|
|
34918
|
+
onInit: [{ type: i0.Output }],
|
|
34827
34919
|
onClose: [{ type: i0.Output }],
|
|
34828
34920
|
onChanged: [{ type: i0.Output }]
|
|
34829
34921
|
};
|
|
@@ -34836,6 +34928,7 @@
|
|
|
34836
34928
|
this.hideTransitionOptions = '195ms ease-in';
|
|
34837
34929
|
this.showTransitionOptions = '225ms ease-out';
|
|
34838
34930
|
this.control = new DateTimeControlSchema();
|
|
34931
|
+
this.onInit = new i0.EventEmitter();
|
|
34839
34932
|
this.onSelect = new i0.EventEmitter();
|
|
34840
34933
|
this.onChanged = new i0.EventEmitter();
|
|
34841
34934
|
this.onFocus = new i0.EventEmitter();
|
|
@@ -34843,6 +34936,7 @@
|
|
|
34843
34936
|
this.onClose = new i0.EventEmitter();
|
|
34844
34937
|
}
|
|
34845
34938
|
DatetimePickerComponent.prototype.ngOnInit = function () {
|
|
34939
|
+
this.onInit.emit(this);
|
|
34846
34940
|
};
|
|
34847
34941
|
DatetimePickerComponent.prototype.writeValue = function (obj) {
|
|
34848
34942
|
if (obj) {
|
|
@@ -35015,6 +35109,7 @@
|
|
|
35015
35109
|
calendar: [{ type: i0.ViewChild, args: ['calendar', { static: true },] }],
|
|
35016
35110
|
control: [{ type: i0.Input }],
|
|
35017
35111
|
disabled: [{ type: i0.Input }],
|
|
35112
|
+
onInit: [{ type: i0.Output }],
|
|
35018
35113
|
onSelect: [{ type: i0.Output }],
|
|
35019
35114
|
onChanged: [{ type: i0.Output }],
|
|
35020
35115
|
onFocus: [{ type: i0.Output }],
|
|
@@ -35033,6 +35128,7 @@
|
|
|
35033
35128
|
_this.appendTo = 'body';
|
|
35034
35129
|
_this.defaultSelectedStyleClass = 'custom-select-item';
|
|
35035
35130
|
_this._itemSelectedStyleClass = _this.defaultSelectedStyleClass;
|
|
35131
|
+
_this.onInit = new i0.EventEmitter();
|
|
35036
35132
|
_this.onChanged = new i0.EventEmitter();
|
|
35037
35133
|
_this.onCollapse = new i0.EventEmitter();
|
|
35038
35134
|
_this.onExpand = new i0.EventEmitter();
|
|
@@ -35196,6 +35292,7 @@
|
|
|
35196
35292
|
if (this.control.onInit) {
|
|
35197
35293
|
this.control.onInit(this);
|
|
35198
35294
|
}
|
|
35295
|
+
this.onInit.emit(this);
|
|
35199
35296
|
};
|
|
35200
35297
|
DropdownComponent.prototype.setDefaultSetting = function () {
|
|
35201
35298
|
var _this = this;
|
|
@@ -36003,6 +36100,7 @@
|
|
|
36003
36100
|
dataSource: [{ type: i0.Input }],
|
|
36004
36101
|
value: [{ type: i0.Input }],
|
|
36005
36102
|
itemSelectedStyleClass: [{ type: i0.Input }],
|
|
36103
|
+
onInit: [{ type: i0.Output }],
|
|
36006
36104
|
onChanged: [{ type: i0.Output }],
|
|
36007
36105
|
onCollapse: [{ type: i0.Output }],
|
|
36008
36106
|
onExpand: [{ type: i0.Output }],
|
|
@@ -37435,6 +37533,7 @@
|
|
|
37435
37533
|
_this._translateService = _translateService;
|
|
37436
37534
|
_this.disabled = false;
|
|
37437
37535
|
_this.readOnly = false;
|
|
37536
|
+
_this.onInit = new i0.EventEmitter();
|
|
37438
37537
|
_this.onSelect = new i0.EventEmitter();
|
|
37439
37538
|
_this.onUnSelect = new i0.EventEmitter();
|
|
37440
37539
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -37492,6 +37591,7 @@
|
|
|
37492
37591
|
});
|
|
37493
37592
|
this.advanceData.fields = this.getFields();
|
|
37494
37593
|
_super.prototype.ngOnInit.call(this);
|
|
37594
|
+
this.onInit.emit(this);
|
|
37495
37595
|
};
|
|
37496
37596
|
EntityPickerComponent.prototype.selectEntity = function () {
|
|
37497
37597
|
this.showDetailForm = true;
|
|
@@ -37681,6 +37781,7 @@
|
|
|
37681
37781
|
disabled: [{ type: i0.Input }],
|
|
37682
37782
|
readOnly: [{ type: i0.Input }],
|
|
37683
37783
|
children: [{ type: i0.Input }],
|
|
37784
|
+
onInit: [{ type: i0.Output }],
|
|
37684
37785
|
onSelect: [{ type: i0.Output, args: ['onSelect',] }],
|
|
37685
37786
|
onUnSelect: [{ type: i0.Output, args: ['onUnSelect',] }],
|
|
37686
37787
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }]
|
|
@@ -38383,6 +38484,7 @@
|
|
|
38383
38484
|
_this.inTaiLieuChung = false;
|
|
38384
38485
|
_this.copyToFolderId = _this._commonService.guidEmpty();
|
|
38385
38486
|
_this.multipleCheckWhenClickRow = true;
|
|
38487
|
+
_this.onInit = new i0.EventEmitter();
|
|
38386
38488
|
_this.onReady = new i0.EventEmitter();
|
|
38387
38489
|
_this.entityKeyChange = new i0.EventEmitter();
|
|
38388
38490
|
_this.closePopup = new i0.EventEmitter();
|
|
@@ -38487,6 +38589,7 @@
|
|
|
38487
38589
|
}
|
|
38488
38590
|
this.reloadData();
|
|
38489
38591
|
this.checkAndLoadRootFolderContent();
|
|
38592
|
+
this.onInit.emit(this);
|
|
38490
38593
|
};
|
|
38491
38594
|
FileManagerComponent.prototype.checkAndLoadRootFolderContent = function () {
|
|
38492
38595
|
if (!this.inited || this.fileDataService)
|
|
@@ -39728,6 +39831,7 @@
|
|
|
39728
39831
|
copyToFolderId: [{ type: i0.Input }],
|
|
39729
39832
|
value: [{ type: i0.Input }],
|
|
39730
39833
|
multipleCheckWhenClickRow: [{ type: i0.Input }],
|
|
39834
|
+
onInit: [{ type: i0.Output }],
|
|
39731
39835
|
onReady: [{ type: i0.Output }],
|
|
39732
39836
|
entityKeyChange: [{ type: i0.Output }],
|
|
39733
39837
|
closePopup: [{ type: i0.Output }],
|
|
@@ -41206,6 +41310,7 @@
|
|
|
41206
41310
|
_this.invalidFileLimitMessageSummary = 'Quá số lượng file cho phép, ';
|
|
41207
41311
|
_this.invalidFileLimitMessageDetail = 'tối đa {0} file.';
|
|
41208
41312
|
_this.sharedFolderType = exports.SharedFolderType.Tempt;
|
|
41313
|
+
_this.onInit = new i0.EventEmitter();
|
|
41209
41314
|
_this.onSelect = new i0.EventEmitter();
|
|
41210
41315
|
_this.onRemove = new i0.EventEmitter();
|
|
41211
41316
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -41232,6 +41337,7 @@
|
|
|
41232
41337
|
this.isDisabled = isDisabled;
|
|
41233
41338
|
};
|
|
41234
41339
|
FileUploadComponent.prototype.ngOnInit = function () {
|
|
41340
|
+
this.onInit.emit(this);
|
|
41235
41341
|
};
|
|
41236
41342
|
FileUploadComponent.prototype.getFile = function () {
|
|
41237
41343
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -41386,6 +41492,7 @@
|
|
|
41386
41492
|
invalidFileLimitMessageSummary: [{ type: i0.Input }],
|
|
41387
41493
|
invalidFileLimitMessageDetail: [{ type: i0.Input }],
|
|
41388
41494
|
sharedFolderType: [{ type: i0.Input }],
|
|
41495
|
+
onInit: [{ type: i0.Output }],
|
|
41389
41496
|
onSelect: [{ type: i0.Output }],
|
|
41390
41497
|
onRemove: [{ type: i0.Output }],
|
|
41391
41498
|
onChanged: [{ type: i0.Output }]
|
|
@@ -41508,6 +41615,7 @@
|
|
|
41508
41615
|
this.viewMode = false;
|
|
41509
41616
|
this.inputStyleClass = '';
|
|
41510
41617
|
this.autoFormat = true;
|
|
41618
|
+
this.onInit = new i0.EventEmitter();
|
|
41511
41619
|
this.onFocus = new i0.EventEmitter();
|
|
41512
41620
|
this.onBlur = new i0.EventEmitter();
|
|
41513
41621
|
this.onChanged = new i0.EventEmitter();
|
|
@@ -41526,6 +41634,7 @@
|
|
|
41526
41634
|
if (!this.autoFormat) {
|
|
41527
41635
|
this.thousandSeperator = '';
|
|
41528
41636
|
}
|
|
41637
|
+
this.onInit.emit(this);
|
|
41529
41638
|
};
|
|
41530
41639
|
MaskComponent.prototype.writeValue = function (obj) {
|
|
41531
41640
|
if (obj) {
|
|
@@ -41625,6 +41734,7 @@
|
|
|
41625
41734
|
viewMode: [{ type: i0.Input }],
|
|
41626
41735
|
inputStyleClass: [{ type: i0.Input }],
|
|
41627
41736
|
autoFormat: [{ type: i0.Input }],
|
|
41737
|
+
onInit: [{ type: i0.Output }],
|
|
41628
41738
|
onFocus: [{ type: i0.Output }],
|
|
41629
41739
|
onBlur: [{ type: i0.Output }],
|
|
41630
41740
|
onChanged: [{ type: i0.Output }]
|
|
@@ -41690,6 +41800,7 @@
|
|
|
41690
41800
|
this.suffix = '';
|
|
41691
41801
|
this.prefix = '';
|
|
41692
41802
|
this.decimalPlaces = 2;
|
|
41803
|
+
this.onInit = new i0.EventEmitter();
|
|
41693
41804
|
this.focus = new i0.EventEmitter();
|
|
41694
41805
|
this.enterSmart = new i0.EventEmitter();
|
|
41695
41806
|
this.enter = new i0.EventEmitter();
|
|
@@ -41697,6 +41808,7 @@
|
|
|
41697
41808
|
this.change = new i0.EventEmitter();
|
|
41698
41809
|
}
|
|
41699
41810
|
NumberPickerRangeComponent.prototype.ngOnInit = function () {
|
|
41811
|
+
this.onInit.emit(this);
|
|
41700
41812
|
};
|
|
41701
41813
|
NumberPickerRangeComponent.prototype.clear = function () {
|
|
41702
41814
|
var re = (this.model[0] != null && this.model[0] !== '') || (this.model[1] != null && this.model[1] !== '');
|
|
@@ -41809,6 +41921,7 @@
|
|
|
41809
41921
|
min: [{ type: i0.Input }],
|
|
41810
41922
|
max: [{ type: i0.Input }],
|
|
41811
41923
|
decimalPlaces: [{ type: i0.Input }],
|
|
41924
|
+
onInit: [{ type: i0.Output }],
|
|
41812
41925
|
focus: [{ type: i0.Output }],
|
|
41813
41926
|
enterSmart: [{ type: i0.Output }],
|
|
41814
41927
|
enter: [{ type: i0.Output }],
|
|
@@ -42241,6 +42354,7 @@
|
|
|
42241
42354
|
function RadioButtonListComponent(_crudService, _deviceDetectorService) {
|
|
42242
42355
|
this._crudService = _crudService;
|
|
42243
42356
|
this._deviceDetectorService = _deviceDetectorService;
|
|
42357
|
+
this.onInit = new i0.EventEmitter();
|
|
42244
42358
|
this.valueChange = new i0.EventEmitter();
|
|
42245
42359
|
this.onChanged = new i0.EventEmitter();
|
|
42246
42360
|
this.onDataSourceLoaded = new i0.EventEmitter();
|
|
@@ -42282,6 +42396,7 @@
|
|
|
42282
42396
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
42283
42397
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
42284
42398
|
}
|
|
42399
|
+
this.onInit.emit(this);
|
|
42285
42400
|
};
|
|
42286
42401
|
RadioButtonListComponent.prototype.setDefaultSetting = function () {
|
|
42287
42402
|
var _this = this;
|
|
@@ -42533,6 +42648,7 @@
|
|
|
42533
42648
|
dataSource: [{ type: i0.Input }],
|
|
42534
42649
|
value: [{ type: i0.Input }],
|
|
42535
42650
|
disabled: [{ type: i0.Input }],
|
|
42651
|
+
onInit: [{ type: i0.Output }],
|
|
42536
42652
|
valueChange: [{ type: i0.Output }],
|
|
42537
42653
|
onChanged: [{ type: i0.Output }],
|
|
42538
42654
|
onDataSourceLoaded: [{ type: i0.Output }],
|
|
@@ -42557,6 +42673,7 @@
|
|
|
42557
42673
|
_this.serviceCode = '';
|
|
42558
42674
|
_this.entity = '';
|
|
42559
42675
|
_this.chooseLabel = 'Chọn';
|
|
42676
|
+
_this.onInit = new i0.EventEmitter();
|
|
42560
42677
|
_this.onSelect = new i0.EventEmitter();
|
|
42561
42678
|
_this.onRemove = new i0.EventEmitter();
|
|
42562
42679
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -42600,6 +42717,7 @@
|
|
|
42600
42717
|
ServiceFileUploadComponent.prototype.ngOnInit = function () {
|
|
42601
42718
|
this.setUp();
|
|
42602
42719
|
this.subscribe();
|
|
42720
|
+
this.onInit.emit(this);
|
|
42603
42721
|
};
|
|
42604
42722
|
ServiceFileUploadComponent.prototype.setUp = function () {
|
|
42605
42723
|
this.accept = this.control.accept;
|
|
@@ -42976,6 +43094,7 @@
|
|
|
42976
43094
|
entity: [{ type: i0.Input }],
|
|
42977
43095
|
entityKey: [{ type: i0.Input }],
|
|
42978
43096
|
chooseLabel: [{ type: i0.Input }],
|
|
43097
|
+
onInit: [{ type: i0.Output }],
|
|
42979
43098
|
onSelect: [{ type: i0.Output }],
|
|
42980
43099
|
onRemove: [{ type: i0.Output }],
|
|
42981
43100
|
onChanged: [{ type: i0.Output }]
|
|
@@ -47762,6 +47881,7 @@
|
|
|
47762
47881
|
var _this = _super.call(this, injector) || this;
|
|
47763
47882
|
_this.disabled = false;
|
|
47764
47883
|
_this.appendTo = 'body';
|
|
47884
|
+
_this.onInit = new i0.EventEmitter();
|
|
47765
47885
|
_this.change = new i0.EventEmitter();
|
|
47766
47886
|
return _this;
|
|
47767
47887
|
}
|
|
@@ -47784,7 +47904,7 @@
|
|
|
47784
47904
|
this.disabled = isDisabled;
|
|
47785
47905
|
};
|
|
47786
47906
|
TnColorPickerComponent.prototype.ngOnInit = function () {
|
|
47787
|
-
|
|
47907
|
+
this.onInit.emit(this);
|
|
47788
47908
|
};
|
|
47789
47909
|
TnColorPickerComponent.prototype.changePicker = function (evt) {
|
|
47790
47910
|
this.model.inputValue = this.model.value;
|
|
@@ -47819,6 +47939,7 @@
|
|
|
47819
47939
|
TnColorPickerComponent.propDecorators = {
|
|
47820
47940
|
disabled: [{ type: i0.Input }],
|
|
47821
47941
|
appendTo: [{ type: i0.Input }],
|
|
47942
|
+
onInit: [{ type: i0.Output }],
|
|
47822
47943
|
change: [{ type: i0.Output }]
|
|
47823
47944
|
};
|
|
47824
47945
|
|
|
@@ -48295,15 +48416,17 @@
|
|
|
48295
48416
|
function TnTabViewComponent(_commonService) {
|
|
48296
48417
|
this._commonService = _commonService;
|
|
48297
48418
|
this.data = [];
|
|
48419
|
+
this._hiddenTab = [];
|
|
48420
|
+
this.hiddenInfo = {};
|
|
48298
48421
|
this.allowViewAll = false;
|
|
48299
48422
|
this.isDynamicHeight = false;
|
|
48300
|
-
this.useScrollbar = false;
|
|
48301
48423
|
this.onTabChange = new i0.EventEmitter();
|
|
48302
48424
|
this.activeIndexChange = new i0.EventEmitter();
|
|
48303
48425
|
this.template = {};
|
|
48304
48426
|
this.onlyIcon = false;
|
|
48305
48427
|
this.styleClass = 'tn-tabview-beauty';
|
|
48306
48428
|
this.height = '100%';
|
|
48429
|
+
this.ready = false;
|
|
48307
48430
|
}
|
|
48308
48431
|
Object.defineProperty(TnTabViewComponent.prototype, "vertical", {
|
|
48309
48432
|
set: function (value) {
|
|
@@ -48314,6 +48437,21 @@
|
|
|
48314
48437
|
configurable: true
|
|
48315
48438
|
});
|
|
48316
48439
|
;
|
|
48440
|
+
Object.defineProperty(TnTabViewComponent.prototype, "hiddenTab", {
|
|
48441
|
+
set: function (value) {
|
|
48442
|
+
if (value) {
|
|
48443
|
+
this._hiddenTab = value;
|
|
48444
|
+
}
|
|
48445
|
+
else {
|
|
48446
|
+
this._hiddenTab = [];
|
|
48447
|
+
}
|
|
48448
|
+
if (this.ready) {
|
|
48449
|
+
this.setHiddenInfo();
|
|
48450
|
+
}
|
|
48451
|
+
},
|
|
48452
|
+
enumerable: false,
|
|
48453
|
+
configurable: true
|
|
48454
|
+
});
|
|
48317
48455
|
Object.defineProperty(TnTabViewComponent.prototype, "activeIndex", {
|
|
48318
48456
|
set: function (value) {
|
|
48319
48457
|
this.currentTabIndex = value;
|
|
@@ -48333,6 +48471,8 @@
|
|
|
48333
48471
|
}
|
|
48334
48472
|
this.currentTabIndex = currentTabIndex;
|
|
48335
48473
|
}
|
|
48474
|
+
this.ready = true;
|
|
48475
|
+
this.setHiddenInfo();
|
|
48336
48476
|
};
|
|
48337
48477
|
TnTabViewComponent.prototype.ngAfterContentInit = function () {
|
|
48338
48478
|
var _this = this;
|
|
@@ -48345,6 +48485,13 @@
|
|
|
48345
48485
|
});
|
|
48346
48486
|
this.setStyleClass();
|
|
48347
48487
|
};
|
|
48488
|
+
TnTabViewComponent.prototype.setHiddenInfo = function () {
|
|
48489
|
+
var _this = this;
|
|
48490
|
+
this.hiddenInfo = {};
|
|
48491
|
+
this._hiddenTab.forEach(function (tabCode) {
|
|
48492
|
+
_this.hiddenInfo[tabCode] = true;
|
|
48493
|
+
});
|
|
48494
|
+
};
|
|
48348
48495
|
TnTabViewComponent.prototype.setStyleClass = function () {
|
|
48349
48496
|
var result = 'tn-tabview-beauty';
|
|
48350
48497
|
if (this._vertical) {
|
|
@@ -48358,14 +48505,20 @@
|
|
|
48358
48505
|
TnTabViewComponent.prototype.handleTabChange = function (evt) {
|
|
48359
48506
|
this.currentTabIndex = evt.index;
|
|
48360
48507
|
this.activeIndexChange.emit(this.currentTabIndex);
|
|
48361
|
-
|
|
48508
|
+
};
|
|
48509
|
+
TnTabViewComponent.prototype.handleTabLoaded = function (item) {
|
|
48510
|
+
this.currentTabCode = item.code;
|
|
48511
|
+
this.onTabChange.emit({
|
|
48512
|
+
index: this.currentTabIndex,
|
|
48513
|
+
code: this.currentTabCode
|
|
48514
|
+
});
|
|
48362
48515
|
};
|
|
48363
48516
|
return TnTabViewComponent;
|
|
48364
48517
|
}());
|
|
48365
48518
|
TnTabViewComponent.decorators = [
|
|
48366
48519
|
{ type: i0.Component, args: [{
|
|
48367
48520
|
selector: 'tn-tabview',
|
|
48368
|
-
template: "<div [style.height]=\"height\">\r\n <p-tabView #tab orientation=\"top\" [styleClass]=\"styleClass\" [activeIndex]=\"currentTabIndex\"\r\n (onChange)=\"handleTabChange($event)\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <p-tabPanel *ngIf=\"!item.hidden\" [leftIcon]=\"item.icon\" [header]=\"item.label\"\r\n [headerStyleClass]=\"item.headerStyleClass\">\r\n <ng-container *ngIf=\"allowViewAll || currentTabIndex == i\">\r\n <tn-custom-scrollbar *ngIf=\"useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
48521
|
+
template: "<div [style.height]=\"height\">\r\n <p-tabView #tab orientation=\"top\" [styleClass]=\"styleClass\" [activeIndex]=\"currentTabIndex\"\r\n (onChange)=\"handleTabChange($event)\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <p-tabPanel *ngIf=\"!item.hidden && !hiddenInfo[item.code]\" [leftIcon]=\"item.icon\" [header]=\"item.label\"\r\n [headerStyleClass]=\"item.headerStyleClass\">\r\n <ng-container *ngIf=\"allowViewAll || item.alwayRender || currentTabIndex == i\">\r\n <tn-custom-scrollbar *ngIf=\"item.useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!item.useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <after-view-checked (loaded)=\"handleTabLoaded(item)\"></after-view-checked>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
48369
48522
|
styles: [".accordion-link{flex:1 1;text-align:right}.accordion-link ul{list-style:none;margin-bottom:0;margin-top:0;padding-left:0}.accordion-link ul li{background-color:#a4a5a4;border-radius:4px;color:#fff;display:inline-block;line-height:20px;margin-bottom:.5rem;margin-left:.5rem;padding:6px 12px;transition:all .3s ease-out}.accordion-link ul li:hover{background-color:#3db762;cursor:pointer}.accordion-link ul li.tab-active{background-color:#23a349}.tn-l-toolbar{display:flex;padding:.5rem .5rem 0}.hoso-container{height:auto;max-height:none}.tab-number{align-items:center;background:#a4a5a4;border-radius:2px;color:#fff;display:inline-flex;font-size:.9em;height:20px;justify-content:center;margin-right:.5rem;padding-top:2px;width:20px}.tab-number.active{background:#23a349}::ng-deep tn-accordion-tab{display:flex;flex-direction:column;height:100%}::ng-deep tn-accordion-tab .p-accordion-header{position:-webkit-sticky;position:sticky;top:1px;z-index:6}::ng-deep tn-accordion-tab .tn-l-p-accordion-wrapper{border-radius:4px;display:flex;flex:1;margin-left:.5rem;margin-right:.5rem;overflow:auto}::ng-deep tn-accordion-tab .tn-l-p-accordion-wrapper tn-custom-scrollbar{width:100%}::ng-deep tn-accordion-tab .ps__rail-x,::ng-deep tn-accordion-tab .ps__rail-y{z-index:7}::ng-deep tn-accordion-tab .tn-l-toolbar .toolbar{flex:0 0 auto;padding-top:0}@media (max-width:640px){.accordion-link,.toolbar{overflow-x:auto;white-space:nowrap}.tn-l-custom-wrapper{display:block}.accordion-link ul{margin-top:0}.tn-l-toolbar{display:block}}"]
|
|
48370
48523
|
},] }
|
|
48371
48524
|
];
|
|
@@ -48376,10 +48529,10 @@
|
|
|
48376
48529
|
children: [{ type: i0.ContentChildren, args: [i0.TemplateRef,] }],
|
|
48377
48530
|
vertical: [{ type: i0.Input }],
|
|
48378
48531
|
data: [{ type: i0.Input }],
|
|
48532
|
+
hiddenTab: [{ type: i0.Input }],
|
|
48379
48533
|
allowViewAll: [{ type: i0.Input }],
|
|
48380
48534
|
activeIndex: [{ type: i0.Input }],
|
|
48381
48535
|
isDynamicHeight: [{ type: i0.Input }],
|
|
48382
|
-
useScrollbar: [{ type: i0.Input }],
|
|
48383
48536
|
onTabChange: [{ type: i0.Output }],
|
|
48384
48537
|
activeIndexChange: [{ type: i0.Output }]
|
|
48385
48538
|
};
|
|
@@ -48423,6 +48576,7 @@
|
|
|
48423
48576
|
_this.required = false;
|
|
48424
48577
|
_this.height = 200;
|
|
48425
48578
|
_this.field = '';
|
|
48579
|
+
_this.onInit = new i0.EventEmitter();
|
|
48426
48580
|
_this.keydown = new i0.EventEmitter();
|
|
48427
48581
|
_this.onBlur = new i0.EventEmitter();
|
|
48428
48582
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -48451,6 +48605,7 @@
|
|
|
48451
48605
|
}
|
|
48452
48606
|
TnTinymceComponent.prototype.ngOnInit = function () {
|
|
48453
48607
|
this.subscribeContentInsert();
|
|
48608
|
+
this.onInit.emit(this);
|
|
48454
48609
|
};
|
|
48455
48610
|
TnTinymceComponent.prototype.ngAfterViewInit = function () {
|
|
48456
48611
|
var mode = this.mode;
|
|
@@ -48808,6 +48963,7 @@
|
|
|
48808
48963
|
height: [{ type: i0.Input }],
|
|
48809
48964
|
field: [{ type: i0.Input }],
|
|
48810
48965
|
languageCode: [{ type: i0.Input }],
|
|
48966
|
+
onInit: [{ type: i0.Output }],
|
|
48811
48967
|
keydown: [{ type: i0.Output }],
|
|
48812
48968
|
onBlur: [{ type: i0.Output }],
|
|
48813
48969
|
onChanged: [{ type: i0.Output }]
|
|
@@ -49173,6 +49329,7 @@
|
|
|
49173
49329
|
});
|
|
49174
49330
|
_this.multiple = false;
|
|
49175
49331
|
_this.disabled = false;
|
|
49332
|
+
_this.onInit = new i0.EventEmitter();
|
|
49176
49333
|
_this.onSelect = new i0.EventEmitter();
|
|
49177
49334
|
_this.onUnSelect = new i0.EventEmitter();
|
|
49178
49335
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -49284,6 +49441,7 @@
|
|
|
49284
49441
|
this.createSchemaSearch();
|
|
49285
49442
|
this.updateFuncCheckReadOnlyItem();
|
|
49286
49443
|
this.onReady.emit();
|
|
49444
|
+
this.onInit.emit(this);
|
|
49287
49445
|
};
|
|
49288
49446
|
UserPickerComponent.prototype.updateFuncCheckReadOnlyItem = function () {
|
|
49289
49447
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -49804,6 +49962,7 @@
|
|
|
49804
49962
|
multiple: [{ type: i0.Input }],
|
|
49805
49963
|
disabled: [{ type: i0.Input }],
|
|
49806
49964
|
readOnlyValues: [{ type: i0.Input }],
|
|
49965
|
+
onInit: [{ type: i0.Output }],
|
|
49807
49966
|
onSelect: [{ type: i0.Output, args: ['onSelect',] }],
|
|
49808
49967
|
onUnSelect: [{ type: i0.Output, args: ['onUnSelect',] }],
|
|
49809
49968
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }],
|
|
@@ -50309,6 +50468,7 @@
|
|
|
50309
50468
|
var _this = _super.call(this, _injector) || this;
|
|
50310
50469
|
_this._vanBanDenService = _vanBanDenService;
|
|
50311
50470
|
_this._vanBanDiService = _vanBanDiService;
|
|
50471
|
+
_this.onInit = new i0.EventEmitter();
|
|
50312
50472
|
_this.onChanged = new i0.EventEmitter();
|
|
50313
50473
|
_this.onReady = new i0.EventEmitter();
|
|
50314
50474
|
_this.environment = {};
|
|
@@ -50355,6 +50515,7 @@
|
|
|
50355
50515
|
this.setting.fieldSearchText = ['code', 'name'];
|
|
50356
50516
|
this.setting.objectName = ' văn bản';
|
|
50357
50517
|
_super.prototype.ngOnInit.call(this);
|
|
50518
|
+
this.onInit.emit(this);
|
|
50358
50519
|
};
|
|
50359
50520
|
VanBanPickerComponent.prototype.getVanBanDen = function (originGridInfo) {
|
|
50360
50521
|
var _this = this;
|
|
@@ -50592,6 +50753,7 @@
|
|
|
50592
50753
|
loaiVanBan: [{ type: i0.Input }],
|
|
50593
50754
|
readOnly: [{ type: i0.Input }],
|
|
50594
50755
|
control: [{ type: i0.Input }],
|
|
50756
|
+
onInit: [{ type: i0.Output }],
|
|
50595
50757
|
onChanged: [{ type: i0.Output }],
|
|
50596
50758
|
onReady: [{ type: i0.Output }]
|
|
50597
50759
|
};
|
|
@@ -57104,6 +57266,7 @@
|
|
|
57104
57266
|
__extends(ReferenceTextBoxComponent, _super);
|
|
57105
57267
|
function ReferenceTextBoxComponent(injector) {
|
|
57106
57268
|
var _this = _super.call(this, injector) || this;
|
|
57269
|
+
_this.onInit = new i0.EventEmitter();
|
|
57107
57270
|
_this.data = '';
|
|
57108
57271
|
_this.ready = false;
|
|
57109
57272
|
return _this;
|
|
@@ -57123,6 +57286,7 @@
|
|
|
57123
57286
|
this.control._component = this;
|
|
57124
57287
|
this.ready = true;
|
|
57125
57288
|
this.checkAndGetData();
|
|
57289
|
+
this.onInit.emit(this);
|
|
57126
57290
|
};
|
|
57127
57291
|
ReferenceTextBoxComponent.prototype.checkAndGetData = function () {
|
|
57128
57292
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -57176,7 +57340,8 @@
|
|
|
57176
57340
|
]; };
|
|
57177
57341
|
ReferenceTextBoxComponent.propDecorators = {
|
|
57178
57342
|
control: [{ type: i0.Input }],
|
|
57179
|
-
value: [{ type: i0.Input }]
|
|
57343
|
+
value: [{ type: i0.Input }],
|
|
57344
|
+
onInit: [{ type: i0.Output }]
|
|
57180
57345
|
};
|
|
57181
57346
|
|
|
57182
57347
|
var LoadingPageV1Component = /** @class */ (function () {
|