tnx-shared 5.3.375 → 5.3.377

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.
@@ -3,6 +3,7 @@ import { DataFormBase, EventData } from '../../../../../public-api';
3
3
  export declare class EntityPickerSearchFormComponent extends DataFormBase implements OnInit {
4
4
  protected _injector: Injector;
5
5
  datasourceFieldFilter: any[];
6
+ formData: any;
6
7
  set lstDataNotExist(value: string[]);
7
8
  onSearch: EventEmitter<any>;
8
9
  constructor(_injector: Injector);
@@ -1 +1 @@
1
- {"version":3,"file":"entity-picker-search-form.component.d.ts","sourceRoot":"","sources":["../../../../../../../projects/tnx-shared/src/lib/components/entity-picker/entity-picker-dialog/components/entity-picker-search-form/entity-picker-search-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,QAAQ,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AACzF,OAAO,EAA2B,YAAY,EAAE,SAAS,EAAuD,MAAM,2BAA2B,CAAC;AAElJ,qBAMa,+BAAgC,SAAQ,YAAa,YAAW,MAAM;IAa3E,SAAS,CAAC,SAAS,EAAE,QAAQ;IAXxB,qBAAqB,QAAM;IACpC,IAAa,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAO3C;IACS,QAAQ,oBAA2B;gBAE/B,SAAS,EAAE,QAAQ;IAMjC,QAAQ;IAiCF,iBAAiB,CAAC,QAAQ,EAAE,SAAS;IAIrC,WAAW,CAAC,GAAG,EAAE,SAAS;IAM1B,gBAAgB,CAAC,IAAI,KAAA;IAIrB,UAAU;CAQnB"}
1
+ {"version":3,"file":"entity-picker-search-form.component.d.ts","sourceRoot":"","sources":["../../../../../../../projects/tnx-shared/src/lib/components/entity-picker/entity-picker-dialog/components/entity-picker-search-form/entity-picker-search-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,QAAQ,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AACzF,OAAO,EAA2B,YAAY,EAAE,SAAS,EAAuD,MAAM,2BAA2B,CAAC;AAElJ,qBAMa,+BAAgC,SAAQ,YAAa,YAAW,MAAM;IAmB3E,SAAS,CAAC,SAAS,EAAE,QAAQ;IAjBxB,qBAAqB,QAAM;IAC3B,QAAQ,EAAE,GAAG,CAKpB;IACF,IAAa,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAO3C;IACS,QAAQ,oBAA2B;gBAE/B,SAAS,EAAE,QAAQ;IAMjC,QAAQ;IAkCF,iBAAiB,CAAC,QAAQ,EAAE,SAAS;IAIrC,WAAW,CAAC,GAAG,EAAE,SAAS;IAQ1B,gBAAgB,CAAC,IAAI,KAAA;IAIrB,UAAU;CAQnB"}
@@ -62,11 +62,11 @@ export class TreeTableComponent extends ListComponentBase {
62
62
  TreeTableComponent.decorators = [
63
63
  { type: Component, args: [{
64
64
  selector: 'tn-tree-table',
65
- template: "<div #container class=\"custom-card card card-w-title tn-g-page-layout-1\">\n <div class=\"ui-helper-clearfix tn-g-page-layout-1__header-area\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container>\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div class=\"main-title p-col-8\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{crudList: this}\">\n </ng-container>\n </div>\n <div class=\"p-col-4\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </div>\n </div>\n </div>\n <div class=\"p-grid crudListToolbar tn-g-page-layout-1__toolbar-area\">\n <div class=\"p-col-7 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\" [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <button pButton pRipple type=\"button\" label=\"\u0110\u00E1nh l\u1EA1i m\u00E3 ph\u00E2n c\u1EA5p\" icon=\"pi pi-share-alt\"\n class=\"p-button-text\" style=\"display: none;\" (click)=\"handleDanhMaPC($event)\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n </div>\n <div class=\"p-col-5 p-inputgroup advance-search-container\">\n <ng-container *ngIf=\"!setting.hiddenAdvanceSearch\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </ng-container>\n </div>\n </div>\n <div class=\"tn-g-page-layout-1__table-area\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\" class=\"--has-border\">\n <p-treeTable #treetable [value]=\"_dataSource\" [columns]=\"setting.cols\" styleClass=\"treeOrganization\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" style=\"width: 50px\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" style=\"width: 50px\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"!setting.hiddenFunctionColumn\"\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox\">\n <button type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"getData()\"></button>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\"\n [class.sticky]=\"setting.stickyColumn\" (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ttSortableColumn]=\"col.field\"\n [className]=\"col.class\" [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\"\n style=\"text-align: center;\">\n {{col.label}}\n <p-treeTableSortIcon [field]=\"col.field\"></p-treeTableSortIcon>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" style=\"text-align: center;\">\n Ch\u1EE9c n\u0103ng\n </th>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-index=\"rowIndex\"\n let-columns=\"columns\">\n <tr [ttRow]=\"rowNode\" [class.generated-by-base]=\"rowData._GeneratedByBase\"\n [attr.rowIndex]=\"rowData[fieldIndexInDataSource]\" [class.ui-state-highlight]=\"rowData._checked\"\n [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\" (click)=\"handleSelectRow($event, rowData)\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox link-or-action cell-checkbox\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\"\n (onChange)=\"handleCheckRowData(rowData)\">\n </p-checkbox>\n </td>\n <td class=\"stt\" style=\"text-align: center;\">{{rowData[fieldOrder]}}</td>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, rowNode: rowNode, col: col, index: index, i: i}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"!setting.hiddenFunctionColumn\" style=\"text-align: center;\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple\n [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n [disabled]=\"disableEdit(rowData)\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\"\n icon=\"pi pi-pencil\" (click)=\"edit(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\"\n tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\n <!-- <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event, rowData)\"></button> -->\n </div>\n </td>\n </tr>\n <after-view-checked *ngIf=\"rowData._index == _rawDataSource.length - 1\" style=\"display: none;\"\n [renderKey]=\"dataSource\" (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n </p-treeTable>\n <div class=\"row-bottom-sticky\"></div>\n </tn-custom-scrollbar>\n </div>\n</div>\n<ng-template #buttonAdd>\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n </span>\n</ng-template>\n<ng-template #buttonDelete>\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #contentTd let-rowData let-rowNode=\"rowNode\" let-col=\"col\" let-index=\"index\" let-i=\"i\"\n let-expanded=\"expanded\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <tn-treeTableToggler *ngIf=\"col.colHasToggleIcon\" [rowNode]=\"rowNode\"></tn-treeTableToggler>\n <span *ngIf=\"col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{_crudService.renderDate(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{_crudService.renderDateTime(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"handleCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <!-- <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew()\"></button> -->\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </tr>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\n (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n</ng-template>\n<ng-template #buttonExport>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon(true)\"></button>\n</ng-template>\n<ng-template #buttonExportWord>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-word\"\n class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml(true)\"></button>\n</ng-template>",
66
- styles: [".filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.advance-search-container{display:flex;justify-content:flex-end}::ng-deep tn-tree-table advance-search{display:block;flex:1;max-width:400px}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td{border-color:#fff}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}::ng-deep tn-tree-table .ps__rail-x,::ng-deep tn-tree-table .ps__rail-y{z-index:5}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep tn-tree-table tr.generated-by-base td.chkbox{background:#e9ecef}::ng-deep tn-tree-table .cell-header-filter{position:relative}::ng-deep tn-tree-table .cell-header-filter .tn-dropdown{height:32px}::ng-deep tn-tree-table .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep tn-tree-table .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep tn-tree-table .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep tn-tree-table .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep tn-tree-table .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep tn-tree-table .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep tn-tree-table .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep tn-tree-table .cell-header-filter.focus-within,::ng-deep tn-tree-table .cell-header-filter:focus-within{z-index:10!important}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep tn-tree-table .cell-header-filter:last-child .filter-box{right:3px}::ng-deep tn-tree-table .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep tn-tree-table .table-border-line.--left,::ng-deep tn-tree-table .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep tn-tree-table .table-border-line.--bottom,::ng-deep tn-tree-table .table-border-line.--top{left:0;right:0;height:1px}::ng-deep tn-tree-table .table-border-line.--left{left:0}::ng-deep tn-tree-table .table-border-line.--right{right:0}::ng-deep tn-tree-table .table-border-line.--top{top:0}::ng-deep tn-tree-table .table-border-line.--bottom{bottom:0}::ng-deep tn-tree-table .filter-boolean-box{text-align:center}::ng-deep tn-tree-table .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep tn-tree-table .custom-search-area crud-form{width:100%}::ng-deep tn-tree-table>p-contextmenu{display:none}"]
65
+ template: "<div #container class=\"custom-card card card-w-title tn-g-page-layout-1\">\n <div class=\"ui-helper-clearfix tn-g-page-layout-1__header-area\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container>\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div class=\"main-title p-col-8\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{crudList: this}\">\n </ng-container>\n </div>\n <div class=\"p-col-4\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </div>\n </div>\n </div>\n <div class=\"p-grid crudListToolbar tn-g-page-layout-1__toolbar-area\">\n <div class=\"p-col-7 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\" [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <button pButton pRipple type=\"button\" label=\"\u0110\u00E1nh l\u1EA1i m\u00E3 ph\u00E2n c\u1EA5p\" icon=\"pi pi-share-alt\"\n class=\"p-button-text\" style=\"display: none;\" (click)=\"handleDanhMaPC($event)\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n </div>\n <div class=\"p-col-5 p-inputgroup advance-search-container\">\n <ng-container *ngIf=\"!setting.hiddenAdvanceSearch\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </ng-container>\n </div>\n </div>\n <div class=\"tn-g-page-layout-1__table-area\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\" class=\"--has-border\">\n <p-treeTable #treetable [value]=\"_dataSource\" [columns]=\"setting.cols\" [class]=\"_tableClass\"\n styleClass=\"treeOrganization\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" style=\"width: 50px\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" style=\"width: 50px\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"!setting.hiddenFunctionColumn\"\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox\">\n <button type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"getData()\"></button>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\"\n [class.sticky]=\"setting.stickyColumn\" (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ttSortableColumn]=\"col.field\"\n [className]=\"col.class\" [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\"\n style=\"text-align: center;\">\n {{col.label}}\n <p-treeTableSortIcon [field]=\"col.field\"></p-treeTableSortIcon>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"column-function\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\">\n Ch\u1EE9c n\u0103ng\n </th>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-index=\"rowIndex\"\n let-columns=\"columns\">\n <tr [ttRow]=\"rowNode\" [class.generated-by-base]=\"rowData._GeneratedByBase\"\n [attr.rowIndex]=\"rowData[fieldIndexInDataSource]\" [class.ui-state-highlight]=\"rowData._checked\"\n [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\" (click)=\"handleSelectRow($event, rowData)\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox link-or-action cell-checkbox\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\"\n (onChange)=\"handleCheckRowData(rowData)\">\n </p-checkbox>\n </td>\n <td class=\"stt\" style=\"text-align: center;\">{{rowData[fieldOrder]}}</td>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, rowNode: rowNode, col: col, index: index, i: i}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"!setting.hiddenFunctionColumn\" style=\"text-align: center;\" class=\"column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple\n [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n [disabled]=\"disableEdit(rowData)\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\"\n icon=\"pi pi-pencil\" (click)=\"edit(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\"\n tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\n <!-- <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event, rowData)\"></button> -->\n </div>\n </td>\n </tr>\n <after-view-checked *ngIf=\"rowData._index == _rawDataSource.length - 1\" style=\"display: none;\"\n [renderKey]=\"dataSource\" (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n </p-treeTable>\n <div class=\"row-bottom-sticky\"></div>\n </tn-custom-scrollbar>\n </div>\n</div>\n<ng-template #buttonAdd>\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n </span>\n</ng-template>\n<ng-template #buttonDelete>\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #contentTd let-rowData let-rowNode=\"rowNode\" let-col=\"col\" let-index=\"index\" let-i=\"i\"\n let-expanded=\"expanded\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <tn-treeTableToggler *ngIf=\"col.colHasToggleIcon\" [rowNode]=\"rowNode\"></tn-treeTableToggler>\n <span *ngIf=\"col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{_crudService.renderDate(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{_crudService.renderDateTime(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"handleCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <!-- <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew()\"></button> -->\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </tr>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\n (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n</ng-template>\n<ng-template #buttonExport>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon(true)\"></button>\n</ng-template>\n<ng-template #buttonExportWord>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-word\"\n class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml(true)\"></button>\n</ng-template>",
66
+ styles: [".filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.advance-search-container{display:flex;justify-content:flex-end}::ng-deep tn-tree-table advance-search{display:block;flex:1;max-width:400px}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td{border-color:#fff}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}::ng-deep tn-tree-table .sticky-columns-active .column-function{right:0;background:#fcfbfb!important}::ng-deep tn-tree-table .ps__rail-x,::ng-deep tn-tree-table .ps__rail-y{z-index:5}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep tn-tree-table tr.generated-by-base td.chkbox{background:#e9ecef}::ng-deep tn-tree-table .cell-header-filter{position:relative}::ng-deep tn-tree-table .cell-header-filter .tn-dropdown{height:32px}::ng-deep tn-tree-table .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep tn-tree-table .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep tn-tree-table .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep tn-tree-table .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep tn-tree-table .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep tn-tree-table .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep tn-tree-table .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep tn-tree-table .cell-header-filter.focus-within,::ng-deep tn-tree-table .cell-header-filter:focus-within{z-index:10!important}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep tn-tree-table .cell-header-filter:last-child .filter-box{right:3px}::ng-deep tn-tree-table .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep tn-tree-table .table-border-line.--left,::ng-deep tn-tree-table .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep tn-tree-table .table-border-line.--bottom,::ng-deep tn-tree-table .table-border-line.--top{left:0;right:0;height:1px}::ng-deep tn-tree-table .table-border-line.--left{left:0}::ng-deep tn-tree-table .table-border-line.--right{right:0}::ng-deep tn-tree-table .table-border-line.--top{top:0}::ng-deep tn-tree-table .table-border-line.--bottom{bottom:0}::ng-deep tn-tree-table .filter-boolean-box{text-align:center}::ng-deep tn-tree-table .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep tn-tree-table .custom-search-area crud-form{width:100%}::ng-deep tn-tree-table>p-contextmenu{display:none}"]
67
67
  },] }
68
68
  ];
69
69
  TreeTableComponent.ctorParameters = () => [
70
70
  { type: Injector }
71
71
  ];
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDckQsWUFDSSxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxjQUFjLENBQUMsMkJBQTJCO21CQUNuRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsSUFBSSxTQUFTO21CQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO2dCQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO2FBQ3ZHO1NBQ0o7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO2FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBQ0QscUNBQXFDO1FBQ3JDLGlIQUFpSDtRQUNqSCxxQkFBcUI7UUFDckIscURBQXFEO1FBQ3JELHdCQUF3QjtRQUN4Qiw4REFBOEQ7UUFDOUQsNEVBQTRFO1FBQzVFLDBCQUEwQjtRQUMxQixnQkFBZ0I7UUFDaEIsZ0VBQWdFO1FBQ2hFLFlBQVk7UUFDWiw2QkFBNkI7UUFDN0IsK0NBQStDO1FBQy9DLHFHQUFxRztRQUNyRyxtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRiwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQseURBQXlEO1FBQ3pELGtCQUFrQjtRQUVsQixRQUFRO1FBQ1IsYUFBYTtRQUNiLDRDQUE0QztRQUM1QyxRQUFRO1FBQ1IsVUFBVTtJQUNkLENBQUM7OztZQW5FSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLCtvNkJBQTBDOzthQUU3Qzs7O1lBVG1CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0bi10cmVlLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZUNvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3RvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPT0gZGVmYXVsdFNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYW5oTWFQQyhldnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVwZGF0ZU1hUGhhbkNhcEJhc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnxJDDoW5oIGzhuqFpIG3DoyBwaMOibiBj4bqlcCB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgIC8vICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgIH0sIDIwKTtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDIwKTtcbiAgICB9XG59XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDckQsWUFDSSxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxjQUFjLENBQUMsMkJBQTJCO21CQUNuRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsSUFBSSxTQUFTO21CQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO2dCQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO2FBQ3ZHO1NBQ0o7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO2FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBQ0QscUNBQXFDO1FBQ3JDLGlIQUFpSDtRQUNqSCxxQkFBcUI7UUFDckIscURBQXFEO1FBQ3JELHdCQUF3QjtRQUN4Qiw4REFBOEQ7UUFDOUQsNEVBQTRFO1FBQzVFLDBCQUEwQjtRQUMxQixnQkFBZ0I7UUFDaEIsZ0VBQWdFO1FBQ2hFLFlBQVk7UUFDWiw2QkFBNkI7UUFDN0IsK0NBQStDO1FBQy9DLHFHQUFxRztRQUNyRyxtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRiwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQseURBQXlEO1FBQ3pELGtCQUFrQjtRQUVsQixRQUFRO1FBQ1IsYUFBYTtRQUNiLDRDQUE0QztRQUM1QyxRQUFRO1FBQ1IsVUFBVTtJQUNkLENBQUM7OztZQW5FSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHMzNkJBQTBDOzthQUU3Qzs7O1lBVG1CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0bi10cmVlLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZUNvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3RvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPT0gZGVmYXVsdFNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYW5oTWFQQyhldnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVwZGF0ZU1hUGhhbkNhcEJhc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnxJDDoW5oIGzhuqFpIG3DoyBwaMOibiBj4bqlcCB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgIC8vICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgIH0sIDIwKTtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDIwKTtcbiAgICB9XG59XG4iXX0=
@@ -6,6 +6,12 @@ export class EntityPickerSearchFormComponent extends DataFormBase {
6
6
  super(_injector);
7
7
  this._injector = _injector;
8
8
  this.datasourceFieldFilter = [];
9
+ this.formData = {
10
+ placeholder: 'linh123\nnam123',
11
+ doiTuong: 'người dùng',
12
+ iconSave: 'pi pi-search',
13
+ labelSave: 'Tìm kiếm'
14
+ };
9
15
  this.onSearch = new EventEmitter();
10
16
  }
11
17
  set lstDataNotExist(value) {
@@ -25,6 +31,7 @@ export class EntityPickerSearchFormComponent extends DataFormBase {
25
31
  dataSource: this.datasourceFieldFilter,
26
32
  required: true,
27
33
  mdWidth: 12,
34
+ hidden: !this.datasourceFieldFilter.length,
28
35
  onChanged: (evt) => {
29
36
  const plusPlaceholder = evt.parentModel.fieldFilter == 'email' ? '@gmail.com' : '';
30
37
  evt.formControls['lstDataCheck'].placeholder = `linh123${plusPlaceholder}\nnam123${plusPlaceholder}`;
@@ -32,16 +39,16 @@ export class EntityPickerSearchFormComponent extends DataFormBase {
32
39
  }),
33
40
  new TextAreaControlSchema({
34
41
  field: 'lstDataCheck',
35
- label: 'Danh sách tìm kiếm',
36
- description: 'nhập mỗi người dùng là một dòng',
42
+ label: `Danh sách ${this.formData.doiTuong}`,
43
+ description: `nhập mỗi ${this.formData.doiTuong} là một dòng`,
37
44
  mdWidth: 12,
38
45
  rows: 10,
39
46
  required: true,
40
- placeholder: 'linh123\nnam123'
47
+ placeholder: this.formData.placeholder
41
48
  }),
42
49
  new TextAreaControlSchema({
43
50
  field: 'lstDataNotExist',
44
- label: 'Danh sách người dùng không hợp lệ',
51
+ label: `Danh sách ${this.formData.doiTuong} không hợp lệ`,
45
52
  hidden: true,
46
53
  mdWidth: 12
47
54
  }),
@@ -55,7 +62,9 @@ export class EntityPickerSearchFormComponent extends DataFormBase {
55
62
  }
56
63
  initDataAdd(evt) {
57
64
  return __awaiter(this, void 0, void 0, function* () {
58
- evt.rootModel.fieldFilter = this.datasourceFieldFilter[0].id;
65
+ if (this.datasourceFieldFilter.length) {
66
+ evt.rootModel.fieldFilter = this.datasourceFieldFilter[0].id;
67
+ }
59
68
  evt.rootModel.lstDataCheck = undefined;
60
69
  evt.rootModel.lstDataNotExist = undefined;
61
70
  });
@@ -79,7 +88,7 @@ export class EntityPickerSearchFormComponent extends DataFormBase {
79
88
  EntityPickerSearchFormComponent.decorators = [
80
89
  { type: Component, args: [{
81
90
  selector: 'entity-picker-search-form',
82
- template: "<crud-form #crudForm [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\" [(data)]=\"model.data\"\n (onFormReady)=\"_handleFormReady($event)\">\n</crud-form>\n<ng-template #buttonTemplate>\n <button pButton type=\"button\" icon=\"pi pi-search\" class=\"p-button-text\" [label]=\"'T\u00ECm ki\u1EBFm'\"\n (click)=\"customSave()\"></button>\n <button pButton preventTab type=\"button\" icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\n [label]=\"'FORM.CANCEL' | translate\" (click)=\"_handleCancel($event)\"></button>\n</ng-template>",
91
+ template: "<crud-form #crudForm [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\" [(data)]=\"model.data\"\n (onFormReady)=\"_handleFormReady($event)\">\n</crud-form>\n<ng-template #buttonTemplate>\n <button pButton type=\"button\" [icon]=\"formData.iconSave\" class=\"p-button-text\" [label]=\"formData.labelSave\"\n (click)=\"customSave()\"></button>\n <button pButton preventTab type=\"button\" icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\n [label]=\"'FORM.CANCEL' | translate\" (click)=\"_handleCancel($event)\"></button>\n</ng-template>",
83
92
  providers: [ComponentContextService],
84
93
  styles: [""]
85
94
  },] }
@@ -89,7 +98,8 @@ EntityPickerSearchFormComponent.ctorParameters = () => [
89
98
  ];
90
99
  EntityPickerSearchFormComponent.propDecorators = {
91
100
  datasourceFieldFilter: [{ type: Input }],
101
+ formData: [{ type: Input }],
92
102
  lstDataNotExist: [{ type: Input }],
93
103
  onSearch: [{ type: Output }]
94
104
  };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9lbnRpdHktcGlja2VyL2VudGl0eS1waWNrZXItZGlhbG9nL2NvbXBvbmVudHMvZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS9lbnRpdHktcGlja2VyLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUWxKLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxZQUFZO0lBWTdELFlBQ2MsU0FBbUI7UUFHN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSFAsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQVh4QiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFTMUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFNN0MsQ0FBQztJQWRELElBQWEsZUFBZSxDQUFDLEtBQWU7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUUxQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFD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bWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSwgRGF0YUZvcm1CYXNlLCBFdmVudERhdGEsIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWEsIFRleHRBcmVhQ29udHJvbFNjaGVtYSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VudGl0eS1waWNrZXItc2VhcmNoLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktcGlja2VyLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lbnRpdHktcGlja2VyLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBFbnRpdHlQaWNrZXJTZWFyY2hGb3JtQ29tcG9uZW50IGV4dGVuZHMgRGF0YUZvcm1CYXNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIGRhdGFzb3VyY2VGaWVsZEZpbHRlciA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBsc3REYXRhTm90RXhpc3QodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS5qb2luKCdcXG4nKTtcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmxzdERhdGFOb3RFeGlzdCA9IHN0clZhbHVlO1xuICAgICAgICB0aGlzLmNydWRGb3JtLl9tb2RlbERhdGEubHN0RGF0YU5vdEV4aXN0ID0gc3RyVmFsdWU7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzWydsc3REYXRhTm90RXhpc3QnXS5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYSA9IFtcbiAgICAgICAgICAgIG5ldyBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpZWxkRmlsdGVyJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4buNbiB0acOqdSBjaMOtIHTDrG0ga2nhur9tJyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiB0aGlzLmRhdGFzb3VyY2VGaWVsZEZpbHRlcixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICBvbkNoYW5nZWQ6IChldnQ6IEV2ZW50RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVzUGxhY2Vob2xkZXIgPSBldnQucGFyZW50TW9kZWwuZmllbGRGaWx0ZXIgPT0gJ2VtYWlsJyA/ICdAZ21haWwuY29tJyA6ICcnO1xuICAgICAgICAgICAgICAgICAgICBldnQuZm9ybUNvbnRyb2xzWydsc3REYXRhQ2hlY2snXS5wbGFjZWhvbGRlciA9IGBsaW5oMTIzJHtwbHVzUGxhY2Vob2xkZXJ9XFxubmFtMTIzJHtwbHVzUGxhY2Vob2xkZXJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBUZXh0QXJlYUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbHN0RGF0YUNoZWNrJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0Rhbmggc8OhY2ggdMOsbSBraeG6v20nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbmjhuq1wIG3hu5dpIG5nxrDhu51pIGTDuW5nIGzDoCBt4buZdCBkw7JuZycsXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTIsXG4gICAgICAgICAgICAgICAgcm93czogMTAsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdsaW5oMTIzXFxubmFtMTIzJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgVGV4dEFyZWFDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2xzdERhdGFOb3RFeGlzdCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdEYW5oIHPDoWNoIG5nxrDhu51pIGTDuW5nIGtow7RuZyBo4bujcCBs4buHJyxcbiAgICAgICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uRm9ybUluaXRpYWxpemVkKGNvbnRyb2xzOiBFdmVudERhdGEpIHtcbiAgICAgICAgLy8gdGnhu4FuIHjhu60gbMO9IGThu68gbGnhu4d1ICh2w60gZOG7pSB04buVbmcgaOG7o3AgZGF0YXNvdXJjZSksIHRyxrDhu5tjIGtoaSBn4buNaSBhcGkgZ2V0IGRldGFpbFxuXG4gICAgfVxuICAgIGFzeW5jIGluaXREYXRhQWRkKGV2dDogRXZlbnREYXRhKSB7XG4gICAgICAgIGV2dC5yb290TW9kZWwuZmllbGRGaWx0ZXIgPSB0aGlzLmRhdGFzb3VyY2VGaWVsZEZpbHRlclswXS5pZDtcbiAgICAgICAgZXZ0LnJvb3RNb2RlbC5sc3REYXRhQ2hlY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGV2dC5yb290TW9kZWwubHN0RGF0YU5vdEV4aXN0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeURldGFpbERhdGEoZGF0YSkge1xuICAgICAgICAvLyB44butIGzDvSBk4buvIGxp4buHdSBs4bqleSB04burIGdldCBkZXRhaWwgduG7gVxuICAgIH1cblxuICAgIGFzeW5jIGN1c3RvbVNhdmUoKSB7XG4gICAgICAgIC8vIHRyxrDhu5tjIGtoaSBsxrB1XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybSgpO1xuICAgICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmxzdERhdGEgPSB0aGlzLm1vZGVsLmRhdGEubHN0RGF0YUNoZWNrLnNwbGl0KCdcXG4nKS5tYXAocCA9PiBwLnRyaW0oKSkuZmlsdGVyKHAgPT4gcCk7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh0aGlzLm1vZGVsLmRhdGEpO1xuICAgIH1cblxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9lbnRpdHktcGlja2VyL2VudGl0eS1waWNrZXItZGlhbG9nL2NvbXBvbmVudHMvZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS9lbnRpdHktcGlja2VyLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUWxKLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxZQUFZO0lBa0I3RCxZQUNjLFNBQW1CO1FBRzdCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUhQLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFqQnhCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQVE7WUFDckIsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixRQUFRLEVBQUUsWUFBWTtZQUN0QixRQUFRLEVBQUUsY0FBYztZQUN4QixTQUFTLEVBQUUsVUFBVTtTQUN4QixDQUFDO1FBU1EsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFNN0MsQ0FBQztJQWRELElBQWEsZUFBZSxDQUFDLEtBQWU7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUUxQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFD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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7S0FBQTs7O1lBdkZKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyw2bEJBQXlEO2dCQUV6RCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQVJpQyxRQUFROzs7b0NBV3JDLEtBQUs7dUJBQ0wsS0FBSzs4QkFNTCxLQUFLO3VCQVFMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsIERhdGFGb3JtQmFzZSwgRXZlbnREYXRhLCBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hLCBUZXh0QXJlYUNvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9wdWJsaWMtYXBpJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlbnRpdHktcGlja2VyLXNlYXJjaC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZW50aXR5LXBpY2tlci1zZWFyY2gtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5UGlja2VyU2VhcmNoRm9ybUNvbXBvbmVudCBleHRlbmRzIERhdGFGb3JtQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBkYXRhc291cmNlRmllbGRGaWx0ZXIgPSBbXTtcbiAgICBASW5wdXQoKSBmb3JtRGF0YTogYW55ID0ge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ2xpbmgxMjNcXG5uYW0xMjMnLFxuICAgICAgICBkb2lUdW9uZzogJ25nxrDhu51pIGTDuW5nJyxcbiAgICAgICAgaWNvblNhdmU6ICdwaSBwaS1zZWFyY2gnLFxuICAgICAgICBsYWJlbFNhdmU6ICdUw6xtIGtp4bq/bSdcbiAgICB9O1xuICAgIEBJbnB1dCgpIHNldCBsc3REYXRhTm90RXhpc3QodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS5qb2luKCdcXG4nKTtcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmxzdERhdGFOb3RFeGlzdCA9IHN0clZhbHVlO1xuICAgICAgICB0aGlzLmNydWRGb3JtLl9tb2RlbERhdGEubHN0RGF0YU5vdEV4aXN0ID0gc3RyVmFsdWU7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzWydsc3REYXRhTm90RXhpc3QnXS5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYSA9IFtcbiAgICAgICAgICAgIG5ldyBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpZWxkRmlsdGVyJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4buNbiB0acOqdSBjaMOtIHTDrG0ga2nhur9tJyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiB0aGlzLmRhdGFzb3VyY2VGaWVsZEZpbHRlcixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICBoaWRkZW46ICF0aGlzLmRhdGFzb3VyY2VGaWVsZEZpbHRlci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2VkOiAoZXZ0OiBFdmVudERhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGx1c1BsYWNlaG9sZGVyID0gZXZ0LnBhcmVudE1vZGVsLmZpZWxkRmlsdGVyID09ICdlbWFpbCcgPyAnQGdtYWlsLmNvbScgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgZXZ0LmZvcm1Db250cm9sc1snbHN0RGF0YUNoZWNrJ10ucGxhY2Vob2xkZXIgPSBgbGluaDEyMyR7cGx1c1BsYWNlaG9sZGVyfVxcbm5hbTEyMyR7cGx1c1BsYWNlaG9sZGVyfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgVGV4dEFyZWFDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2xzdERhdGFDaGVjaycsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGBEYW5oIHPDoWNoICR7dGhpcy5mb3JtRGF0YS5kb2lUdW9uZ31gLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgbmjhuq1wIG3hu5dpICR7dGhpcy5mb3JtRGF0YS5kb2lUdW9uZ30gbMOgIG3hu5l0IGTDsm5nYCxcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICByb3dzOiAxMCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5mb3JtRGF0YS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgVGV4dEFyZWFDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2xzdERhdGFOb3RFeGlzdCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGBEYW5oIHPDoWNoICR7dGhpcy5mb3JtRGF0YS5kb2lUdW9uZ30ga2jDtG5nIGjhu6NwIGzhu4dgLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMlxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoY29udHJvbHM6IEV2ZW50RGF0YSkge1xuICAgICAgICAvLyB0aeG7gW4geOG7rSBsw70gZOG7ryBsaeG7h3UgKHbDrSBk4bulIHThu5VuZyBo4bujcCBkYXRhc291cmNlKSwgdHLGsOG7m2Mga2hpIGfhu41pIGFwaSBnZXQgZGV0YWlsXG5cbiAgICB9XG4gICAgYXN5bmMgaW5pdERhdGFBZGQoZXZ0OiBFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZUZpZWxkRmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbC5maWVsZEZpbHRlciA9IHRoaXMuZGF0YXNvdXJjZUZpZWxkRmlsdGVyWzBdLmlkO1xuICAgICAgICB9XG4gICAgICAgIGV2dC5yb290TW9kZWwubHN0RGF0YUNoZWNrID0gdW5kZWZpbmVkO1xuICAgICAgICBldnQucm9vdE1vZGVsLmxzdERhdGFOb3RFeGlzdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGEpIHtcbiAgICAgICAgLy8geOG7rSBsw70gZOG7ryBsaeG7h3UgbOG6pXkgdOG7qyBnZXQgZGV0YWlsIHbhu4FcbiAgICB9XG5cbiAgICBhc3luYyBjdXN0b21TYXZlKCkge1xuICAgICAgICAvLyB0csaw4bubYyBraGkgbMawdVxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdGhpcy5jcnVkRm9ybS52YWxpZGF0ZUZvcm0oKTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICAgIHRoaXMubW9kZWwuZGF0YS5sc3REYXRhID0gdGhpcy5tb2RlbC5kYXRhLmxzdERhdGFDaGVjay5zcGxpdCgnXFxuJykubWFwKHAgPT4gcC50cmltKCkpLmZpbHRlcihwID0+IHApO1xuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodGhpcy5tb2RlbC5kYXRhKTtcbiAgICB9XG5cbn1cbiJdfQ==